Ok, então nunca mexi no mysql, então vou dar um exemplo do sql server mesmo… deve dar pra adaptar…
Aqui estou criando uma stored procedure que insere numa tabela de Usuarios apenas o nome, e retornará o id. Só constando, o @ antes do nome significa que é uma variável. As linhas depois da declaração da procedure estão declarando novas variáveis, a procedure receberá apenas o nome. Observe que tem o OUT após a segunda variável, indicando que ela é de retorno.
CREATE PROCEDURE [dbo].[pcIns_Usuario]
@nome VARCHAR(20),
@retornaid INT OUT,
AS
BEGIN
INSERT INTO tblUsuario VALUES (@nome)
SELECT @retornaid = usuarioid FROM tblUsuario WHERE nome = @nome
END
No Java:
public int inserir(String strNome) // método inserir da classe UsuarioDAO
{
Connection conn = ConexaoCON.conectar(); // conecto com o BD
int retorno; // retorno que será o id, retornarei para qualquer lugar que chamar este método
try {
CallableStatement cs = conn.prepareCall("{call pcIns_Usuario(?,?)}"); // observe que a interrogação ("?") se refere aos parâmetros que serão passados/obtidos da procedure
cs.setString(1, strNome); // aqui o parâmetro é o que será passado para a procedure para inserir
cs.registerOutParameter(2, java.sql.Types.INTEGER); // aqui é o que será recebido
// o 1 ou o 2 nesses métodos se refere a POSIÇÃO/ORDEM do parâmetro: cs.setString(1, strNome) o 1 é a posição, o strNome é a String que será o nome inserido na tabela tblUsuario, no cs.registerOutParameter(2, java.sql.Types.INTEGER) o 2 é a posição, o java.sql.Types.INTEGER é o tipo de parâmetro nos valores do sql que será retornado, no caso aqui inteiro
cs.execute(); // executo a chamada à procedure
retorno = cs.getInt(2); // jogo para a variável retorno o valor recebido (o id)
fecharConexao(); // método que eu chamo que fecha tudo
} catch (SQLException e) {
// TODO Auto-generated catch block
retorno = 0;
e.printStackTrace();
}
return retorno; // retorno o id se houver sucesso
}
Eu aí fiz insert, mas com update é o mesmo esquema, basicamente o nome da procedure e a instrução nela que mudam, só que no update você não passa já o id?
Se for útil, tenho alguns links aqui com explicações/exemplos com CallableStatement e procedures:
http://javafree.uol.com.br/topic-861463-Executar-Stored-Procedure-Sql-Server-2005.html
http://docsrv.sco.com/JDK_guide/jdbc/getstart/callablestatement.doc.html
http://w3processing.com/index.php?subMenuItemId=218
http://onjava.com/pub/a/onjava/2003/08/13/stored_procedures.html