Erro: Resultset não esta posicionado corretamente

Bom dia, pessoal. Estou desenvolvendo uma aplicação de estoque, onde cheguei em um ponto que devo fazer a baixa no estoque. Realizo a baixa sem problemas. Porém quero possibilitar que um produto seja excluido da baixa antes da mesma ser finalizada. Quero selecionar o produto, no caso medicamento, atraves de um mouse clicked, e logo apos, poder excluir. Porem esta dando este erro. Segue o codigo:

 private void jTableMedicamentosBaixaMouseClicked(java.awt.event.MouseEvent evt) {                                                     
        String nome_medicamento = "" + jTableMedicamentosBaixa.getValueAt(jTableMedicamentosBaixa.getSelectedRow(), 1);
        conex.conexao();
        conex.executaSql("select med_baixa.quantidade_med_baixa, medicamentos.nome_medicamento, medicamentos.cod_barras_medicamento \n" +
                        "from med_baixa inner join medicamentos on med_baixa.cod_medicamento = medicamentos.cod_medicamento "
               + "where medicamentos.nome_medicamento = '" + nome_medicamento + "'");

        
       try {
            conex.rs.next();

            jTextFieldQuantidade.setText(String.valueOf(conex.rs.getInt("quantidade_med_baixa")));
            jTextFieldMedicacao.setText(conex.rs.getString("nome_medicamento"));
            jTextFieldCodigoDeBarras.setText(conex.rs.getString("cod_barras_medicamento"));
            
            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao selecionar medicamento. Erro: " + ex);
        }

        conex.desconecta();
        
        jButtonAdicionar.setEnabled(false);
    }

Diretamente no banco, a query funciona perfeitamente. Acho que o erro está na parte de setar as infomações nas Fields de texto. Aguardo os colegas.

Vc não falou qual o erro, mas imagino que seja por conta da falta de um alias para as colunas retornadas no select. Tente assim:

Mude sua consulta para ficar assim:

SELECT
	med_baixa.quantidade_med_baixa AS quantidade_med_baixa, " +
	medicamentos.nome_medicamento AS nome_medicamento, " +
	medicamentos.cod_barras_medicamento AS cod_barras_medicamento " +
"FROM med_baixa " +
"INNER JOIN medicamentos ON med_baixa.cod_medicamento = medicamentos.cod_medicamento " +
"WHERE medicamentos.nome_medicamento = '" + nome_medicamento + "'"

O erro é: ResultSet não está posicionado corretamente. Talvez voce precise chamar next.

Não saiu o erro com a instrução que você me passou.

esse next ta chamando o resultset.next() corretamente? pq para pegar dados de retorno do banco ele precisa ser chamado. precisa ver a implementacao da classe que tem voce instanciou ess conex

Eu acho que o erro está aqui:

jTextFieldQuantidade.setText(String.valueOf(conex.rs.getInt(“quantidade_med_baixa”)));
jTextFieldMedicacao.setText(conex.rs.getString(“nome_medicamento”));
jTextFieldCodigoDeBarras.setText(conex.rs.getString(“cod_barras_medicamento”));

pois quando comento essa parte, deixando somente o conex.rs.next dentro do try, não da erro.

Mostra tua classe de conexao que tem esse metodo executaSQL

Classe de Conexao

package Conexao;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ConexaoBD {

public Statement stm;
public ResultSet rs;
private String driver = "org.postgresql.Driver";
private String caminho = "jdbc:postgresql://localhost:5432/estoque";
private String usuario = "postgres";
private String senha = "postgres";
public Connection con;

public void conexao() {
    try {
        System.setProperty("jdbc.Drivers", driver);
        con = DriverManager.getConnection(caminho, usuario, senha);
        //  JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso!");
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao conectar o servidor.\n Erro: " + ex.getMessage());
    }
}

public void executaSql(String sql) {
    try {
        stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);
        rs = stm.executeQuery(sql);
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro executaSql \n Erro: " + ex.getMessage());
    }

}

public void desconecta() {
    try {
        con.close();
        //  JOptionPane.showMessageDialog(null, "Desconectado com sucesso!");

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao desconectar do servidor.\n Erro: " + ex.getMessage());
    }
}

}

Faz o seguinte

if(!conex.rs.first()){
   system.out.println("n há dados");
} else {
    jTextFieldQuantidade.setText(String.valueOf(conex.rs.getInt("quantidade_med_baixa")));
            jTextFieldMedicacao.setText(conex.rs.getString("nome_medicamento"));
            jTextFieldCodigoDeBarras.setText(conex.rs.getString("cod_barras_medicamento"));
}

Está caindo no erro, printando na tela.

Vê se seu sql funciona corretamente direto no banco de dados entao. Pq o código está aparentemente correto.


se printou que não há dados, há duas opções:

  1. Seu SQL pode estar incorreto e não vai trazer as informações.
  2. Nao tem nenhum resultado vindo.

O SQL está correto, testei direto no PostgreSQL. Acho que ta errado naquela parte de lançar os dados nas fields.

Em vez de criar o statement dessa forma:

stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);

Tenta assim para testar:

stm = con.createStatement();

Antes de qualquer coisa, troca seus JOptionPane do catch por

ex.printStackTrace();