使用任何过滤器在数据库中搜索
Posted
技术标签:
【中文标题】使用任何过滤器在数据库中搜索【英文标题】:Searching in database with any filter 【发布时间】:2021-12-12 03:31:51 【问题描述】:我创建了一个带有 jTable 的 GUI 来向用户显示数据,用户可以使用他想要的任何过滤器进行搜索,但是,我需要用 jTextField 来识别是空的还是填充的。 那么,如何检查一个 jTextField 是否为空并让 else if 有效?
例如,用户插入一个名称 (jTextFieldNOME) 并单击 jButton 而没有在另一个 jTextField 中写入(还有另外 3 或 4 个 jTextField 遵循类似的模式)。
现在发生的只是运行第一个 else if:else if(jTextFieldNOME.getText() != null)
if(jTextFieldNOME.getText().equals("") && jTextFieldCPF.getText().equals("") && jTextFieldAPELIDO.getText().equals("") && jTextFieldIDADEMIN.getText().equals("") && jTextFieldIDADEMAX.getText().equals(""))
JOptionPane.showMessageDialog(null, "Vazios\n");
PreparedStatement stm=cn.prepareStatement("select * from cad_pessoa ");
ResultSet rs = stm.executeQuery();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
else if(jTextFieldNOME.getText() != null)
PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_nome like ? order by cad_nome asc, cad_cpf asc nulls last ");
ps.setString(1,"%" + jTextFieldNOME.getText() + "%");
ResultSet rs = ps.executeQuery();
ps.execute();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
JOptionPane.showMessageDialog(null, "nomes\n");
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
else if (jTextFieldAPELIDO.getText() != null)
PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_apelido like ? order by cad_nome asc, cad_cpf asc nulls last ");
ps.setString(1,"%" + jTextFieldAPELIDO.getText() + "%");
ResultSet rs = ps.executeQuery();
ps.execute();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
JOptionPane.showMessageDialog(null, "apelidos\n");
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
【问题讨论】:
【参考方案1】:好的,经过这里的一些研究和一些教程,这就是我所做的:
为了解决空的jTextField
并且仍然运行我不想要的if
的问题,使用get length,在去数据库中搜索之前输入一些这个jTextField
需要的字母或数字。
代码如下:
if(jTextFieldNOME.getText().equals("") && jTextFieldCPF.getText().equals("") && jTextFieldAPELIDO.getText().equals("") && jTextFieldIDADEMIN.getText().equals("") && jTextFieldIDADEMAX.getText().equals(""))
JOptionPane.showMessageDialog(null, "Vazios\n");
PreparedStatement stm=cn.prepareStatement("select * from cad_pessoa ");
ResultSet rs = stm.executeQuery();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
else if(jTextFieldNOME.getText().length()>2)
PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_nome like ? order by cad_nome asc, cad_cpf asc nulls last ");
ps.setString(1,"%" + jTextFieldNOME.getText() + "%");
ResultSet rs = ps.executeQuery();
ps.execute();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
else if (jTextFieldAPELIDO.getText().length()>2)
PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_apelido like ? order by cad_nome asc, cad_cpf asc nulls last ");
ps.setString(1,"%" + jTextFieldAPELIDO.getText() + "%");
ResultSet rs = ps.executeQuery();
ps.execute();
DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
tm.setRowCount(0);
while(rs.next())
Object o []= rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data");
tm.addRow(o);
就我而言,仅 2 个字节就足以进行搜索并显示在我的 jTable
【讨论】:
以上是关于使用任何过滤器在数据库中搜索的主要内容,如果未能解决你的问题,请参考以下文章