Pegar linhas selecionadas da Jtable e inserir no Banco de dados - RESOLVIDO

Bom dia galera, sou novato em programação e estou parado no seguinte problema, quando eu seleciono as linhas da minha jTable para inserir no BD, ele envia somente a primeira linha. Segue meu código abaixo:

private void adicionar() {

    String sql = "insert into tblgem(lista,dat,pep,listec,item,material,txtbre,qtde,um,rncrm,necob,natnf,local,pepaux,projeto) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    try {
        pst = conexao.prepareStatement(sql);
                
        pst.setString(1, jTable1.getValueAt(jTable1.getSelectedRow(), 0 ).toString());
        pst.setString(2, jTable1.getValueAt(jTable1.getSelectedRow(), 1).toString());
        pst.setString(3, jTable1.getValueAt(jTable1.getSelectedRow(), 2).toString());
        pst.setString(4, jTable1.getValueAt(jTable1.getSelectedRow(), 3).toString());
        pst.setString(5, jTable1.getValueAt(jTable1.getSelectedRow(), 4).toString());
        pst.setString(6, jTable1.getValueAt(jTable1.getSelectedRow(), 5).toString());
        pst.setString(7, jTable1.getValueAt(jTable1.getSelectedRow(), 6).toString());
        pst.setString(8, jTable1.getValueAt(jTable1.getSelectedRow(), 7).toString());
        pst.setString(9, jTable1.getValueAt(jTable1.getSelectedRow(), 8).toString());
        pst.setString(10, jTable1.getValueAt(jTable1.getSelectedRow(), 9).toString());
        pst.setString(11, jTable1.getValueAt(jTable1.getSelectedRow(), 10).toString());
        pst.setString(12, jTable1.getValueAt(jTable1.getSelectedRow(), 11).toString());
        pst.setString(13, jTable1.getValueAt(jTable1.getSelectedRow(), 12).toString());
        pst.setString(14, jTable1.getValueAt(jTable1.getSelectedRow(), 13).toString());
        pst.setString(15, jTable1.getValueAt(jTable1.getSelectedRow(), 14).toString());
        
        int i = pst.executeUpdate(); 
        int w = jTable1.getSelectedRow();
        
        for( w = 0; w > 0; w++);{
        JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");  
    }
        
       // if (i > 0 ) {
         //  JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");             
        //}

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

E abaixo imagem de como é minha jTable na prática

Quando clico no botão de adicionar seguindo esse exemplo, ele só insere a lista 220.

Você só está inserindo informações da coluna selecionada, mesmo que você tenha selecionado mais de uma coluna, com esse método você só terá como retorno uma linha.
O que você pode fazer para resolver é usar:
jTable1.getValueAt(x, y)
Botar isso dentro de um loop (for) e ir incrementando o x/y onde x são as linhas e y as colunas, inicie seu laço na posição 0,0 e vá incrementando com um for composto onde ele irá incrementar todas as colunas e logo depois incrementar uma linha e retornar ao valor 0 das colunas.

for(int x = 0; x < numLinhas; x++){
            for(int y = 0; y < numColunas;y++){
            jTable1.getValueAt(x, y); 
            }
        }

Não consegui fazer dar certo, ainda continua só inserindo a primeira linha selecionada no banco e não todas de uma vez.

Qual é o código atualizado?

private void adicionar() {

    String sql = "insert into tblgem(lista,dat,pep,listec,item,material,txtbre,qtde,um,rncrm,necob,natnf,local,pepaux,projeto) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    try {
        pst = conexao.prepareStatement(sql);
                
        pst.setString(1, jTable1.getValueAt(jTable1.getSelectedRow(), 0 ).toString()); // depois do getValueAt já serão inseridos os campos x,y
        pst.setString(2, jTable1.getValueAt(jTable1.getSelectedRow(), 1).toString());
        pst.setString(3, jTable1.getValueAt(jTable1.getSelectedRow(), 2).toString());
        pst.setString(4, jTable1.getValueAt(jTable1.getSelectedRow(), 3).toString());
        pst.setString(5, jTable1.getValueAt(jTable1.getSelectedRow(), 4).toString());
        pst.setString(6, jTable1.getValueAt(jTable1.getSelectedRow(), 5).toString());
        pst.setString(7, jTable1.getValueAt(jTable1.getSelectedRow(), 6).toString());
        pst.setString(8, jTable1.getValueAt(jTable1.getSelectedRow(), 7).toString());
        pst.setString(9, jTable1.getValueAt(jTable1.getSelectedRow(), 8).toString());
        pst.setString(10, jTable1.getValueAt(jTable1.getSelectedRow(), 9).toString());
        pst.setString(11, jTable1.getValueAt(jTable1.getSelectedRow(), 10).toString());
        pst.setString(12, jTable1.getValueAt(jTable1.getSelectedRow(), 11).toString());
        pst.setString(13, jTable1.getValueAt(jTable1.getSelectedRow(), 12).toString());
        pst.setString(14, jTable1.getValueAt(jTable1.getSelectedRow(), 13).toString());
        pst.setString(15, jTable1.getValueAt(jTable1.getSelectedRowCount(), 14).toString());
        
        pst.executeUpdate(); 
        int w = (int) jTable1.getValueAt(jTable1.getSelectedRow(), 0);
        
        for( w = 0; w > 0; w++);{
        JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");  
    }
        
       // if (i > 0 ) {
         //  JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");             
        //}

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

Amigo como esperas resolver isto se não modificar seu código? Alí em cima eu te dei os passos para você tentar fazer e implementar no seu código, mas pelo visto você nem mexeu nele. A resposta pro seu problema está ai, como queres pegar várias linhas se você busca apenas pela linha selecionada? Mesmo tendo selecionado várias linhas, o método retorna apenas uma linha…novamente o que você tem que fazer é alterar o jTable1.getSelectedRow() para pegar da linha 0 (ou seja a primeira linha até a última.

Poderia usar o getSelectedRows() para pegar os índices das linhas selecionadas e iterar por eles.

Acho que podemos estar perto. Modifiquei totalmente o código porém agora está dando esse erro:

image

abaixo segue o código modificado

private void adicionar() {

    String sql = "insert into tblgem(lista,dat,pep,listec,item,material,txtbre,qtde,um,rncrm,necob,natnf,local,pepaux,projeto) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    try {
        pst = conexao.prepareStatement(sql);
        
        //TableModel GemTableModel = jTable1.getModel();
        int indexs[] = jTable1.getSelectedRows();
        
        Object[] row = new Object[15];
        
        for(int i = 0; i < indexs.length; i++)
        {
            row[0] = jTable1.getValueAt(indexs[0], 1);
            row[1] = jTable1.getValueAt(indexs[0], 2);
            row[2] = jTable1.getValueAt(indexs[0], 3);
            row[3] = jTable1.getValueAt(indexs[0], 4);
            row[4] = jTable1.getValueAt(indexs[0], 5);
            row[5] = jTable1.getValueAt(indexs[0], 6);
            row[6] = jTable1.getValueAt(indexs[0], 7);
            row[7] = jTable1.getValueAt(indexs[0], 8);
            row[8] = jTable1.getValueAt(indexs[0], 9);
            row[9] = jTable1.getValueAt(indexs[0], 10);
            row[10] = jTable1.getValueAt(indexs[0], 11);
            
           int adicionado = pst.executeUpdate();
           if (adicionado > 0) {
           JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");
           }   
        }           
}   catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

}

Amigo em nenhum momento você setou valor algum ao statment do SQL, antes de dar execute você deve setar as variáveis, senão serão sempre nulas.

Faça assim por exemplo:

pst.setString(1, valorParametro1);
pst.setFloat(1, valorParametro2);
pst.setDouble(1, valorParametro3);

Logo depois de atribuir valores aos parametros do seu SQL é que você poder dar o executeUpdate()

Amigo não sei se fiz corretamente o que voce orientou, porém tentei modificar de algumas formas e agora aparece essa mensagem

image

Segue o código:

private void adicionar() {

    String sql =  "insert into tblgem(lista,dat,pep,listec,item,material,txtbre,qtde,um,rncrm,necob,natnf,local,pepaux,projeto) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    try {
        pst = conexao.prepareStatement(sql);
        
        //TableModel GemTableModel = jTable1.getModel();
        int indexs[] = jTable1.getSelectedRows();
        
        String[] row = new String[14];
        
        for(int i = 0; i < indexs.length; i++)
        {
            pst.setString(0, jTable1.getValueAt(indexs[0], 0).toString());
            pst.setString(1, jTable1.getValueAt(indexs[0], 1).toString());
            pst.setString(2, jTable1.getValueAt(indexs[0], 2).toString());
            pst.setString(3, jTable1.getValueAt(indexs[0], 3).toString());
            pst.setString(4, jTable1.getValueAt(indexs[0], 4).toString());
            pst.setString(5, jTable1.getValueAt(indexs[0], 5).toString());
            pst.setString(6, jTable1.getValueAt(indexs[0], 6).toString());
            pst.setString(7, jTable1.getValueAt(indexs[0], 7).toString());
            pst.setString(8, jTable1.getValueAt(indexs[0], 8).toString());
            pst.setString(9, jTable1.getValueAt(indexs[0], 9).toString());
            pst.setString(10, jTable1.getValueAt(indexs[0], 10).toString());
            pst.setString(11, jTable1.getValueAt(indexs[0], 11).toString());
            pst.setString(12, jTable1.getValueAt(indexs[0], 12).toString());
            pst.setString(13, jTable1.getValueAt(indexs[0], 13).toString());
            pst.setString(14, jTable1.getValueAt(indexs[0], 14).toString());
           
            
            //pst.setString(1, jTable1.getValueAt(jTable1.getSelectedRow(),  0).toString());
            
           int adicionado = pst.executeUpdate();
           if (adicionado > 0) {
           JOptionPane.showMessageDialog(null, "Requisições adicionadas com sucesso!");
           }   
        }           
}   catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

}

Agora arrumei a numeração depois de setString

image

porém voltou a adicionar apenas a primeira linha quando eu insiro na jTable seleciono e clico em adicionar.

Tá pegando sempre o index 0.
Use indexs[i]

Hahahaha eu tinha mudado agora pouco, foi e ja tava vindo aqui contar! Pô feliz demais que deu certo, só não ficou 100%, por que na hora que aparece a mensagem que as “Requisições adicionadas com sucesso!” por exemplo se eu fiz 5 requisições, está aparecendo 5x a mensagem, ai agora eu só tenho que tirar isso pra não ficar muito massante ter que ficar clicando em OK toda hora.

É só retirar de dentro do for a notificação que ela só será mostrada uma vez apenas.

Bom dia galera! Estarei encerrando por aqui então, muuuuuuuuuuito obrigado pela força, sei que tiveram que ter bastante paciência cmg, mas de coração ajudaram muito! Obrigado, abraço! RESOLVIDO.