Stored Procedure MySQL não funciona a partir de aplicação Java
6 respostas
J
JavaHawk
Boa tarde galera,
Estou tentando dividir o processamento entre o banco de dados e a aplicação utilizando procedures, entretanto, quando rodo a procedure do banco, ele realmente faz a ação, mas rodando a procedure da aplicação, ele não efetiva o comando. Segue os códigos:
STP:
DROPPROCEDUREIFEXISTSsgcozinha.STP_DELETE_EMPRESA;CREATEPROCEDURESTP_DELETE_EMPRESA(v_NomeEmpresaVARCHAR(35),v_CnpjCHAR(14))BEGINDELETEFROMempresaWHERENOMEEMPRESA=v_NomeEmpresaANDCNPJ=v_Cnpj;IF((SELECTCOUNT(*)FROMempresaWHERECNPJ=v_Cnpj)<>0)THENSELECT'Não foi possível excluir empresa!'ASMsg;ELSESELECT'Empresa excluída com sucesso!'ASMsg;ENDIF;END;
DAO
publicStringexcluirEmpresa(Empresaempresa){Stringsql="CALL STP_DELETE_EMPRESA(?,?)";Stringmsg=newString();try{PreparedStatementstmt=connection.prepareStatement(sql);stmt.setString(1,empresa.getIdEmpresa());stmt.setString(2,empresa.getNomeEmpresa());ResultSetrs=stmt.executeQuery();while(rs.next()){msg=rs.getString("MSG");}rs.close();stmt.close();returnmsg;}catch(SQLExceptione){return"ERRO AO CONECTAR COM O BANCO DE DADOS";// throw new RuntimeException(e);}}
Para chamar procedimentos armazenados (stored procedures) você deve usar um objeto de CallableStatement (java.sql.CallableStatement).
Mesmo alterando ainda não funciona.
publicStringexcluirEmpresa(Empresaempresa){Stringsql="CALL STP_DELETE_EMPRESA(?)";Stringmsg=newString();try{//PreparedStatement stmt = connection.prepareStatement(sql);CallableStatementstmt=connection.prepareCall(sql);stmt.setString(1,empresa.getIdEmpresa());ResultSetrs=stmt.executeQuery();while(rs.next()){msg=rs.getString("MSG");}rs.close();stmt.close();returnmsg;}catch(SQLExceptione){System.out.println(e);return"ERRO AO CONECTAR COM O BANCO DE DADOS";// throw new RuntimeException(e);}}
D
drsmachado
Não funciona = ???
O que não funciona é dizer que não funciona. Não tenho bola de cristal, não jogo búzios, tarô, runas ou qualquer outro método de adivinhação, então, sem dizer o que acontece, fica difícil.
J
JavaHawk
drsmachado:
Não funciona = ???
O que não funciona é dizer que não funciona. Não tenho bola de cristal, não jogo búzios, tarô, runas ou qualquer outro método de adivinhação, então, sem dizer o que acontece, fica difícil.
Não funciona quer dizer que as linhas de comando são executadas, entretanto, as ações não são efetivadas no banco, ou seja, não aparece nenhuma exception e o banco de dados não é alterado.
Pelo que vi, não devo usar ResultSet e sim pegar as Strings direto.
Não consegui montar essas procedures passando parametros IN/OUT, dava erro quando ia gravar no banco.