[Resolvido] Consulta automatica ao salvar um cadastro no BD

Bom dia

Estou desenvolvendo uma aplicação com netbeans que faz cadastro em um BD, pesquisa que retorna valores do BD e imprimi um relatório com as informações do BD.

ja ta tudo funcionando belezinha porem se eu quiser imprimir o que acabei de cadastrar eu primeiro tenho que entrar na parte de pesquisa, selecionar a linha na jtbable para que a aplicação jogue os valores do banco no formulario junto com o campo que é minha chave primaria para ai sim eu conseguir imprimir.

o que eu gostaria de fazer é quando clicar no botao salvar alem do metodo de adicionar da minha classe dao ele tambem incluisse um metodo que pegaria a ultima linha criada no meu BD (ou seja o que eu acabei de gravar) e pegue o valor da minha chave primaria e jogue no meu formulario para assim poder imprimir sem ter que fazer todo o metodo de pesquisar e selecionar uma linha na tabela que recebeu o resultado da minha pesquisa.

ja quebrei a cabeça aqui mas nao consigo passar a logica para a programação.

alguem poderia me ajudar?

Você pode fazer diferente, antes de salvar o registro você pega o nextvalue da sua chave primaria, assim não precisará fezer uma nova consulta após salvar, visto que o restante dos dados voce ja tem.
Faça um método com o SQL correspondente ao banco que você utiliza.

vc poderia me auxiliar nisso sou iniciante em programação:)

Antes de você salvar o item você pode preenncher o id com sequencia vinda do banco veja o exemplo:

`public boolean incluirMovimento(Movimento movimento) throws ParseException {

        try {
            conn = ConnectionFactory.getConnection();
            conn.setAutoCommit(false);

            movimento.setIdMovimento(proximaSequencia());

            sql = new StringBuilder();
            sql.append("insert into movimento "
                    + "(idmovimento, fk_evento, total, data_movimento, usuario, titulo, nome, endereco, cep, cidade, estado, cpf, email, telefone1, telefone2, bairro) "
                    + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
           
            ps.executeUpdate();`

Voce cria o metodo pra buscar essa sequencia no banco, no meu caso utilizo o postgres, porem pode fazer isso em qualquer banco, pra isso você vai precisar do nome da sequencia criada:

` public int proximaSequencia() throws SQLException {

        PreparedStatement psSequencia;
        ResultSet rsSequencia;
        int seqmovimento = 0;
        sql = new StringBuilder();
        sql.append("SELECT NEXTVAL('movimento_idmovimento_seq') as sqlmovimento");

        psSequencia = conn.prepareStatement(sql.toString());
        rsSequencia = psSequencia.executeQuery();
        conn = ConnectionFactory.getConnection();
        if (rsSequencia.next()) {
            seqmovimento = rsSequencia.getInt("sqlmovimento");
        }
        return seqmovimento;
    }`

estava dando uma olhada em outros forums e achei algo parecido:
porem nao consegui implementar

o que eu fiz foi isso aqui para o botao novo:

              int x = 0;
             String sql = "select max(OS)+1 from DESCONTAMINADOR";
             PreparedStatement stmt = this.conexao.prepareStatement(sql);
             ResultSet rs = stmt.executeQuery();
             while(rs.next()){
                x= rs.getInt(sql);
                jFTOS.setText(String.valueOf(x));
             }

porem quando clico no botao gera esse erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at descontaminador.telas.Descontaminação.jBNovoActionPerformed(Descontaminação.java:2161)
	at descontaminador.telas.Descontaminação.access$700(Descontaminação.java:49)
	at descontaminador.telas.Descontaminação$7.actionPerformed(Descontaminação.java:492)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6533)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

vou tentar fazer o seu exemplo para ver se da certo e ja respondo

ja tentei implementar tbm com generatedkeys mas nao consegui

tentei executar o comando SQL "select nextval direto no bd porem nao reconhece esse comando

Consegui :slight_smile:

Pra resolver o problema do Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

era porque esqueci de importar a classe de conexão

public Descontaminação()  {
        initComponents();
        this.conexao = Conexao.getConexao(); <--------
    }

ai meu metodo ficou assim:

private void jBNovoActionPerformed(java.awt.event.ActionEvent evt) {                                       
         try {
           // os jtextField.setText("") eu nao coloquei aki pq são muitos :) //
             int x = 0;
             String sql = "select max(OS)+1 as OS from DESCONTAMINADOR";
             PreparedStatement stmt = this.conexao.prepareStatement(sql);
             ResultSet rs = stmt.executeQuery();
             while(rs.next()){
                x= rs.getInt("OS");
                jFTOS.setText(String.valueOf(x));
             }
         
             
         } catch (SQLException ex) {
             Logger.getLogger(Descontaminação.class.getName()).log(Level.SEVERE, null, ex);
         }

vlw pela ajuda