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:
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
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