首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

java调用存储过程返回rs.absolute(1)报错,该如何解决

2012-05-10 
java调用存储过程返回rs.absolute(1)报错1.package com.mypack.test2.3.import java.sql.CallableStateme

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

热点排行