查询oracle9i数据库返回的结果集不能操作!!!!!!!

rorey_008 2007-10-11 02:06:23
各位大侠:
小弟的存储过程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)
却不行

这个问题怎么解决啊!谢谢
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxlineji 2007-10-12
  • 打赏
  • 举报
回复
在储存过程中定义一个输出参数为游标类型
参考这个例子:
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) {

}

}

}

}

gxlineji 2007-10-12
  • 打赏
  • 举报
回复
没有输出参数?应该不会有返回结果吧
你要定义到输出参数

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧