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



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

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;

我做错了什么?是甲骨文的光标吗?如何使结果集可滚动?

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

相关内容

  • 没有找到相关文章

最新更新