简体   繁体   English

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

[英]How Get a scrollable resultset in Java

I am using Java for my application and Oracle database in the back-end 我在我的应用程序中使用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();
}

In foo rs.beforeFirst is giving me this error: "Invalid operation for forward only resultset : beforeFirst" 在foo rs.beforeFirst给我这个错误: “仅转发结果集的无效操作:beforeFirst”

And this is my query for ORACLE database: 这是我对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;

what am I doing wrong? 我究竟做错了什么? is it oracle cursor? 是oracle游标吗? how can I make my resultset scrollable? 如何使我的结果集可滚动?

As @Przemyslaw pointed out you could use a PreparedStatement to call your stored procedure (no need to move your implementation to the front end, and your front end should not be making SQL calls directly anyway) you can define an ad hoc procedure call to then call your existing ( packaged right?) stored procedures. 正如@Przemyslaw所指出的,您可以使用PreparedStatement来调用您的存储过程(无需将您的实现移动到前端,并且您的前端不应该直接进行SQL调用)您可以定义一个临时过程调用调用你现有的( 打包的吧?)存储过程。 If that isn't acceptable, you can create a view (or a materialized view) and query from that instead. 如果这是不可接受的,您可以创建一个视图(或物化视图)并从中进行查询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM