[RESOLVIDO] call procedure em java

Oi pessoal.
Estou tentando chamar uma procedure onde passo dois números e o retorno é a soma destes valores.
O problema é que não estou conseguindo voltar com o @resultado do banco pelo resultSet dá erro: java.sql.SQLException: Can’t set IN parameter for return value of stored function call.
O que ficou faltando na linha 26 cs.setInt(“valor_um”, 1);?[code]create database teste_conexao;

use teste_conexao;

create table teste (
id integer unsigned not null auto_increment,
valor_um integer,
valor_dois integer,
constraint pk_id primary key (id)
);

delimiter <<
create procedure sp_soma(valor_um integer, valor_dois integer)
begin
set @resultado = valor_um + valor_dois;
select @resultado as msg;
end; <<[/code][code]package dao;

import conexao.ConnectionFactory;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TesteDAO {

private final Connection connection;

public TesteDAO() {
   connection = new ConnectionFactory().getConnection();
}

public void soma() {
    ResultSet rs;
    CallableStatement cs;
    try {
        cs = connection.prepareCall(&quot;{? = call sp_soma(?,?)}&quot;);
        // setando parâmetros
        cs.setInt(&quot;valor_um&quot;, 1);
        cs.setInt(&quot;valor_dois&quot;, 2);
        // registrando o parâmetro da variável de retorno
        cs.registerOutParameter(1, Types.INTEGER);
        // executando a procedure
        cs.execute();            
        // mostrando o @resultado
        rs = (ResultSet) cs.getObject(1);
        while (rs.next()){
            System.out.println(rs.getInt(1));
        }
        rs.close();
        cs.close();
    } catch (SQLException ex) {
        Logger.getLogger(TesteDAO.class.getName()).log(Level.SEVERE, null, ex);
    } 
}

}[/code]

Veja, você não vai definir qual o parâmetro de retorno na invocação da procedure.
Apenas os parâmetros de entrada.
Só depois de executar a procedure é que você, através do ResultSet, obtém o retorno.

cs = connection.prepareCall("call sp_soma(?,?)");  
            // setando parâmetros  
            cs.setInt("valor_um", 1);  
            cs.setInt("valor_dois", 2);  

Ainda com dúvidas? Veja isso.

Obrigado pela ajuda.
Já tinha visto este artigo porém, um detalhe passou batido - os parâmetros de entrada e saída devem ficar no banco.
Depois que fiz as seguintes alterações o código funcionou. cs = connection.prepareCall(&quot;{call sp_soma(?,?,?)}&quot;); // setando parâmetros cs.setInt(&quot;valor_um&quot;, 3); cs.setInt(&quot;valor_dois&quot;, 8); // registrando o parâmetro de retorno cs.registerOutParameter(3, Types.INTEGER); // executando a procedure cs.execute(); // mostrando o resultado System.out.println(cs.getObject(3));delimiter &lt;&lt; create procedure sp_soma(in valor_um integer, in valor_dois integer, out resultado integer) begin set resultado = valor_um + valor_dois; select resultado as msg; end; &lt;&lt;