CallableStatementsとINOUT引数

Javaのプログラムでは、INOUT引数に対して引数の型を要素とする配列が対応します。(メソッドは配列を引数としてとらなければなりません。) この対応関係はSQL標準の推奨に沿ったものです。

次の例を考えます。:
CallableStatement call = conn.prepareCall(
    "{CALL doubleMyInt(?)}");
// 値を代入する前に引数を登録する事が、
// inout引数では良いやり方です。
call.registerOutParameter(1, Types.INTEGER);
call.setInt(1,10);
call.execute();
int retval = call.getInt(1);
メソッドのdoubleItは一次元のint配列を取るべきです。メソッドのソースコードを次に例示します。
public static void doubleMyInt(int[] i) {
    i[0] *=2;
    /* Derbyは配列の最初の要素を返します。*/
}
注: メソッドの引数と違って、返り値は配列ではありません
表 1. INOUTの引数型の対応
JDBCの型 メソッドの引数の配列型 値と返り値の型
BIGINT long[] long
BINARY byte[][] byte[]
BIT boolean[] boolean
DATE java.sql.Date[] java.sql.Date
DOUBLE double[] double
FLOAT double[] double
INTEGER int[] int
LONGVARBINARY byte[][] byte[]
REAL float[] float
SMALLINT short[] short
TIME java.sql.Time[] java.sql.Time
TIMESTAMP java.sql.Timestamp[] java.sql.Timestamp
VARBINARY byte[][] byte[]
OTHER yourType[] yourType
JAVA_OBJECT (Java2/JDBC 2.0の環境でのみ有効) yourType[] yourType

呼び出し前に出力の引数を登録してください。INOUTの引数では、値を代入する前に出力の引数を登録するのが良いやり方です。

関連資料
CallableStatementsとOUT引数