Как получить доступ к этой хранимой процедуре из JDBC Callablestatement? - PullRequest
2 голосов
/ 24 июля 2011

Как получить доступ к этой хранимой процедуре из JDBC Callablestatement ??

public class TestOCIApp {

public static void main(String args[]) throws ClassNotFoundException,
SQLException {

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcle", "scott", "tiger");

CallableStatement cs = conn.prepareCall("{call test(?,?)}");
cs.setInt(1, 10);

cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

ResultSet rs = (ResultSet)cs.getObject(2);

while(rs.next())
{
System.out.println(rs.getString(2));
}

conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Я получаю исключение как

java.sql.SQLException: неверный индекс столбца * на oracle.jdbc.dbaccess.DBError.throwSqlException (DBError.java:180) * * в oracle.jdbc.dbaccess.DBError.throwSqlException (DBError.java:222) * * в oracle.jdbc.dbaccess.DBError.throwSqlException (DBError.jpg)* в oracle.jdbc.driver.OracleStatement.java:4964)* * в oracle.jdbc.driver.OracleCallableStatement.getObject (OracleCallableStatement.java:586) * * в TestOCIApp.main (TestOCIApp.java:23) *

create or replace procedure test( p_deptno IN number
, p_cursor OUT SYS_REFCURSOR)
is
begin
open p_cursor FOR
select *
from emp
where deptno = p_deptno;
end test;
/

1 Ответ

4 голосов
/ 25 июля 2011

При работе с курсорами оракула объект CallableStatement приводится к OracleCallableStatement для использования метода getCursor, который является расширением Oracle к стандартному интерфейсу прикладного программирования JDBC (API), и возвращает REF CURSOR в объект ResultSet.

cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.execute();
cursor = ((OracleCallableStatement)cstmt).getCursor(1);

while (cursor.next ()){
System.out.println (cursor.getString(1));
} 

Но это соединит ваш код с базой данных oracle [: (]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...