select文プロシージャ呼び出し時のエラー
DERBYのプロシージャ呼び出しで、結果セットを取得しようと以下のコードを書いたところ、
エラーがでて解決するのに時間がかかった。
public static void main(String[] args) { ... Connection conn = DriverManager.getConnection("jdbc:derby:d:/temp/testdb"); CallableStatement cstmt = conn.prepareCall("{call TEST_PROCEDURE()}"); ResultSet rset = cstmt.executeQuery(); // error ... } public static void testProcedure(ResultSet[] rset) { ... Connection conn = DriverManager.getConnection("jdbc:derby:d:/temp/testdb"); rset[0] = conn.prepareStatement("select * from articles").executeQuery(); ... }
CREATE PROCEDURE TEST_PROCEDURE() DYNAMIC RESULT SETS 1 LANGUAGE JAVA EXTERNAL NAME 'com.db._jdbc_update.testProcedure' PARAMETER STYLE JAVA READS SQL DATA;
エラー内容
java.sql.SQLException: Statement.executeQuery() は、行カウントを戻すステートメントを使って呼び出せません。エラー・コード: 20000 Caused by: ERROR X0Y78: Statement.executeQuery() は、行カウントを戻すステートメントを使って呼び出せません。
原因はプロシージャ内のDB接続処理で指定しているURLがまずかった。正しくは以下。
Connection conn = DriverManager.getConnection("jdbc:default:connection");