一、调用存储过程

方式一:

/**

* 方法功能说明:通过存储过程分页,获取分页信息以及查询记录(装在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结果集返回的存储过程调用 | 学步园...相关推荐

  1. c# mysql executescalar为什么返回值是空_C#中ExecuteReader()、ExecuteNonQuery()、ExecuteScalar()方法的作用 | 学步园...

    ExecuteReader    将 CommandText 发送到 Connection 并生成一个 SqlDataReader    执行返回行的命令. 为了提高性能,ExecuteReader  ...

  2. java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式 | 学步园...

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  3. java下拉框及响应函数_Java 下拉框JComboBox和单选按钮JRadioButton简单举例使用 | 学步园...

    下面代码仅供参考,也可作为模板使用. package com.View; import java.awt.Color; import java.awt.GridLayout; import java. ...

  4. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...

    今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...

  5. java定时发送短信_java实现指定时间触发一个事件(比如定时发送短信) | 学步园...

    package com.huawei.dm.datasource.system; import java.util.Calendar; import java.util.Date; import ja ...

  6. java gui 监听组合键_【CSDN常见问题解答】Swing监听组合键 | 学步园

    其实监听键盘事件和简单,键盘也就这3个事件keyTyped, keyReleased, keyPressed 下面我们就监听一个CTRL+C组合键好了. import java.awt.Color; ...

  7. java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园

    我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用, ...

  8. java resultset 获取列名_ResultSet 动态获取列名 | 学步园

    方法1 ResultSet rs = stmt.executeQuery("SELECT * FROM TABLE"); ResultSetMetaData rsmd = rs.g ...

  9. java生成word带多级标题,word2007中多级标题的设置和目录的自动生成 | 学步园

    如果你要写一篇论文,最好是在写之前将多级标题设置好,这样才能事半功倍,并且可自动生成带超链接的目录,下面言归正传将介绍一篇论文格式的标题和目录. 一.多级标题的生成 如果你最多只用到标题的3级,则只需 ...

最新文章

  1. ITK:应用Exp负图像过滤器
  2. 华为代码规范_53年国内唯三,华为MindSpore论文获顶会最佳论文提名
  3. QPW 点评表(tf_appraise)
  4. vector function trmplate
  5. 高性价比手持机有哪些
  6. python jpg 压缩因子_IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
  7. android gpu linux,Arm发布针对Mali GPU的Android Linux Vulkan用户空间驱动(HiKey 960,Firefly-RK3288主板)...
  8. Unity3d gameObject
  9. mysql 调用webservice_ETL第二篇 调用webservice
  10. mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
  11. PHP 简体中文繁体互转
  12. 华为2019校招实习笔试-软件题
  13. 上网代理设置会被自动清空_每次开机IE代理服务器都被恶意设置,删除了,下次开机又出现,反反复复。我从没设置过它...
  14. ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。
  15. sql server访问Excel97-2003 Excel2007
  16. 华为手机隐藏的5个技巧,每一个值得收藏
  17. 公理设计:由奇怪海战引发的软件设计思考
  18. 最小二乘法的详细解释
  19. 好分数班级等级C_重磅!湖北2019年高考分数线公布!
  20. 切身体会设计系统时的前瞻性问题

热门文章

  1. Oracle 制造死锁和查询死锁
  2. 将一段复杂文本变成字符串的赋值语句
  3. WCF和webservice的区别
  4. Point和PointF
  5. 学成在线--12.Spring整合RibbitMQ
  6. 《操作系统》OS学习(二):启动、中断、异常
  7. vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。
  8. 输出四位完全平方数_完全平方数中的规律
  9. 小程序购物车抛物线(贝塞尔曲线实现)
  10. Node.js 得到当前目录下文件修改文件名