# 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.

Tópico pai: java.sql.CallableStatement
Referências relacionadas
CallableStatement e parâmetros OUT