– 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”;