一、调用存储过程
方式一:
/**
* 方法功能说明:通过存储过程分页,获取分页信息以及查询记录(装在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<--(columnName:columnValue),
* 每一个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<columnCount;i++){
String columnName = rsmd.getColumnName(i+1);
map.put(columnName, rs.getObject(i+1));
}
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
希望对大家有用!
分享到:
相关推荐
我们使用 `CallableStatement` 对象调用存储过程,并使用 `ResultSet` 对象处理结果集。 对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中...
例如,可以创建一个存储过程,该过程返回一个可滚动的结果集。然后,`JdbcTemplate`会使用`ResultSetExtractor`接口来处理这个结果集。`SplitPageResultSetExtractor`可能就是这样一个自定义的提取器,用于分割结果...
本文将深入探讨Spring JdbcTemplate的常用方法,并结合提供的`JsonBean.java`和`JdbcUtils.java`文件,来理解其在实际应用中的使用。 首先,JdbcTemplate的核心功能在于它提供了一系列的方法来执行SQL语句,包括...
在Spring中,JdbcTemplate就是一个典型的模板类,它实现了数据库操作的基本流程,如创建Connection、PreparedStatement、处理结果集等。用户可以通过扩展或自定义模板方法来实现特定的数据库操作逻辑。 **3. 回调...
此外,JdbcTemplate还提供了其他高级功能,如批量操作、分页查询、存储过程调用等。同时,它也支持PreparedStatement,可以防止SQL注入攻击。对于性能要求较高的互联网应用,JdbcTemplate的这些特性使其成为理想的...
在Spring Boot框架中,JdbcTemplate是一个非常重要的组件,它提供了简化数据库操作的API,使得开发者可以更加方便地执行SQL语句。本项目旨在利用JdbcTemplate进行数据库操作,从而实现一些常见的数据库交互功能。 ...
### Spring JdbcTemplate与声明式事务知识点详解 #### JdbcTemplate基本使用概述 JdbcTemplate是Spring框架提供的用于简化JDBC API操作的对象。它通过提供一个高级抽象层来减少编码工作量,并帮助开发者避免处理...
JDBC提供了一组Java API,主要包括`java.sql.DriverManager`、`java.sql.Connection`、`java.sql.Statement`、`java.sql.ResultSet`等类,它们分别是数据库驱动管理器、数据库连接、SQL语句执行对象和查询结果集。...
无论是查询、插入还是调用存储过程,`jdbcTemplate`都能提供简洁且安全的API,使得数据库操作变得更加便捷。在实际开发中,结合自定义的映射器和回调处理器,我们可以构建出高效且灵活的数据库访问层。
- `call`:用于执行存储过程调用。 通过这些方法,开发者可以轻松地进行数据库操作,无需关注底层的资源管理和异常处理,从而提高了开发效率和代码质量。 总之,Spring-JdbcTemplate通过其简洁的API和强大的功能,...
在本文中,我们将深入探讨如何使用Spring Boot集成JdbcTemplate与MySQL数据库进行数据操作。Spring Boot以其简化配置和快速启动的特点,已经成为Java开发者的首选框架。而JdbcTemplate是Spring框架的一部分,它提供...
- **queryForObject()**:执行查询并期望返回单个对象,如果结果集为空或有多个结果,会抛出异常。 - **update()**:用于执行更新、插入、删除等操作,返回受影响的行数。 - **execute()**:可以执行任意的SQL语句,...
使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8. 使用SimpleJdbcCall调用内置函数 11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6...
`JdbcTemplate`作为Spring JDBC的核心类,主要负责执行SQL语句并处理结果集。通过使用不同的方法,它可以支持各种类型的数据库查询和更新操作。这些方法通常被设计为易于理解和使用,同时提供了良好的错误处理机制。...
3. **遍历结果集**:`ResultSet`是迭代器,用于逐行读取查询结果。通过调用`next()`方法移动到下一行,并使用`getString()`, `getInt()`等方法获取列值。 4. **构建SQL文件**:将查询结果转化为INSERT INTO语句,...
对于查询操作,JdbcTemplate提供了query方法,可以接收一个SQL查询语句和一个RowCallbackHandler,后者会在每处理一行结果集时被调用。例如,从数据库中查询ID小于20的所有用户: ```java List<User> users = new ...
此外,了解一些高级特性也很重要,如事务管理、批处理、预编译的SQL语句(提高性能)、游标处理、存储过程调用等。对于大数据量的操作,优化JDBC配置,比如设置合适的连接池,可以显著提升性能。 在实际开发中,你...