java调用sql返回list_Spring JdbcTemplate实现有java.sql.ResultSet结果集返回的存储过程调用 | 学步园...

一、调用存储过程

方式一:

/**

* 方法功能说明:通过存储过程分页,获取分页信息以及查询记录(装在list中);

* List.get(0)= hsTable; //存放分页信息(tableName/token/pageNo/pageSize/recordsCount/pagesCount)--hsTable.get(key)

* List.get(1)= recordsList; //存放分页查询所获的记录--遍历记录(每一条记录是一个map)

* 创建:2012-10-16 by hsy

* 修改:日期 by 修改者

* 修改内容:

* @参数: @param inputXML

* @参数: @return

* @return List

* @throws

*/

private List getOutputRecords(String inputXML)throws Exception{

List list = new ArrayList();

try {

String[] params = xxm.parseXml4GetPageRecords(inputXML);//{tableName,sqlWhere,orderColumn,orderType,pageSize,pageNo,token};

final String tableName = params[0];

final String sqlWhere = params[1];

final String orderColumn = params[2];

final String orderType = params[3];

final int pageSize = Integer.parseInt(params[4]);

final int pageNo = Integer.parseInt(params[5]);

final String token = params[6];

String procedure = "{call prc_query(?,?,?,?,?,?,?,?,?)}";

list = (List) this.getJdbcTemplate().execute(procedure,new CallableStatementCallback(){

public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {

cs.setString(1, tableName);

cs.setString(2, sqlWhere);

cs.setString(3, orderColumn);

cs.setString(4, orderType);

cs.setInt(5, pageNo);

cs.setInt(6, pageSize);

cs.registerOutParameter(5,OracleTypes.INTEGER);//OracleTypes.INTEGER java.sql.Types.INTEGER

cs.registerOutParameter(6,OracleTypes.INTEGER);

cs.registerOutParameter(7,OracleTypes.INTEGER);

cs.registerOutParameter(8,OracleTypes.INTEGER);

cs.registerOutParameter(9,OracleTypes.CURSOR);

cs.execute();

List newList = new ArrayList();

Hashtable hsTable = new Hashtable();

hsTable.put("tableName", tableName);

hsTable.put("token", token);

String pageNo = cs.getObject(5).toString();

hsTable.put("pageNo", pageNo+"");

String pageSize = cs.getObject(6).toString();

hsTable.put("pageSize", pageSize+"");

String recordsCount = cs.getObject(7).toString();

hsTable.put("recordsCount", recordsCount);

String pagesCount = cs.getObject(8).toString();

hsTable.put("pagesCount", pagesCount);

ResultSet rs = (ResultSet)cs.getObject(9);

newList.add(hsTable);

//每循环一次遍历出来1条记录,记录对应的所有列值存放在map中(columnName:columnValue)

List recordsList = getResultSet(rs);

newList.add(recordsList);

return newList;

}

});

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

方式二:

/**

* 方法功能说明:通过存储过程分页,获取分页信息以及查询记录(装在list中);

* List.get(0)= hsTable; //存放分页信息(tableName/token/pageNo/pageSize/recordsCount/pagesCount)--hsTable.get(key)

* List.get(1)= recordsList; //存放分页查询所获的记录--遍历记录(每一条记录是一个map)

* 创建:2012-10-16 by hsy

* 修改:日期 by 修改者

* 修改内容:

* @参数: @param inputXML

* @参数: @return

* @return List

* @throws

*/

private List getOutputRecords(String inputXML)throws Exception{

List list = new ArrayList();

try {

String[] params = xxm.parseXml4GetPageRecords(inputXML);//{tableName,sqlWhere,orderColumn,orderType,pageSize,pageNo,token};

final String tableName = params[0];

final String sqlWhere = params[1];

final String orderColumn = params[2];

final String orderType = params[3];

final int pageSize = Integer.parseInt(params[4]);

final int pageNo = Integer.parseInt(params[5]);

final String token = params[6];

String procedure = "{call prc_query(?,?,?,?,?,?,?,?,?)}";

list = (List) this.getJdbcTemplate().execute(new CallableStatementCreator(){

public CallableStatement createCallableStatement(Connection conn) throws SQLException {

CallableStatement cs = conn.prepareCall(procedure);

cs.setString(1, tableName);

cs.setString(2, sqlWhere);

cs.setString(3, orderColumn);

cs.setString(4, orderType);

cs.setInt(5, pageNo);

cs.setInt(6, pageSize);

cs.registerOutParameter(5,OracleTypes.INTEGER);//OracleTypes.INTEGER java.sql.Types.INTEGER

cs.registerOutParameter(6,OracleTypes.INTEGER);

cs.registerOutParameter(7,OracleTypes.INTEGER);

cs.registerOutParameter(8,OracleTypes.INTEGER);

cs.registerOutParameter(9,OracleTypes.CURSOR);

return cs;

}

},new CallableStatementCallback(){

public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {

cs.execute();

List newList = new ArrayList();

Hashtable hsTable = new Hashtable();

hsTable.put("tableName", tableName);

hsTable.put("token", token);

String pageNo = cs.getObject(5).toString();

hsTable.put("pageNo", pageNo+"");

String pageSize = cs.getObject(6).toString();

hsTable.put("pageSize", pageSize+"");

String recordsCount = cs.getObject(7).toString();

hsTable.put("recordsCount", recordsCount);

String pagesCount = cs.getObject(8).toString();

System.out.println("\n");

hsTable.put("pagesCount", pagesCount);

ResultSet rs = (ResultSet)cs.getObject(9);

newList.add(hsTable);

//每循环一次遍历出来1条记录,记录对应的所有列值存放在map中(columnName:columnValue)

List recordsList = getResultSet(rs);

newList.add(recordsList);

return newList;

}

});

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

二:取结果集方法

/**

* 方法功能说明:将分页取出的结果集ResultSet对象组装成 List

* 每一个map对应一条记录,map长度 == column数量

* 创建:2012-10-16 by hsy

* 修改:日期 by 修改者

* 修改内容:

* @参数: @param rs

* @参数: @return

* @return Map

* @throws

*/

private List getResultSet(ResultSet rs)throws SQLException{

List list = new ArrayList();

try {

ResultSetMetaData rsmd = rs.getMetaData();

//每循环一次遍历出来1条记录,记录对应的所有列值存放在map中(columnName:columnValue)

while(rs.next()){

Map map = new HashMap();

int columnCount = rsmd.getColumnCount();

for(int i=0;i

String columnName = rsmd.getColumnName(i+1);

map.put(columnName, rs.getObject(i+1));

}

list.add(map);

}

} catch (SQLException e) {

e.printStackTrace();

}

return list;

}

希望对大家有用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今天研究了一下关于Asp.net文件上传时的内存消耗问题

晕啊,写了半天,突然间所有的格式都没了,我不得不在写字板中重新排版,DuDu哥,你还是快捷键都去掉吧。 简单研究了一下如何解决Asp.net连续上传文件时对内存占用越来越多的问题。但目前只能解决一部份问题,要…

Linux系统编程-管道入门

晚上好,继续记录我的学习心得。当你厌倦了自己的目标时,怎样继续保持专注?误区:成功人士说的都是自己如何“满怀热情”去努力实现他们的目标。不管是在商业、体育还是艺术界,我们听到的都是“一切都归结于激情”或者“…

JavaScript 基础,登录前端验证

1、<script></script>的三种用法&#xff1a; 1.放在<body>中 2.放在<head>中 3.放在外部JS文件中 2、三种输出数据的方式&#xff1a; 1.使用 document.write() 方法将内容写到 HTML 文档中。 2.使用 window.alert() 弹出警告框。 3.使用 innerHTML 写…

Meta的用法

----------------------------------------------- ? 这就是meta标签的典型运用。meta标签有多少参数&#xff0c;有什么作用&#xff0c;为什么我们要特别重视它呢&#xff1f;让我们一起来发掘meta标签的奥妙! ? 根据HTML语言标准注释&#xff1a;meta标签是对网站发展非常…

iOS10 打开APP设置界面和WIFI界面

在iOS10以上&#xff0c;权限这块有了一些变化 首先在info的URL Types 添加 prefs 1、打开APP设置界面 //打开设置let url:NSURL NSURL(string: UIApplicationOpenSettingsURLString)!if UIApplication.shared.canOpenURL(url as URL){ UIApplication.shared.openURL(url as…

一种简单、实用的测量程序运行时间的方法

前言 平时我们可能很少去关注程序运行的时间&#xff0c;但是在一些情况下可能需要对程序进行一个整体的复盘、优化。那么&#xff0c;程序运行的时间就是一个可以考虑的方面&#xff0c;可以测一下某些代码块、函数、算法的运行时间&#xff0c;然后整体考虑看看有没有必要进行…

可以这样给DataGrid加个序号列。

先给DataGrid加个绑定列&#xff0c;该列设置页眉文本&#xff0c;但“数据字段”留空&#xff0c;然后在ItemDataBound事件中加入下面代码。 privatevoiddgScore_ItemDataBound(objectsender, System.Web.UI.WebControls.DataGridItemEventArgs e) { …

工作几天被裁员,难受

前两天&#xff0c;一个读者朋友私聊我说&#xff0c;自己被公司裁员了&#xff0c;这是他的第一份工作&#xff0c;只工作了不到半个月就收到了裁员信息。他非常不甘心&#xff0c;也非常恐慌&#xff0c;不甘心的是&#xff0c;自己觉得工作已经非常努力&#xff0c;也有做出…

C++17 inline静态变量,静态变量不用再类内定义类外初始化了

而在 C17 引入的标准中&#xff0c;你可以直接在类中定义并初始化类静态成员变量&#xff0c;并且这个表达式还是constexpr&#xff0c;从而可以在编译时进行求值&#xff0c;提供更好的优化。 例如&#xff1a; // MyClass.h class MyClass { public:inline static int myVa…

cad2017单段线_没想到啊,我平时用的CAD多段线有这么多学问

很多人都说&#xff0c;CAD用多段线来代替直线绘图会比较方便&#xff0c;因为多段线除了常规直线功能之外&#xff0c;也能画弧线&#xff0c;更重要的是&#xff0c;一次命令执行的线条为一个整体&#xff0c;操作方便。难道多段线PL仅仅只有这明面上的实力吗&#xff1f;当然…

找灵感

关于博客园首页设计&#xff0c;推荐大家到http://pages.blueidea.com/找灵感&#xff0c;几百种艺术设计方案...

一个超强的逆向分析软件

IDA 超强逆向分析工具先说下&#xff0c;想获取这个工具的同学&#xff0c;请在公众号后台回复 「逆向分析」获取下载链接。IDA Pro&#xff08;交互式反汇编其专业版&#xff0c;后续简称为IDA&#xff09;软件是由Hex-Rays SA公司发布&#xff0c;属于当前最炙手可热的一款世…

php的缓存机制,PHP缓存机制

在这里&#xff0c;我们通过一个代码示例进一步了解PHP自身的缓存机制&#xff0c;在今后的学习中&#xff0c;也会对缓存这个概念有一个大致的了解。使用php自身的缓存机制如果要测试php自己的缓存机制, 需要配置php.ini 文件display_errorsOnoutput_bufferingOfferror_report…

java 检索ldap,从LDAP(Java)检索信息

我正在尝试从LDAP服务器检索数据,但它失败了. (连接工程).我很难理解最后一行中search()方法需要哪些参数……“mail”是我想要获取的信息,userName是经过身份验证的用户.DirContext authContext new InitialDirContext(authEnv);SearchControls constraints new SearchContr…

你还不知道怎么退出 Vim?

提起文本编辑器&#xff0c;你一定会想到编辑器之神 Vim。据 Stack Overflow 的开发者调查&#xff1a;2015 年程序员中最流行的编辑器是 Notepad&#xff0c;Vim 的使用比例占 15.2%。到了 2019 年&#xff0c;最流行的开发环境变成 VS Code&#xff0c;而 Vim 的使用比例已占…

如何在C#里实现端口监视呢?

这个问题今天差不多弄了一整天在网上也找不到相关的资料&#xff0c;或者找到的也实现不了总是很奇怪唉

【hdu2089】不要62

惊奇地发现今天居然和dalao的题单重了不少23333333333333 这是我第一次做数位dp&#xff0c;感觉这个题目还是比较兹磁的 #include<iostream> #include<cstring> #include<cstdio> using namespace std; int l,r,dp[20][15],a[20]; int dfs(int pos,int las,…

我的大学6年

这篇文章是郭天祥前辈写的&#xff0c;想起来我上大学那时候&#xff0c;也是看他的视频入门的单片机开发&#xff0c;而且那时候&#xff0c;没有这么多渠道了解外面的东西。当时最喜欢的是一个技术论坛&#xff0c;现在还因为某种原因开始收费了&#xff0c;更甚的是如果不按…

php无法创建cookie,php-curl cookie无法成功创建

我正在使用cUrl(PHP)发布登录请求并将响应存储在cookie文件中.在我的第二个请求中,我在标题中传递cookie并发布数据以进行验证.问题是未在第一个成功请求中创建cookie文件会导致第二个请求失败.请告诉我我做错了什么.$cookiefile"/var/www/html/dimdim/cook.txt";$ur…

找出优先要作的工作

通过讨论找出很多问题&#xff0c;明天就要把这些问题整理出来&#xff0c;并找出优先要作的工作&#xff0c;并按排日程。对目前不能解决的问题写出自已的想法&#xff0c;以备日后研究作为参考。