Oracle存储过程的调用以及返回结果集的提取


DEMO例子

 
/****
* 查询用户所有持有的产品(DEMO)
* @param session
* @param clientNo
* @param productCode
* @return
* @throws MallException
*/
public Map<String, Object> queryUserProduct(Session session, int clientNo, String productCode) throws MallException {

Connection connection = null;
CallableStatement callableStatement = null;
ResultSet resultSet = null;
String errorMsg = "";
int errorcode = -1;
List<Map> result = null;
try {
connection = session.connection();//按需替换成自己的connection
connection.setAutoCommit(false);
String callProcSql = "{ call QUERY_USER_PRODUCT (?,?,?,?) }";

callableStatement = connection.prepareCall(callProcSql);
//存储过程入参
callableStatement.setInt(1, clientNo);//客户号
callableStatement.setString(2, productCode);//产品代码
callableStatement.registerOutParameter(4, -10); //输出的是结果集
callableStatement.registerOutParameter(5, -10);
callableStatement.execute();
resultSet = (ResultSet) callableStatement.getObject(4);
try {
if (resultSet != null) {
result = extractData(resultSet);//结果集抽取
if (result != null && result.size() > 0) {
try {
errorcode = Integer.parseInt(result.get(0).get("error_code") + "");
} catch (Exception e) {
e.printStackTrace();
}
errorMsg = (String) result.get(0).get("error_msg");
}
}
} finally {
if (resultSet != null){
resultSet.close();
}
}

if (connection != null) {
connection.commit();
}

} catch (Exception ex) {
ex.printStackTrace();
try {
if (connection != null) {
connection.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
errorMsg = ex.getMessage(); //返回的错误消息按需定义
} finally {
try {
if (callableStatement != null) {
callableStatement.close();
callableStatement = null;
}
if (connection != null && !connection.isClosed()) {
connection.close();
}
connection = null;
} catch (Exception e) {
e.printStackTrace();
}
}
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("error_msg", errorMsg);
resultMap.put("error_code", errorcode);
return resultMap;
}

/**
* 返回的结果集提取
* 转为List<Map>
* @param resultSet
* @return
* @throws SQLException
*/
private List<Map> extractData(ResultSet resultSet) throws SQLException {
if (resultSet == null) {
return null;
}
ResultSetMetaData metaData = resultSet.getMetaData();
List<Map> result = new ArrayList<Map>();
while (resultSet.next()) {
Map map = new LinkedHashMap();
for (int i = 0; i < metaData.getColumnCount(); i++) {
Object o = resultSet.getObject(metaData.getColumnName(i + 1));
String key = ((String) metaData.getColumnName(i + 1)).toLowerCase();
map.put(key, resultSet.getString(metaData.getColumnName(i + 1)));
}
result.add(map);
}
return result;
}
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM