Java + netbeans + banco de dados (RESOLVIDO)

Bom dia galera, sou novo por aqui.

Estou desenvolvendo um projeto, e nele me foi pedido para quando eu adicionar as informações no
JTable eu conseguir também adicionar no banco de dados (MySQL WorkBench) no caso. Eu sei que o mais comum é alimentar o JTable com o banco de dados, porém nesse caso eu preciso fazer o procedimento contrário e queria saber se isso é possivel? Se consigo pegar o conteudo que eu jogar no JTable e criar um botao adicionar para enviar para o banco de dados.

Obrigado desde já.

Segue a imagem para explicar melhor o que quero fazer, pegar os dados que esta nessa JTable e enviar ao banco de dados.

OBS: O banco de dados já esta montado, com todas as tabelas, já consigo fazer a pesquisa de PEP por ele, está tudo certinho.

Como você adiciona as informações na tabela? Existe um formulário? Existe um botão que adiciona os dados na tabela?
Se for o caso, quando você clicar no botão para inserir os dados, além de inserir, você chama um método que pegue essa instância e passe como parâmetro em uma função que faça o cadastro.

Então nessa tabela em especifico, eu adiciono copiando e colando, por que quem vai usar a ferramenta iria inserir as informações dessa forma, por exemplo copiando umas informações no excel e colando dentro da jtable. Meu problema é o próximo passo ai, como fazer essas informações que coloquei dentro da jtable ir pro banco de dados! Saberia algo sobre isso? Na minha cabeça imagino que teria que ter um comando onde eu setaria as colunas da Jtable, mas não sei por onde começar.

Eu fiz este exemplo:

Após eu inserir os dados na tabela, eu seleciono a linha que desejo cadastrar e clico no botão cadastrar.

Segue o código:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    Cliente cliente = new Cliente();
    cliente.setId(Long.parseLong(tabelaCliente.getValueAt(tabelaCliente.getSelectedRow(), 0).toString()));
    cliente.setNome(tabelaCliente.getValueAt(tabelaCliente.getSelectedRow(), 1).toString());
    cliente.setTelefone(tabelaCliente.getValueAt(tabelaCliente.getSelectedRow(), 2).toString());
    cliente.setEmail(tabelaCliente.getValueAt(tabelaCliente.getSelectedRow(), 3).toString());
    
    this.txtId.setText(cliente.getId().toString());
    this.txtNome.setText(cliente.getNome());
    this.txtTelefone.setText(cliente.getTelefone());
    this.txtEmail.setText(cliente.getEmail());
}    

No exemplo, eu mandei inserir os dados no formulário, mas no seu caso você chama uma função que faça o cadastro.

Se eu fosse cadastrar os dados do cliente por exemplo, eu iria criar o seguinte método:

public void cadastrarCliente(Cliente cliente) {
    try {
        em.getTransaction().begin();
        em.persist(cliente);
        em.getTransaction().commit();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    } finally {
        em.close();
    }
}

Neste exemplo estou utilizando o Hibernate para persistência dos dados.

Obrigado pelo interesse em me ajudar desde já!
Mas acho que você não entendeu ainda, ali na minha imagem acima, você ve a jTable preenchida, e ela foi preenchida dando um Ctrl C, Ctrl V de uma planilha excel, ao lado você ve o botão de + (no caso de adicionar) o meu intuito pra quem for usar a ferramenta é que quando a tabela estiver preenchida a pessoa clique no botão adicionar e as informações da jTable vá para o banco de dados.

Obs: Eu vi que voce usou campo texto de suporte na sua imagem, e se fosse assim realmente seria mais fácil, porém o procedimento que preciso fazer é exatamente esse que expliquei logo acima.

Tentei reutilizar seu código dessa forma, mas não tive exito:

private void adicionar() {

    String sql = "insert into tabge(lista,dat,pep,listec,item,material,txtbre,qtde,um,rncrm,necob,natnf,local,pepaux,projeto) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    try {
        pst = conexao.prepareStatement(sql);
     
                  
        pst.setlista(jTable1.getValueAt(jTable1.getSelectedRow(), 0).toString()));
        pst.setdat(jTable1.getValueAt(jTable1.getSelectedRow(), 1).toString());
        pst.setpep(jTable1.getValueAt(jTable1.getSelectedRow(), 2).toString());
        pst.setlistec(jTable1.getValueAt(jTable1.getSelectedRow(), 3).toString());
        pst.setitem(jTable1.getValueAt(jTable1.getSelectedRow(), 4).toString());
        pst.setmaterial(jTable1.getValueAt(jTable1.getSelectedRow(), 5).toString());
        pst.settxtbre(jTable1.getValueAt(jTable1.getSelectedRow(), 6).toString());
        pst.setqtde(jTable1.getValueAt(jTable1.getSelectedRow(), 7).toString());
        pst.setum(jTable1.getValueAt(jTable1.getSelectedRow(), 8).toString());
        pst.setrncrm(jTable1.getValueAt(jTable1.getSelectedRow(), 9).toString());
        pst.setnecob(jTable1.getValueAt(jTable1.getSelectedRow(), 10).toString());
        pst.setnatnf(jTable1.getValueAt(jTable1.getSelectedRow(), 11).toString());
        pst.setlocal(jTable1.getValueAt(jTable1.getSelectedRow(), 12).toString());
        pst.setpepaux(jTable1.getValueAt(jTable1.getSelectedRow(), 13).toString());
        pst.setprojeto(jTable1.getValueAt(jTable1.getSelectedRow(), 14).toString());

    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, e);
    }

}

O preparedStatement está sendo usado errado.

Deve ser usado assim. Exemplo:

Se na sua tabela do banco a coluna lista for um varchar, aí no preparedStatement você vai usar o pst.setString(1, jTable1.getValueAt(jTable1.getSelectedRow(), 0).toString()));

Se você quiser setar o id e nome em uma tabela cliente por exemplo, você vai usar o pst assim:

String sql = "insert into cliente (id, nome) values (?, ?)";
pst = conexao.prepareStatement(sql);
pst.setInt(1, cliente.getId());
pst.setString(2, cliente.getNome());
pst.execute();

O que mais posso fazer? Depois do print tentei colocar Int onde está Int e Date onde está date porém continua com erro.

O ideal era você ter classes somente para fazer a conexão com o banco. Tipo ClienteDAO, onde dentro desta classe você faria o CRUD por exemplo. Você deveria estudar sobre padrões de projeto, modelo MVC e etc…

Mas meu banco de dados ta funcionando perfeitamente, vou mostrar a outra tela onde eu excluo e edito o que quero e vai direto pro BD.

E estou usando a mesma conexao do ModuloConexao que eu criei e puxando da mesma forma com o pst e PreparedStatement… creio que o código da setagem mesmo pode estar errado, sei lá… que jTable complicado…

Acabei de fazer a mesma coisa em um pequeno exemplo aqui…

Tudo certo…

Tira um print do erro por favor…

Amigo, se você está querendo evoluir, começa a usar JPA com Hibernate em vez de JDBC.

e quando executo aparece esses erros:

Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: br.com.gem.telas.Tela_Adicionar_Imprimir.initComponents
at br.com.gem.telas.Tela_Adicionar_Imprimir.(Tela_Adicionar_Imprimir.java:33)
at br.com.gem.telas.TelaPrincipal.jMenuItem1ActionPerformed(TelaPrincipal.java:230)
at br.com.gem.telas.TelaPrincipal.access$200(TelaPrincipal.java:18)
at br.com.gem.telas.TelaPrincipal$3.actionPerformed(TelaPrincipal.java:125)
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.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:842)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:952)
at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:586)
at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:483)
at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:429)
at javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:339)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:888)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
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:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
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)

Parece ser erro de sintaxe, expected “;”

Parece ter um ) a mais em cada linha.

Era isso mesmo o erro, ai compilei, mas não fez a adição! :pensive::triumph:

como se tivesse tudo certo, mas quando pesquisei no banco não achei

Claro amigão, está faltando o pst.execute() :expressionless:

Eu tinha colocado. Mas deu outro erro:

Então, você precisa selecionar a linha que vc acabou de preencher na tabela.

Em seguida, vc clica no botão para fazer o insert no banco. Este método getSelectedRow() pega a linha em questão.

Cara! Muuuuuuuuuuuuuuuuuuuuuito obrigado! é meu primeiro post aqui, valeu demais mesmo! Sei que tenho que estudar muito e melhorar muito, mas valeu velho! (RESOLVIDO).

1 curtida