Fórum Ajuda com DAO - cadastro e resposta de variavel #603763
19/07/2019
0
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | @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
Curtir tópico
+ 0
Responder
Post mais votado
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | @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(); } } } |
Thiago Moreno

Responder
Gostei + 1
Mais Posts
19/07/2019
João Júnior
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | @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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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.
Responder
Gostei + 1
22/07/2019
Hiago
Sim Thiago, eu queria retornar o id para outra camada para poder realizar outro cadastro no meu banco, obrigado pelas observações <3
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)