Bom dia Pessoal!
Me deparei com um problema, consultei a internet e não consigo ver onde está o problema no meu código. em uma tela de consulta (jdialog) tenho um campo e neste campo digito os dados para procura das informações que eu quero no caso fornecedores. Conforme vou inserindo as letras (keytyped) a busca deve ir filtrando os fornecedores conforme o texto deste campo. Acontece que falha muito. vem muitas iformações trucadas, que não tem nada a ver com a pesquisa.Abaixo o código.
Texto pré-formatado
PreparedStatement pst=null;
Connection con=null;
String sql=null;
try{
Class.forName(“com.mysql.jdbc.Driver”);
con= DriverManager.getConnection(“jdbc:mysql://”+ servidor +":3306/MySql",“root”,“senha”);
sql = “SELECT C.codigo, C.nome, F.nome, E.uf, C.telefone "
+ " FROM fornecedores AS C”
+ " INNER JOIN cidade AS F ON C.cod_cidade = F.codigo"
+ " INNER JOIN estado AS E ON C.cod_estado = E.codigo"
+ " WHERE C.nome LIKE ‘%" + Procura.getText() + "%’";
pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
rs.first();
DefaultTableModel modelo = (DefaultTableModel) tbFornecedores.getModel();
modelo.setNumRows(0);
while(rs.next()){
modelo.addRow(new Object[]{
rs.getString(1),
rs.getString(2),
rs.getString(3).toUpperCase(),
rs.getString(4),
rs.getString(5),
});
}
ModelCount = modelo.getRowCount();
}catch(SQLException ex){
Logger.getLogger(ConsultaFornecedores.class.getName()).log(Level.SEVERE, null, ex);
SqlErrorMessage(ex,new Object(){}.getClass().getEnclosingMethod().getName(), ex.getErrorCode(),getLineNumber());
} catch (ClassNotFoundException ex) {
Logger.getLogger(ConsultaFornecedores.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try{
if(pst != null){ pst.close(); }
if(con != null){ con.close(); }
}catch(SQLException ex){
Logger.getLogger(ViewFornecedores.class.getName()).log(Level.SEVERE, null, ex);
SqlErrorMessage(ex,new Object(){}.getClass().getEnclosingMethod().getName(), ex.getErrorCode(),getLineNumber());
}
}Texto pré-formatado
Você está invocando o método de pesquisa com evento keyRelease, ou seja, quando a tecla é solta?
NÃO… private void ProcuraKeyTyped(java.awt.event.KeyEvent evt) {
com o Released da o mesmo problema. Não apresenta nenhum exception mas também não traz as informações corretas
Se ele não te gera erro, busque-os manualmente. Depois de: pst=con.prepareStatement(sql);
Faça o seguinte:
System.out.println("SQL gerado: " + pst);
Isso irá te mostrar a SQL gerada a ser utilizada no MySQL, incluindo resolução do parâmetro. Com efeito, pode averiguar como as coisas estão funcionando.
No NetBeans tem como eu ver passo a passo, ou seja linha a linha e não vejo problema. Mas só por via das duvidas fiz o que voce falou para analise. e o texto gerado está abaixo.
Como resultado a pesquisa me retornou a Jtable vazia
Sql gerado:com.mysql.jdbc.JDBC4PreparedStatement@67fcd06b: SELECT C.codigo, C.nome, F.nome, E.uf, C.telefone FROM fornecedores AS C INNER JOIN cidade AS F ON C.cod_cidade = F.codigo INNER JOIN estado AS E ON C.cod_estado = E.codigo WHERE C.nome LIKE ‘%maria%’
Observações:
1 - o método setNumRows(int rowConunt) está obsoleto desde a versão 1.3. consulte a documentação do Java para mais detalhes: Oracle Docs - DefaultTableModel;
2 - você está apontando o cursos do ResultSet para o primeiro registro: rs.first(); é isso mesmo que você quer?;
3 - a última linha de objeto não usa-se a vírgula.
Quando tu informa que o cursor deve apontar para o primeiro registro (método first), se houver apenas um resultado no ResultSet, então rs.next() retornará false. Retire a instrução rs.firts() e teste para ver o que acontece. Verifique também se o ResultSet está trazendo alguma informação, ou seja, se há algum registro que tenha a substring 'maria'.
Bingo…"rs.First() era o problema…removi e solucionou o problema. Também dei uma olhada na documentação e alterei conforme sugerido. Obrigado Iohannes…forte abraço!