Java调用存储过程,使用JdbcTemplate

本文介绍了一种自定义数据源服务sysDataSourceService的使用方法,通过该服务获取数据源,并利用JdbcTemplate调用数据库存储过程,实现参数传递与结果集处理。文章详细展示了如何创建CallableStatement并执行存储过程,以及如何从结果集中读取数据并转换为List<Map<String,Object>>格式。

1、sysDataSourceService是自定义的获取数据源服务

JdbcTemplate jdbcTempleDynamic = sysDataSourceService.getDataSourcePoolBySourceID(source_id);

2、使用jdbcTempleDynamic.execute调用存储过程,传入对应的所需参数

List<Map<String, Object>>  resultList = new ArrayList<Map<String, Object>>();
String sql="{call douzi_admin_v3.sp_drilling_search_v3(?,?,?,?,?,?,?)}"
resultList = (List<Map<String, Object>>) jdbcTempleDynamic.execute(
							new CallableStatementCreator() {
								public CallableStatement createCallableStatement(Connection con)
										throws SQLException {
								    String sql="{call douzi_admin_v3.sp_drilling_search_v3(?,?,?,?,?,?,?)}"
									CallableStatement cs=con.prepareCall(sql);
									cs.setString(1, item);
									cs.setString(2, target);
									cs.setString(3, beginTime);
									cs.setString(4, endTime);
									cs.setString(5, whereSql);
									cs.setString(6, timeType);
									cs.setLong(7, uid);
									cs.setString(8, lastkey);
									return cs;
								}
							},new CallableStatementCallback(){
								public Object doInCallableStatement(CallableStatement cs)
										throws SQLException, DataAccessException {
									cs.execute();
									List<Map<String, Object>> lastList = new ArrayList<Map<String,Object>>();  
									ResultSet rs = cs.getResultSet();
									ResultSetMetaData md = rs.getMetaData(); //获得结果集结构信息,元数据  
									int columnCount = md.getColumnCount();   //获得列数   
									//将JDBC ResultSet结果集转成List
									while(rs != null && rs.next()){
										//LinkedHashMap按输入顺序输出
										Map<String,Object> rowData = new LinkedHashMap<String,Object>();  
										for (int i = 1; i <= columnCount; i++) {  
											rowData.put(md.getColumnLabel(i), rs.getObject(i));//getColumnLabel()获取当前的字段名,getColumnName()获取数据库的字段名(别名没用)
										}  
										lastList.add(rowData);
									}
									return lastList;
								}
							}
						);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值