当前页面: 开发资料首页 → J2EE 专题 → 关于java调用Oracle存储过程返回结果集
关于java调用Oracle存储过程返回结果集
摘要: 关于java调用Oracle存储过程返回结果集
返回结果集本身不困难,网上很多相关例子,比如:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.100:1521:ccenter", "call", "call");
String sql = "{call proc_getcallback(?, ?, ?, ?)}";
CallableStatement csmt = tempConn.prepareCall(sql);
csmt.setString(1, start);
csmt.setString(2, end);
csmt.setInt(3, countyId);
csmt.registerOutParameter(4, OracleTypes.CURSOR);
csmt.execute();
rs = ((OracleCallableStatement)csmt).getCursor(4);
这种直接获取连接的方式下没有问题,但是如果connection是从连接池取出来的,那么在最后一句((OracleCallableStatement)csmt进行强制转换的时候会有异常(ClassCastException),但是如果要取结果集必须要这样转换(也可以强制转connection,也有同样的异常),应该如何处理这种方式下返回结果集的调用?
写错了一句,CallableStatement csmt = tempConn.prepareCall(sql);应该是
CallableStatement csmt = conn.prepareCall(sql);
连接池的数据源。。用thin方式,不要用oci方式
然后
rs = ((OracleCallableStatement)csmt).getCursor(4);
改为
ResultSet rs = (ResultSet)csmt.getObject(4);
OracleCallableStatement stmt = null;
stmt = (OracleCallableStatement) connection.prepareCall(sql);