Não consigo pôr um ResultSet em uma variável [RESOLVIDO]

7 respostas Resolvido
java-se
A

Olá bom dia, estou tentando fazer uma consulta SQL e colocar o ResultSet em uma variável, porem não estou conseguindo! Segue o meu código:

public void consultarDesconto(){
    
    String desc;
    if (tabelaCaixa.getRowCount() > 0) {
      DefaultTableModel modelo = (DefaultTableModel) tabelaCaixa.getModel();
      int linha = tabelaCaixa.getSelectedRow();
   
      if (linha >= 0) {
       String sql = "SELECT desconto FROM produtos WHERE codigo_pro=?";
       try{
           
        pst = conexao.prepareStatement(sql);
        pst.setString(1, tabelaCaixa.getValueAt(linha, 0).toString());
        rs = pst.executeQuery();
        
        desc = (rs.getString(2));
        System.out.println(desc);
      
   
      

    }  
    catch(Exception e)  
    {  
        e.printStackTrace();
        JOptionPane.showMessageDialog(null,   
                "Ocorreu erro ao carregar a linha de desconto", "Erro",  
                JOptionPane.ERROR_MESSAGE);  
 }     
          
        } else {
            JOptionPane.showMessageDialog(this, "Selecionar uma Linha.", "Venda", 0,
                    new ImageIcon(getClass().getResource("/imagens/usuarios/info.png")));
        }
    } else {
        JOptionPane.showMessageDialog(this, "Não há registro para aplicar desconto.", "Venda", 0,
                new ImageIcon(getClass().getResource("/imagens/usuarios/info.png")));
    }
    
}

O erro de SQL é justamente na linha em que eu igualo na variável
desc = (rs.getString(2));

Exibe esse erro:

java.sql.SQLException: Before start of result set

7 Respostas

S

Mas você colocou seu ResultSet em uma variável, é a variável rs.
O que você não conseguiu fazer foi ler o valor do registro.
Quando um ResultSet é criado, ele ainda não está apontando pra nenhum registro, você precisa chamar o método next() ou first() para posicionar no primeiro registro, só então você consegue ler os valores.

A

blz agora ele deu index out
java.sql.SQLException: Column Index out of range, 2 > 1.

S

É porque seu select só retorna 1 campo [SELECT desconto FROM produtos], mas você está tentando pegar o campo na posição 2 [rs.getString(2)].

A

Certo, o que eu to tentando fazer é o seguinte, existe uma tabela SQL com vários atributos de produtos, eu passei esses valores para uma JTable , estou querendo exibir somente o atributo desconto em uma variável comum. O meu select está baseando no ID do produto que se encontra no índice 0 da minha JTable, onde eu estou buscando pela seguinte linha de codigo:

pst.setString(1, tabelaCaixa.getValueAt(linha, 0).toString());

o que eu quero é guardar o resultado dessa consulta na variável ‘desc’.

S
Solucao aceita

Sim, mas seu select só retorna 1 coluna e você está tentando pegar uma String da coluna 2.

A

Deu certo, eu coloquei “Select desconto,codigo=pro FROM produtos WHERE codigo_pro=?”;

Recuperei esse dois campos mas só usei o código. Vlw

S

Então você não entendeu a causa do problema.

Você estava fazendo:

rs.getString(2)

Quando deveria fazer:

rs.getString(1)
Criado 2 de setembro de 2020
Ultima resposta 3 de set. de 2020
Respostas 7
Participantes 2