2011-07-24 8 views
2

JDBC Callablestatementからこのストアドプロシージャにアクセスするには?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でoracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)で無効な列インデックス * * * 。 * oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:285)* * oracle.jdbc.driver.OracleStatement.prepare_for_new_get(OracleStatement.jdbc.db)。 java:2804)* * oracle.jdbc.driver.OracleStatement.getObjectValue(OracleStatement.java:4983)* * oracle.jdbc.d TestOCIApp.main(TestOCIApp.java:23)でriver.OracleStatement.getObjectValue(OracleStatement.java:4964)* * oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:586)で* * *

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; 
/

答えて

4

oracleカーソルを使用する場合、CallableStatementオブジェクトはOracleCallableStatementにキャストされ、標準のJDBCアプリケーション・プログラミング・インタフェース(API)のOracle拡張機能であるgetCursorメソッドが使用され、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データベースへのあなたのコード[:(]

関連する問題