Busca retornando id 0

Boa noite pessoal!!!

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());
        }
    }        

Quem puder dar uma ajuda!!

Desde já agradeço

faço o seguinte teste:

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

-e mude state.setString() para state.setLong()

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?

Perdão! eu no meu desleixo não percebi que você estava procurando pelo produto ao invés do id.

Qual o nome da coluna id na tabela? é Id ou ID, sql é case-sensitive, verifique e veja se os nome da coluna em getInt e na tabela coincidem.

Se não for isso, então temo não poder ajudar.

Sim o nome do campo (“id”) está correto no código