读书人

java调用存储过程返回rs.absolute(1)报

发布时间: 2012-05-10 16:02:39 作者: rapoo

java调用存储过程返回rs.absolute(1)报错
1.package com.mypack.test;
2.
3.import java.sql.CallableStatement;
4.import java.sql.Connection;
5.import java.sql.DriverManager;
6.import java.sql.ResultSet;
7.import java.sql.SQLException;
8.
9.public class Test {
10. public static void main(String[] args) {
11. Connection conn = null;
12. CallableStatement pstmt = null;
13. ResultSet rs = null;
14. try {
15. Class.forName("oracle.jdbc.OracleDriver");
16. conn = DriverManager.getConnection(
17. "jdbc:oracle:thin:@localhost:1521:jeffrey", "scott", "tiger");
18. pstmt = conn.prepareCall("{call sp_findemp(?,?)}",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
19. pstmt.setInt(1,20);
20. pstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
21. pstmt.execute();
22.
23. rs=(ResultSet) pstmt.getObject(2);
24.
25. rs.absolute(1);
26. System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
27.
28.
29. } catch (ClassNotFoundException e) {
30. e.printStackTrace();
31. } catch (SQLException e) {
32. e.printStackTrace();
33. } finally {
34. if (rs != null) {
35. try {
36. rs.close();
37. } catch (SQLException e) {
38. e.printStackTrace();
39. }
40. }
41. if (pstmt != null) {
42. try {
43. pstmt.close();
44. } catch (SQLException e) {
45. e.printStackTrace();
46. }
47. }
48. if (conn != null) {
49. try {
50. conn.close();
51. } catch (SQLException e) {
52. e.printStackTrace();
53. }
54. }
55. }
56. }
57.}
package com.mypack.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {
public static void main(String[] args) {
Connection conn = null;
CallableStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:jeffrey", "scott", "tiger");
pstmt = conn.prepareCall("{call sp_findemp(?,?)}",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
pstmt.setInt(1,20);
pstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
pstmt.execute();

rs=(ResultSet) pstmt.getObject(2);

rs.absolute(1);
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));


} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {


if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

为什么用CallableStatement 调用过程,设了参数resultSetType为TYPE_SCROLL_INSENSITIVE,但用rs.absolute(1)却说java.sql.SQLException: 对只转发结果集的无效操作: absolute

如果用PreparedStatement 执行查询语句,同样设参数,返回结果集可以用rs.absolute(1)。

难道CallStatement调用时需要另外设什么东西。



[解决办法]
如果对CallableStatement感兴趣,不妨读一下:
http://docs.oracle.com/javase/1.3/docs/guide/jdbc/getstart/callablestatement.html

读书人网 >Java Web开发

热点推荐