Java – Problemas na execução de procedure (java.sql.SQLException: Parameter number X is not an OUT parameter)

java linux tux
– Problemas ao executar procedure no Java.
– Parameter number x is not an OUT parameter.
– Java procedure execute registerOutParameter

Atualmente me ocorreu um erro ao executar uma procedure com retorno, abaixo segue como foi realizado a chamada:

String sqlString = "{CALL pr_teste(?,?)}";

CallableStatement sqlStm = connection.prepareCall(sqlString);

sqlStm.setString(1, usuario);
sqlStm.registerOutParameter(2, Types.INTEGER);
sqlStm.execute();

O erro que retornou no printstack foi:

java.sql.SQLException: Parameter number 2 is not an OUT parameter
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:690)
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1881)
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1890)
    at com.isb.igt.database.StoredProcedures.preparationCalls(StoredProcedures.java:40)
    at com.isb.igt.database.StoredProcedures.main(StoredProcedures.java:236)

A procedure implementada foi definida da seguinte maneira:

DELIMITER $$

CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `pr_teste`(IN p_argumento VARCHAR(45), OUT p_retorno INTEGER(11))
BEGIN
     //TODO
     set p_retorno = 0;
END

Se o problema realmente não for na procedure (como no meu caso), ele deve estar na construção do connector do mysql. Normalmente conectamos no mysql através de uma string de conexão. Exemplo:

String str_conn = “jdbc:mysql://” + host + “:” + port + “/” + banco;

Caso voce use esse padrão de String de conexão basta incluirmos um parametro nela: “noAccessToProcedureBodies”. Exemplo:

String str_conn = “jdbc:mysql://” + host + “:” + port + “/” + banco + “?noAccessToProcedureBodies=true”;

Se você usa o padrão de usuario e senha direto na string de conexão basta fazer:

String url = “jdbc:mysql://” + host + “:” + porta + “/” + banco + “?user=” + usuario + “&password=” + senha + “&noAccessToProcedureBodies=true”;

Help DEV – Analista desenvolvedor Java / Android
https://helpdev.com.br/zarelli

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.