jdbc取mysql儲存過程多個結果集
阿新 • • 發佈:2019-02-11
先來返回結果格式:
[ [ {"name":"分管公司1","id":"1000"}, {"name":"分管公司2","id":"1001"}, {"name":"分管公司3","id":"1014"}, {"name":"分管公司4","id":"1015"}, {"name":"分管公司5","id":"1016"}, {"name":"分管公司6","id":"1017"} ], [ {"哈哈":""} ], [ {"呵呵":2} ] ]
java程式碼:
呼叫儲存過程個方法針對框架進行封裝過,大家可以忽略也可替換,cs.execute();後辨識解析的返回值的程式碼
public List callShellProcedureList(final String param){ System.out.println(1); List list = jdbcTemplate.execute(new CallableStatementCreator() { public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call USP_PRG_CallShellProcedure(?)}";// 呼叫儲存過程名 CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, param);// 設定輸入引數的值 return cs; } }, new CallableStatementCallback<List>() { public List doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { cs.execute(); List list1 =new ArrayList(); ResultSet resultSet = cs.getResultSet();//獲取第一個resultSet //result 封裝結果集 List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); if(null != resultSet) { ResultSetMetaData data = resultSet.getMetaData(); if (null != data) { //每迴圈一次遍歷出來1條記錄,記錄對應的所有列值存放在map中(columnName:columnValue) while (resultSet.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < data.getColumnCount(); i++) //以鍵值對存放資料 //直接存放欄位名稱 //map.put(data.getColumnName(i + 1), rs.getObject(i + 1)); //直接存放欄位的別名 map.put(data.getColumnLabel(i + 1), resultSet.getObject(i + 1)); result.add(map); } list1.add(result); } while(cs.getMoreResults())//判斷是否還有結果集如果有就進入迴圈去取值 { List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); resultSet = cs.getResultSet();//這裡去到的是當前getMoreResults()裡面的getResultset ResultSetMetaData datas = resultSet.getMetaData(); if (null != datas) { //每迴圈一次遍歷出來1條記錄,記錄對應的所有列值存放在map中(columnName:columnValue) while (resultSet.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < datas.getColumnCount(); i++) //以鍵值對存放資料 //直接存放欄位名稱 //map.put(data.getColumnName(i + 1), rs.getObject(i + 1)); //直接存放欄位的別名 map.put(datas.getColumnLabel(i + 1), resultSet.getObject(i + 1)); results.add(map); } list1.add(results); } } } return list1; } }); return list; }
傳入要呼叫的儲存過程介面
這個方法會將多返回集以陣列的方式返回出來
返回示例:
[ [ {"name":"分管公司1","id":"1000"}, {"name":"分管公司2","id":"1001"}, {"name":"分管公司3","id":"1014"}, {"name":"分管公司4","id":"1015"}, {"name":"分管公司5","id":"1016"}, {"name":"分管公司6","id":"1017"} ], [ {"哈哈":""} ], [ {"呵呵":2} ] ]
儲存過程程式碼:
begin
select s1.name,s1.id from sys_office as s1,(select LENGTH(parent_ids) - LENGTH(REPLACE( `parent_ids`,',','' )) as countdou,parent_ids from sys_office
where parent_ids LIKE '%0,318d76c07c2540259b16c63df273d7b3,%' and del_flag =0
GROUP BY parent_ids
order by countdou DESC
LIMIT 0,1) as s2
where s1.parent_ids = s2.parent_ids and s1.del_flag =0 ;
select null as `哈哈`;
select 2 as `呵呵`;
end
如果遇到問題的話可以加我qq討論一下 1311353736