各位大侠:
小弟的存储过程get_log_byriqi比较简单,有两个输入参数。
在java代码中去调用这个存储过程,主要代码如下
CallableStatement proc = conn.prepareCall("{call get_log_byriqi(?,?)}");
proc.setString(1,"20071001");
proc.setString(2,"20071030"); ResultSet rs = proc.executeQuery();但是接下来写的代码
while(rs.next())
{....
}
或者rs.absolute(1);
都会出现异常:对只转发结果集的无效操作: absolute以前这个问题我也遇到过,当时不是用的存储过程,而是select直接查询,在Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)中加入
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY就好了;这次我把proc写成
proc = conn.prepareCall(strSQL,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)
却不行这个问题怎么解决啊!谢谢
小弟的存储过程get_log_byriqi比较简单,有两个输入参数。
在java代码中去调用这个存储过程,主要代码如下
CallableStatement proc = conn.prepareCall("{call get_log_byriqi(?,?)}");
proc.setString(1,"20071001");
proc.setString(2,"20071030"); ResultSet rs = proc.executeQuery();但是接下来写的代码
while(rs.next())
{....
}
或者rs.absolute(1);
都会出现异常:对只转发结果集的无效操作: absolute以前这个问题我也遇到过,当时不是用的存储过程,而是select直接查询,在Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)中加入
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY就好了;这次我把proc写成
proc = conn.prepareCall(strSQL,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)
却不行这个问题怎么解决啊!谢谢
参考这个例子:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS BEGIN OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB; END TESTC; 可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。 在java里调用时就用下面的代码: package com.hyq.src; import java.sql.*; import java.io.OutputStream; import java.io.Writer; import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.driver.*; public class TestProcedureTHREE { public TestProcedureTHREE() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "..."; Statement stmt = null; ResultSet rs = null; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "hyq", "hyq"); CallableStatement proc = null; proc = conn.prepareCall("{ call hyq.testc(?) }"); proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); proc.execute(); rs = (ResultSet)proc.getObject(1); while(rs.next()) { System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>"); } } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } }