Olá pessoal tenho um problema de quando eu salvar quero que me retorne o ultimo ID ( que foi gerado automático no banco (Firebird) ) e set em um jTextField
meu dão eu fiz assim:
publicstaticintgetLastId()throwsSQLException{Connectionconexao=ConexaoFirebird.getConexao();StringretornaUltID="Select last from CAD_VENDA_PDV where ID_VENDA = ?";PreparedStatementpstmt=conexao.prepareStatement(retornaUltID);ResultSetrs=pstmt.executeQuery();rs.next();intlastId=rs.getInt("ID_VENDA");rs.close();pstmt.close();returnlastId;}
publicintsave(Pessoapessoa){Connectionconn=ConexaoFirebird.getConnection();PreparedStatementpstm=null;ResultSetrs=null;try{//Passando esse paramatro return_generated_keys pstm=conn.prepareStatement(SQL_INSERT,pstm.RETURN_GENERATED_KEYS);pstm.setString(1,pessoa.getNome());pstm.setString(2,pessoa.getProfissao());pstm.setDate(3,newjava.sql.Date(pessoa.getDtNascimento().getTime()));pstm.execute();rs=pstm.getGeneratedKeys();while(rs.next()){returnrs.getInt(1);}}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}finally{ConexaoFirebird.close(conn,pstm,null);}return0;}
D
Dragoon1 like
Tente colocar igual exemplo abaixo:
Stringquery="Insert INTO people(name, age) (?, ?)";PreparedStatementprest;prest=con.prepareStatement(query,Statement.RETURN_GENERATED_KEYS);prest.setString(1,"Guj");prest.setInt(2,2);prest.executeUpdate();ResultSetrs=prest.getGeneratedKeys();if(rs.next()){intlast_inserted_id=rs.getInt(1);}
publicstaticintgetLastId()throwsSQLException{Connectionconexao=ConexaoFirebird.getConexao();StringretornaUltID="Select last from CAD_VENDA_PDV where ID_VENDA = ?";PreparedStatementpstmt=conexao.prepareStatement(retornaUltID,Statement.RETURN_GENERATED_KEYS);ResultSetrs=pstmt.executeUpdate();rs.next();intlastId=rs.getInt("ID_VENDA");rs.close();pstmt.close();returnlastId;if(rs.next()){intlast_inserted_id=pstmt.getInt(1);}}
e o método na classe fica certo como deixei ?
P
Paulosilv_123
publicvoidsalvarNfVenda(ModelVendamodelVenda){Connectionconexao=ConexaoFirebird.getConexao();try{StringsalvarNfVenda="Insert into CAD_VENDA_PDV (FORMA_PAG1) values"+"(?)";PreparedStatementpstmt=conexao.prepareStatement(salvarNfVenda,Statement.RETURN_GENERATED_KEYS);pstmt.setFloat(1,modelVenda.getFORMA_PAG1());intresultado=pstmt.executeUpdate();if(resultado!=1){System.out.println("Erro ao Gravar, Tente Novamente !!");}else{System.out.println("Gravado com Sucesso !!");}pstmt.close();}catch(SQLExceptionex){System.out.println("Erro no Banco de Dados");}}
para facilitar olha meu salvar ai !
T
thimor
publicintsalvarNfVenda(ModelVendamodelVenda){Connectionconexao=ConexaoFirebird.getConexao();try{StringsalvarNfVenda="Insert into CAD_VENDA_PDV (FORMA_PAG1) values"+"(?)";PreparedStatementpstmt=conexao.prepareStatement(salvarNfVenda,PreparedStatement.RETURN_GENERATED_KEYS);pstmt.setFloat(1,modelVenda.getFORMA_PAG1());pstmt.executeUpdate();ResultSetrs=pstmt.getGeneratedKeys();while(rs.next()){returnrs.getInt(1);}pstmt.close();}catch(SQLExceptionex){System.out.println("Erro no Banco de Dados");}return0;}
P
Paulosilv_123
ele esta dando erro no
while(rs.next()){
returnrs.getInt(1);
}
e no catch ta pedindo um return.
missing return Statement
T
thimor
publicintsalvarNfVenda(ModelVendamodelVenda){Connectionconexao=ConexaoFirebird.getConexao();try{StringsalvarNfVenda="Insert into CAD_VENDA_PDV (FORMA_PAG1) values"+"(?)";PreparedStatementpstmt=conexao.prepareStatement(salvarNfVenda,PreparedStatement.RETURN_GENERATED_KEYS);pstmt.setFloat(1,modelVenda.getFORMA_PAG1());pstmt.executeUpdate();ResultSetrs=pstmt.getGeneratedKeys();while(rs.next()){returnrs.getInt(1);}pstmt.close();}catch(SQLExceptionex){System.out.println("Erro no Banco de Dados");}return0;}
P
Paulosilv_123
privateintsalvarNfVenda(){VendaDAOVendaDAO=newVendaDAO();ModelVendamodelVenda=newModelVenda();modelVenda.setFORMA_PAG1(Float.parseFloat(jTDDPdv.getText()));VendaDAO.salvarNfVenda(modelVenda);JOptionPane.showMessageDialog(this,"Dados Gravado, Com Sucesso !!");return0;}
meu metodo na class é esse mais esta dando erro ao gravar
T
thimor
privateintsalvarNfVenda(){VendaDAOvendaDAO=newVendaDAO();ModelVendamodelVenda=newModelVenda();modelVenda.setFORMA_PAG1(Float.parseFloat(jTDDPdv.getText()));intresultadovendaDAO.salvarNfVenda(modelVenda);JOptionPane.showMessageDialog(this,"Dados Gravado, Com Sucesso !!");returnresultado;}
P
Paulosilv_123
privateintsalvarNfVenda(){VendaDAOvendaDAO=newVendaDAO();ModelVendamodelVenda=newModelVenda();modelVenda.setFORMA_PAG1(Float.parseFloat(jTDDPdv.getText()));intresultadovendaDAO.salvarNfVenda(modelVenda);// Dando erro nessa linha (o Erro ";" expected)JOptionPane.showMessageDialog(this,"Dados Gravado, Com Sucesso !!");returnresultado;// e nessa (variable resultado mignt not have been initialized)}
P
Paulosilv_123
Consegui resolver o problema, só que ao salvar esta dando erro !
OBS.: tirei o Statement.RETURN_GENERATED_KEYS e gravou normal
mais mesmo assim não me retornou o ultimo registro !
P
Paulosilv_123
alguém mais poderia me ajudar ? o que poderia ser se o código ta todo certinho porque ele esta apresentando erro =/. lembrando que ele não salva e quando tiro o RETURN_GENERATED_KEYS ele salva ( Banco Firebird ) quem puder ajudar por favor !
P
Paulosilv_123
Pessoa aqui deu tudo certo, muito obrigado a thimor que ajudou pra caramba
Codigo DAO
publicintgetLastId()throwsSQLException{//meu metodo Connectionconexao=ConexaoFirebird.getConexao();//minha conexaoStringretornaUltID="Select max(ID_VENDA) from CAD_VENDA_PDV";// Select max que pega o ultimo registro salvo (o que me parece que no Firebird não funciona o Statement.RETURN_GENERATED_KEYS )PreparedStatementpstmt=conexao.prepareStatement(retornaUltID);ResultSetrs=pstmt.executeQuery();rs.next();intlastId=rs.getInt(1);conexao.close();returnlastId;}
espero que ajude, como me ajudou tbm, lembrando ja que vc foi ajudado, então sempre procure ajudar ao próximo foi tão bom quando o Thimor me respondia e teve outra pessoa tbm que acho que não faz parte da comunidade mais tbm ajudou muito o Mario Vieira que nem sei de onde é mais ajudou pra caramba