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:
@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.
@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:
@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.
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 :)