gurumedouのプロフィール

@gurumedou gurumedou
ありがとう数1
質問数0
回答数1
ベストアンサー数
0
ベストアンサー率
0%
お礼率
0%

  • 登録日2007/11/16
  • Javaからストアド実行(配列項目)

    Javaからストアドを実行しようとしていますが、 単項目のIN、OUTは問題ないのですが IN引数を配列にしようとした場合うまく処理できません。 ARRAY array = new ARRAY(ad, con, values);のところで java.sql.SQLException Non supported character set: oracle-character-set-832 で落ちてしまいます。 原因であると思われた、CLASSPATHにnls_charset12.jarが通っているかということも確認しました。 原因が分かる方がいましたら教えていただきたく思います。 よろしくお願いします。 環境 OS : WindowsXP DB : Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 JDBC : Oracle JDBC Driver 9.2.0.5 JDK : JDK 1.4.2 ---------------------------------------------------------------- import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleTypes; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; public class TestPlsql { public static void main(String[] args) throws Exception { String username = "ID"; String password = "PASS"; String thinConn = "jdbc:oracle:thin:@DBADD:1521:DBNAME"; try { // Oracle JDBC driverをロードします。 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // DB接続 Connection con = DriverManager.getConnection(thinConn,username,password); // SQLコンテナ作成 // 引数:IN IN OUT OUT IN OUT String sql = "{call TEST_PKG.TEST_PRO(?,?,?,?,?,?)}"; OracleCallableStatement cstmt = (OracleCallableStatement)con.prepareCall(sql); cstmt.setInt( 1, 999 ); cstmt.setString( 2, "TEST" ); cstmt.registerOutParameter( 3, OracleTypes.INTEGER ); cstmt.registerOutParameter( 4, OracleTypes.VARCHAR ); // 配列 String[] values = {"18", "25", "104", "53", "29"}; ArrayDescriptor ad = ArrayDescriptor.createDescriptor("VCHAR2ARRAY", con); ARRAY array = new ARRAY(ad, con, values); ///////ここでエラー cstmt.setArray(5, array); cstmt.registerOutParameter(6, OracleTypes.ARRAY, "VCHAR2ARRAY"); // SQL実行 cstmt.execute(); // OUT引数の値を取得する System.out.println(cstmt.getInt(3)); System.out.println(cstmt.getString(4)); ARRAY array2 = (ARRAY) cstmt.getArray(6); String[] s = (String[]) array2.getArray(); for (int i=0; i<s.length; i++) { System.out.println(s[i]); } cstmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } }