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;
}
希望对大家有用!
java调用sql返回list_Spring JdbcTemplate实现有java.sql.ResultSet结果集返回的存储过程调用 | 学步园...相关推荐
- c# mysql executescalar为什么返回值是空_C#中ExecuteReader()、ExecuteNonQuery()、ExecuteScalar()方法的作用 | 学步园...
ExecuteReader 将 CommandText 发送到 Connection 并生成一个 SqlDataReader 执行返回行的命令. 为了提高性能,ExecuteReader ...
- java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式 | 学步园...
1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...
- java下拉框及响应函数_Java 下拉框JComboBox和单选按钮JRadioButton简单举例使用 | 学步园...
下面代码仅供参考,也可作为模板使用. package com.View; import java.awt.Color; import java.awt.GridLayout; import java. ...
- java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...
- java定时发送短信_java实现指定时间触发一个事件(比如定时发送短信) | 学步园...
package com.huawei.dm.datasource.system; import java.util.Calendar; import java.util.Date; import ja ...
- java gui 监听组合键_【CSDN常见问题解答】Swing监听组合键 | 学步园
其实监听键盘事件和简单,键盘也就这3个事件keyTyped, keyReleased, keyPressed 下面我们就监听一个CTRL+C组合键好了. import java.awt.Color; ...
- java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用, ...
- java resultset 获取列名_ResultSet 动态获取列名 | 学步园
方法1 ResultSet rs = stmt.executeQuery("SELECT * FROM TABLE"); ResultSetMetaData rsmd = rs.g ...
- java生成word带多级标题,word2007中多级标题的设置和目录的自动生成 | 学步园
如果你要写一篇论文,最好是在写之前将多级标题设置好,这样才能事半功倍,并且可自动生成带超链接的目录,下面言归正传将介绍一篇论文格式的标题和目录. 一.多级标题的生成 如果你最多只用到标题的3级,则只需 ...
最新文章
- ITK:应用Exp负图像过滤器
- 华为代码规范_53年国内唯三,华为MindSpore论文获顶会最佳论文提名
- QPW 点评表(tf_appraise)
- vector function trmplate
- 高性价比手持机有哪些
- python jpg 压缩因子_IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
- android gpu linux,Arm发布针对Mali GPU的Android Linux Vulkan用户空间驱动(HiKey 960,Firefly-RK3288主板)...
- Unity3d gameObject
- mysql 调用webservice_ETL第二篇 调用webservice
- mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
- PHP 简体中文繁体互转
- 华为2019校招实习笔试-软件题
- 上网代理设置会被自动清空_每次开机IE代理服务器都被恶意设置,删除了,下次开机又出现,反反复复。我从没设置过它...
- ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。
- sql server访问Excel97-2003 Excel2007
- 华为手机隐藏的5个技巧,每一个值得收藏
- 公理设计:由奇怪海战引发的软件设计思考
- 最小二乘法的详细解释
- 好分数班级等级C_重磅!湖北2019年高考分数线公布!
- 切身体会设计系统时的前瞻性问题
热门文章
- Oracle 制造死锁和查询死锁
- 将一段复杂文本变成字符串的赋值语句
- WCF和webservice的区别
- Point和PointF
- 学成在线--12.Spring整合RibbitMQ
- 《操作系统》OS学习(二):启动、中断、异常
- vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。
- 输出四位完全平方数_完全平方数中的规律
- 小程序购物车抛物线(贝塞尔曲线实现)
- Node.js 得到当前目录下文件修改文件名