Ajuda com DAO - cadastro e resposta de variavel
Bom dia pelo dia pessoal, estou desenvolvendo web e não estou muito certo sobre minha DAO, onde ela deve fazer o cadastro de uma Pessoa e trazer o "idPessoa" para ser realizado outro cadastro. Seque o código da DAO abaixo:
@Override public Boolean cadastrar(Object object) { Pessoa pessoa = (Pessoa) object; PreparedStatement stmt = null; ResultSet rs = null; int idPessoa = 0; String sql = "INSERT INTO public.pessoa(\\\\\\\\n" + " nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa)\\\\\\\\n" + " VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING id_pessoa;"; try { stmt = conn.prepareStatement(sql); stmt.setString(1, pessoa.getNomePessoa()); stmt.setString(2, pessoa.getEmailPessoa()); stmt.setInt(3, pessoa.getTelefonePessoa()); stmt.setString(5, pessoa.getRuaPessoa()); stmt.setInt(6, pessoa.getNumeroPessoa()); stmt.setString(7, pessoa.getBairroPessoa()); stmt.setString(8, pessoa.getCpfPessoa()); rs = stmt.executeQuery(); rs.next(); idPessoa = rs.getInt("id_pessoa"); return true; } catch (SQLException ex) { System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage()); ex.printStackTrace(); return false; } finally { try { ConnectionFactory.closeConnection(conn, stmt); } catch (Exception ex) { System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage()); ex.printStackTrace(); } } }
Hiago
Curtidas 0
Melhor post
Thiago Moreno
19/07/2019
voce nao precisa retornar o id da pessoa. é desnecessario. ao menos que voce queira enviar para outra camada para fazer uma consulta posterior. é o caso? se for a assinatura do metodo esta errada. tem que retornar um long ou um int. e o insert tambem esta errado.
@Override public int cadastrar(Object object) { Pessoa pessoa = (Pessoa) object; PreparedStatement stmt = null; ResultSet rs = null; int idPessoa = 0; String sql = "INSERT INTO public.pessoa( " + " nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa) " + " VALUES (?, ?, ?, ?, ?, ?, ?)"; try { stmt = conn.prepareStatement(sql, stmt.RETURN_GENERATED_KEYS); stmt.setString(1, pessoa.getNomePessoa()); stmt.setString(2, pessoa.getEmailPessoa()); stmt.setInt(3, pessoa.getTelefonePessoa()); stmt.setString(5, pessoa.getRuaPessoa()); stmt.setInt(6, pessoa.getNumeroPessoa()); stmt.setString(7, pessoa.getBairroPessoa()); stmt.setString(8, pessoa.getCpfPessoa()); stmt.execute(); rs = stmt.getGeneratedKeys(); while(rs.next()) { return rs.getInt(1); } } catch (SQLException ex) { System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage()); ex.printStackTrace(); return -1; } finally { try { ConnectionFactory.closeConnection(conn, stmt); } catch (Exception ex) { System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage()); ex.printStackTrace(); } } }
GOSTEI 1
Mais Respostas
João Júnior
19/07/2019
Bom dia pelo dia pessoal, estou desenvolvendo web e não estou muito certo sobre minha DAO, onde ela deve fazer o cadastro de uma Pessoa e trazer o "idPessoa" para ser realizado outro cadastro. Seque o código da DAO abaixo:
@Override public Boolean cadastrar(Object object) { Pessoa pessoa = (Pessoa) object; PreparedStatement stmt = null; ResultSet rs = null; int idPessoa = 0; String sql = "INSERT INTO public.pessoa(\\\\\\\\\\\\\\\\n" + " nome_pessoa, email_pessoa, telefone_pessoa, rua_pessoa, numero_pessoa, bairro_pessoa, cpf_pessoa)\\\\\\\\\\\\\\\\n" + " VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING id_pessoa;"; try { stmt = conn.prepareStatement(sql); stmt.setString(1, pessoa.getNomePessoa()); stmt.setString(2, pessoa.getEmailPessoa()); stmt.setInt(3, pessoa.getTelefonePessoa()); stmt.setString(5, pessoa.getRuaPessoa()); stmt.setInt(6, pessoa.getNumeroPessoa()); stmt.setString(7, pessoa.getBairroPessoa()); stmt.setString(8, pessoa.getCpfPessoa()); rs = stmt.executeQuery(); rs.next(); idPessoa = rs.getInt("id_pessoa"); return true; } catch (SQLException ex) { System.out.println("Problemas ao cadastrar Pessoa! Erro:" + ex.getMessage()); ex.printStackTrace(); return false; } finally { try { ConnectionFactory.closeConnection(conn, stmt); } catch (Exception ex) { System.out.println("Problemas ao fechar conexão! Em:" + ex.getMessage()); ex.printStackTrace(); } } }
Por aqui eu faço da seguinte forma:
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import util.TransacaoBancoDados; /** * * @author JFSJUNIOR */ public class Pessoa { private static final int NULO = 0; private static final int CAMPO_PK = 1; public static int inserir(bean.Pessoa pessoa) throws SQLException{ int idPessoa = NULO; Connection conectaBancoDeDados = TransacaoBancoDados .abrirTransacao(); try{ String stringSQLInsercao = "INSERT INTO Pessoas(nome_pessoa) " + "VALUES(?)"; try(PreparedStatement pstmt = conectaBancoDeDados .prepareStatement(stringSQLInsercao, PreparedStatement.RETURN_GENERATED_KEYS)){ pstmt.setString(1, pessoa.getNomePessoa()); pstmt.execute(); try(ResultSet rstSet = pstmt.getGeneratedKeys()){ if(rstSet != null){ rstSet.next(); idPessoa = rstSet.getInt(CAMPO_PK); } } } }catch(SQLException sqle){ TransacaoBancoDados.desfazerTransacao(); System.out.println("ERRO[" + Pessoa.class.getName() + " - inserção]: " + sqle.getMessage()); } return idPessoa; } public static void atualizar(bean.Pessoa pessoa) throws SQLException{ Connection conectaBancoDeDados = TransacaoBancoDados .abrirTransacao(); try{ String stringSQLAtualizacao = "UPDATE Pessoas SET nome_pessoa = ? " + "WHERE id_pessoa = ?"; try(PreparedStatement pstmt = conectaBancoDeDados .prepareStatement(stringSQLAtualizacao)){ pstmt.setString(1, pessoa.getNomePessoa()); pstmt.setInt(2, pessoa.getIdPessoa()); pstmt.executeUpdate(); } }catch(SQLException sqle){ TransacaoBancoDados.desfazerTransacao(); System.out.println("ERRO[" + Pessoa.class.getName() + " - atualização]: " + sqle.getMessage()); } } public static void excluir(bean.Pessoa pessoa) throws SQLException{ Connection conectaBancoDeDados = TransacaoBancoDados .abrirTransacao(); try{ String stringSQLExclusao = "DELETE FROM Pessoas " + "WHERE Pessoas.id_pessoa = ?"; try(PreparedStatement pstmt = conectaBancoDeDados .prepareStatement(stringSQLExclusao)){ pstmt.setInt(1, pessoa.getIdPessoa()); pstmt.executeUpdate(); } }catch(SQLException sqle){ TransacaoBancoDados.desfazerTransacao(); System.out.println("ERRO[" + Pessoa.class.getName() + " - exclusão]: " + sqle.getMessage()); } } }
No caso, a conexão está construída para trabalhar com transação.
GOSTEI 1
Hiago
19/07/2019
Sim Thiago, eu queria retornar o id para outra camada para poder realizar outro cadastro no meu banco, obrigado pelas observações <3
GOSTEI 0