Bom estou com uma aplicação desktop e tenho uma método busca que retorna o resultado em uma tabela,filtrando apenas o resultado encontrado no BD,porém o meu campo id está vindo como valor 0,independente do que eu pesquise.
Esse é o método busca na classe DAO
public List<Estoque> buscaEstoque(String produto)throws SQLException{
List<Estoque> busca = new ArrayList<>();
String select = "select * from estoque where produto = ?";
PreparedStatement state = getConnection().prepareStatement(select);
state.setString(1,produto);
ResultSet rset = state.executeQuery();
while(rset.next()){
Estoque est = new Estoque();
est.setId(rset.getInt("id"));
est.setProduto(rset.getString("produto"));
est.setCor(rset.getString("cor"));
est.setNumero(rset.getInt("tamanho"));
est.setRef(rset.getInt("referencia"));
busca.add(est);
}
rset.close();
state.close();
return busca;
Esse é o método na classe controller
public List<Estoque> buscaEstoque(String estoque) {
EstoqueDao dao = new EstoqueDao();
try{
return dao.buscaEstoque(estoque);
}catch(SQLException e){
JOptionPane.showMessageDialog(null, "Problemas ao localizar produto\n" + e.getLocalizedMessage());
}
return null;
}
Esse é o evento do botão buscar
private void BtnBuscaActionPerformed(java.awt.event.ActionEvent evt) {
try{
EstoqueController est = new EstoqueController();
List<Estoque> e = est.buscaEstoque(TxtBusca.getText());
limpaBusca();
mostrarLista(e);
BtnBusca.setEnabled(false);
} catch(NullPointerException e){
JOptionPane.showMessageDialog(this,"Parametros incorretos!\n"+ e.getLocalizedMessage());
}
}
-Mude o argumento produto do método buscaEstoque de String para long (certifique de usar Long.parseLong() para converte o id antes de passar para o método)
Caro amigo,fiz a mudança porém gerou erro na compilação na hora da busca
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "teste"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
at Frame.EstoqueFrame.BtnBuscaActionPerformed(EstoqueFrame.java:297)
at Frame.EstoqueFrame.access$700(EstoqueFrame.java:21)
at Frame.EstoqueFrame$8.actionPerformed(EstoqueFrame.java:149)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Então, a exception é auto-explicativa, NumberFormatException: você está tentando ‘parsear’ (converter) uma string que não é uma representação numérica válida em um long.
E o que é uma representação númerica válida? 2, 3, 4, 5 e por ai vai, a diferença é que esses números serão passados como string, por isso a necessidade de conversão.
E porque fazer a conversão?
Porque na tabela SQL o seu id é um inteiro, logo ao criar o PreparedStatement, tem que se invocar statement.setLong() ou setInt(), pois dessa forma o driver jdbc irá se comunicar de forma eficaz com o banco de dados.
Muito obrigado pela explicação,esclareceu bastante o erro gerado!
O meu código estava daquela forma pois eu estava fazendo a busca por produto e não por id (por isso o setString foi aplicado),minha id é do tipo int. O que não comentei é que pesquisando pelo id ele retorna apenas o determinado resultado,porém com a id zerada também,da mesma forma que procurando por produto.Após sua instrução fiz as devidas alterações no código e me resultou nesse erro que você me explicou o que significa,o que me orienta a fazer para resolver esse caso da id com valor zerado?