如何在Java中获取可滚动的结果集

时间:2013-12-06 02:47:20

标签: java oracle cursor resultset scrollable

我在我的应用程序中使用Java,在后端使用Oracle数据库

ResultSet GetCar()
{
CallableStatement cs;
ResultSet rs;

try{
    //conn = dbConnector.getConnection();
conn = dbConnection.getStaticConnection();
cs = conn.prepareCall("begin select_all_car(?); end;",
              ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.execute();
rs = ((OracleCallableStatement)cs).getCursor(1);
return rs;
}
}

void foo()
{
    ResultSet rs = GetCar();
    rs.beforeFirst();
}

在foo rs.beforeFirst给我这个错误:“仅转发结果集的操作无效:beforeFirst”

这是我对ORACLE数据库的查询:

CREATE OR REPLACE PROCEDURE
SELECT_ALL_CAR 
(
  pCar_Recordset  OUT   SYS_REFCURSOR
)
AS

BEGIN

OPEN pCar_Recordset FOR
  SELECT  ID, MANUFACTURER, MAKE, YEAR, MODEL
  FROM    CAR
  ORDER BY ID;

END SELECT_ALL_CAR;
我做错了什么?是oracle游标吗?如何使我的结果集可滚动?

1 个答案:

答案 0 :(得分:0)

正如@Przemyslaw指出你可以使用PreparedStatement来调用你的存储过程(不需要将你的实现移到前端,你的前端不应该直接进行SQL调用)你可以定义临时过程调用然后调用您现有的(打包的对吧?)存储过程。如果这是不可接受的,您可以创建一个视图(或物化视图)并从中进行查询。