03. marts 2004 - 12:53Der er
11 kommentarer og 2 løsninger
Problems with ResultSet from CallableStatement
Hello!
I have a tricky question.
I execute the following storedprocedure to a Oracle database: CREATE OR REPLACE PROCEDURE getImages (p_cursor OUT SYS_REFCURSOR) AS BEGIN OPEN p_cursor FOR SELECT ID, FILNAMN FROM bild; END;
with this Java code: callableStatement = connection.prepareCall(storedProcedure, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); callableStatement.registerOutParameter(i+1, OracleTypes.CURSOR);
To get hold of the ResultSet I do: callableStatement.executeQuery(); resultSet = (ResultSet) callableStatement.getObject(1);
That seems to work fine, but later on I have to do this: resultSet.beforeFirst();
But It gives me an exception, that beforeFirst is not allowed: java.sql.SQLException: Ogiltig Õtgõrd f÷r endast vidarebefordrad resultatuppsõtt ning: beforeFirst at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.driver.BaseResultSet.beforeFirst(BaseResultSet.java:72) at p6b4005.DatabaseAccessor.executeOracleStoredProcedure(DatabaseAccesso r.java:231) at p6b4005.DatabaseAccessor.main(DatabaseAccessor.java:806)
Evidently the prepareCall method only effects the returned ResultSet delivered by the callableStatement.executeQuery(); And not the resulset delivered by the resultSet = (ResultSet) callableStatement.getObject(1);
But how should I do to make this ResultSet scrollable so I can call resultSet.beforeFirst();???
BTW, many (all ?) JDBC drivers that supports scrollable result sets do it by reading everything into memory => never use scrolleable result set on large data.
BTW her is your well earned points! Best regards Fredrik
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.