PreparedStatement não faz busca (select * .....) de coluna específica[RESOLVIDO]

Bom dia pessoal,
Estou trabalhando em uma aplicação que irá automatizar a conferencia de alguns produtos antes do embarque, lendo o codigo de barras.
Porém tenho um problema, na minha DB, tenho varias colunas, mas as que eu preciso em especial são duas: MATERIAL, e CODIGOBARRAS. quando altero a STRING de comando do MYSQL para MATERIAL, a resposta ocorre normalmente, quando altero para CODIGOBARRAS nao retorna nada, conseguem me ajudar?
segue o código:

public class testa {
Connection con;
public void Remove (String a ){

   con = (com.mysql.jdbc.Connection) Conexao.getConnection();
    PreparedStatement stmt = null;
    ResultSet rs;
    try {
        stmt = con.prepareStatement("select qtdOrigem from transportadora1 where material = ?");
      //stmt = con.prepareStatement("select qtdOrigem from transportadora1 where CODIGOBARRAS = ?"); 
        stmt.setString(1, a);
        rs =  stmt.executeQuery();
        while(rs.next()){
            
          JOptionPane.showMessageDialog(null,"RESULT : "+rs.getInt("qtdOrigem"));
        }
        
    } catch (SQLException ex) {
      JOptionPane.showMessageDialog(null,"ERRO: "+ex);
    }

"Só estava me esquecendo; os dados de MATERIAL e CODIGOBARRAS são todos varchar(30) no meu DB.
Apenas o qtdOrigem é inteiro.
abaixo seguem as inportações:

package Funcoes;

import Connection.Conexao;
import bean.Motor;
import com.mysql.jdbc.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

Cara, vou começar com alguns pontos a melhorar, ok?
Primeiro, nomes de classes, em java, por convenção, se iniciam com _ (underline), $ (cifrão) ou letra maiúscula (no caso, Testa seria o correto).

Coloque nomes claros nas classes, atributos, métodos e parâmetros. Assim fica mais fácil entender o que você está escrevendo.

Entendo que é uma opção para algo, mas, não use elementos gráficos nas classes que interagem com o banco de dados. Você viola o princípio de responsabilidade única para as classes.

Só uma curiosidade, você já testou essa query

select qtdOrigem from transportadora1 where CODIGOBARRAS = ?

Diretamente no banco de dados? E o retorno? Está de acordo? Se não, o primeiro passo é esse, testar a query, diretamente no banco e ver o resultado.

Bom dia amigo,
Obrigado pelas orientações, essa não é minha classe original, apenas de teste.
Bom quanto ao comando, ele retorna normalmente no DB, apenas na classe em JAVA que ela nao retorna nada.
Seria talvez o comando (rs = stmt.executeQuery(): ) ???

Só para esclarecer, a ideia original é usar um IF para verificar se o valor retornado não é zero, e então executar o comando ( Update transportadora1 set qtdOrigem = qtdOrigem -1 where codigoBarras = ? ).

Nesse exemplo utilizei o JOptionPane… apenas para testar o retorno.

Entendi o conceito.
Teoricamente (e olhando por cima) parece tudo ok com a query.

Creio que não, embora eu prefira invocar o executeQuery antes e depois chamar o getResultSet, mas, teoricamente, não interfere em nada.
Eu sugiro que faça debug do código, identifique o que entra, como fica a String com o parâmetro. Assim fica mais fácil de achar uma luz.

O debug não resolveu, quanto a testar como fica a String com o parametro, segue a String:
select transportadora1.qtdOrigem from transportadora1 inner join transportadora on (transportadora1.posicao = transportadora.posicao) where transportadora1.codigoBarras = ‘7890705382784’ ;

Percebi que quando executo da forma acima no DB, o retorno é null.
Como estou buscando um inteiro no ResultSet, acredito que seja isso.

se eu executar da forma acima, porem sem aspas simples no codigo o retorno é o desejado.
Como faço para deixar a linha de comando funcionando com as aspas?

Se o parâmetro a substituir o “?” na query é uma String, use o setString, caso contrário, use o correspondente ao tipo de dado, afinal, não existe apenas o setString.
Para este caso, o setInt ou setLong.
Para mais informações, veja o javadoc

1 curtida

Pelo visto codigoBarras é um número inteiro no banco de dados, com isso deve ser passado apenas números.

E aqui você está passando uma string, fazendo com que o java passe para o banco com as aspas.

Boa pessoal, resolvi.
era apenas isso, eu estava inserindo uma string.
Converti o getText para long, e usei o setLong: ficou assim:
public void Remove (Long a ){

   con = (com.mysql.jdbc.Connection) Conexao.getConnection();
    PreparedStatement stmt = null;
    ResultSet rs;
    try {
        stmt = con.prepareStatement("select transportadora1.qtdOrigem from transportadora1 "
                + " inner join transportadora on (transportadora1.posicao = transportadora.posicao) where transportadora1.codigoBarras =  ?");
        stmt.setLong(1, a);

Faça uma observação no tipo de dado que o banco de dados armazena com relação ao CODIGOBARRA. Se for um Integer, ou Long… se for tente alterar o método setString para setLong