CallableStatement e parâmetros INOUT

Os parâmetros INOUT são mapeados em uma matriz do tipo do parâmetro no Java (O método deve receber uma matriz como seu parâmetro). Isto está em conformidade com as recomendações do padrão SQL.

Dado o seguinte exemplo:
CallableStatement call = conn.prepareCall(
    "{CALL dobreMeuInteiro(?)}");
// para os parâmetros INOUT, é boa prática registrar
// o parâmetro de saída antes de definir o valor de entrada
call.registerOutParameter(1, Types.INTEGER);
call.setInt(1,10);
call.execute();
int retval = call.getInt(1);
O método doubleIt deve receber uma matriz unidimensional de inteiros. Abaixo está um código fonte de amostra para este método:
public static void dobreMeuInteiro(int[] i) {
    i[0] *=2;
    /* O Derby  retorna o primeiro elemento da matriz. */
}
Nota: O valor retornado não é empacotado em uma matriz, mesmo que o parâmetro para o método seja.
Tabela 1. Correspondência de tipo do parâmetro INOUT
Tipo do JDBC Tipo da matriz para o parâmetro do método Valor e tipo retornado
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 seuTipo[] seuTipo
JAVA_OBJECT (válido apenas nos ambientes Java2/JDBC 2.0) seuTipo[] seuTipo

Deve ser registrado o tipo de dado de saída do parâmetro antes de executar a chamada. Para os parâmetros INOUT, é boa prática registrar o parâmetro de saída antes de definir seu valor de entrada.

Referências relacionadas
CallableStatement e parâmetros OUT