Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获得可滚动的结果集_Java_Oracle_Cursor_Resultset_Scrollable - Fatal编程技术网

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

如何在Java中获得可滚动的结果集,java,oracle,cursor,resultset,scrollable,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;", Result

我的应用程序使用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;

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

正如@Przemyslaw指出的,您可以使用
PreparedStatement
调用存储过程(无需将实现移动到前端,前端也不应直接进行SQL调用)。您可以定义一个特殊过程调用,然后调用现有的存储过程(打包的对吗?)存储过程。如果这不可接受,您可以创建一个视图(或物化视图)我在谷歌上翻了翻,在什么地方读到PL/SQL游标是只向前的游标。如果我尝试在
SYS\u REFCURSOR
中向后滚动,我会遇到与您相同的错误。但是,当使用
PreparedStatement
executeQuery
方法获取游标时,它不会出错使用
ResultSet.TYPE\u SCROLL\u SENSITIVE,ResultSet.CONCUR\u READ\u
参数。是否可以使用这种方法?类似于:
ps=conn.prepareStatement(“此处的查询,ResultSet.TYPE\u SCROLL\u SENSITIVE,ResultSet.CONCUR\u READ\u”);ResultSet rs=pstmt.executeQuery()实际上,我已经在我的数据库中创建了所有的过程,其中一些非常大,把它们带到前端可能是灾难性的。谢谢你的评论