[RESOLVIDO] MSG de retorno de Stored Procedure

Pessoal Boa Tarde

Tenho a seguinte SP em meu banco:

BEGIN
IF ((v_user != '') && (v_pwd != '')) THEN
INSERT INTO tbl_Users (user_Name, user_PWD, user_Email, user_DtCad)
VALUES (v_user, v_pwd, v_email, v_date);
ELSE
SELECT 'Usuário e Senha devem ser fornecidos para o cadastro!' AS Msg;
END IF;
END

E abaixo a classe que faz a chamada desta SP:

  public void adiciona(clsUsers user)
    {
        try {
                CallableStatement cs = (CallableStatement) connection.prepareCall("{call mySp_userInsert(?,?,?,?)}");
                cs.setString(1,user.getUser());
                cs.setString(2,user.getPassword());
                cs.setString(3,user.getEmail());
                cs.setDate(4,new Date(user.getDataCadastro().getTimeInMillis()));
                cs.execute();
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    }
}

Até ai, maravilha, ta funcionando certinho… O que eu gostaria é que a cada inserção, eu capturasse a mensagem de retorno desta SP.
Por exemplo, reparem que na 6ª linha de procedure, ela retorna uma mensagem avisando que é preciso informar o usuário e senha.
O que eu quero é capturar isso no java, ou seja, se der certo, capturo um retorno (“SELECT ‘Dados gravados!’ as MSG”), ou o erro da 6ª linha
para eu poder disparar uma caixa de diálogo com o usuário.

Alguém pode me ajudar?
Grato

Fala ai Johnnie Wlaker

Acredito que o codigo a seguir ira elucidar o seu problema

    public String adiciona(clsUsers user) {
        try {
            String mensagem;
            ResultSet rs;
            CallableStatement cs = (CallableStatement) connection.prepareCall("{call mySp_userInsert(?,?,?,?)}");
            cs.setString(1, user.getUser());
            cs.setString(2, user.getPassword());
            cs.setString(3, user.getEmail());
            cs.setDate(4, new Date(user.getDataCadastro().getTimeInMillis()));
            rs = cs.executeQuery();
            while (rs.next()) {
                mensagem = rs.getString("Msg");
            }
            connection.close();
            return mensagem;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

Abração 8)
Max

Grande Max!!!

Funcionou certinho garoto!!! Valeu a força…

Abraço grande…

[quote=Johnnie Wlaker]Pessoal Boa Tarde

Tenho a seguinte SP em meu banco:

BEGIN
IF ((v_user != '') && (v_pwd != '')) THEN
INSERT INTO tbl_Users (user_Name, user_PWD, user_Email, user_DtCad)
VALUES (v_user, v_pwd, v_email, v_date);
ELSE
SELECT 'Usuário e Senha devem ser fornecidos para o cadastro!' AS Msg;
END IF;
END

E abaixo a classe que faz a chamada desta SP:

  public void adiciona(clsUsers user)
    {
        try {
                CallableStatement cs = (CallableStatement) connection.prepareCall("{call mySp_userInsert(?,?,?,?)}");
                cs.setString(1,user.getUser());
                cs.setString(2,user.getPassword());
                cs.setString(3,user.getEmail());
                cs.setDate(4,new Date(user.getDataCadastro().getTimeInMillis()));
                cs.execute();
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    }
}

Até ai, maravilha, ta funcionando certinho… O que eu gostaria é que a cada inserção, eu capturasse a mensagem de retorno desta SP.
Por exemplo, reparem que na 6ª linha de procedure, ela retorna uma mensagem avisando que é preciso informar o usuário e senha.
O que eu quero é capturar isso no java, ou seja, se der certo, capturo um retorno (“SELECT ‘Dados gravados!’ as MSG”), ou o erro da 6ª linha
para eu poder disparar uma caixa de diálogo com o usuário.

Alguém pode me ajudar?
Grato
[/quote]

apesar de já estar resolvido e funcionando, gostaria de fazer um comentário.

eu não usaria esse tipo de prática: retornar um resultset em caso de erro.

é muito fácil para a próxima pessoa que for usar essa procedure ignorar esse retorno, e não identificar quando um usuário não foi incluido

acho que seu código ficaria mais seguro se sua procedure gerasse um erro quando os parâmetros fossem inválidos.
dessa forma não tem como o chamador ignorar o resultado em caso de problemas.

o que você está fazendo seria equivalente a criar um método no java com tipo de retorno String, e a indicação de sucesso é um retorno vazio.

você pode até pensar que vai te gerar trabalho a mais tratar isso, mas o tratamento de exceção terá que existir de qualquer jeito
(se o nome de usuário for maior do que o tamanho do campo por exemplo)

Talvez este post seja útil. Pra mim foi :slight_smile:

http://www.guj.com.br/posts/list/164852.java