# 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の引数では、値を代入する前に出力の引数を登録するのが良いやり方です。

親トピック: java.sql.CallableStatement インターフェイス
関連資料
CallableStatementsとOUT引数