You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带过滤条件查询数据库并展示到jTable,如何实现任意位置姓名模糊匹配

问题解答

语法选择结论

你的需求直接用LIKE即可,完全满足匹配字段任意位置关键词的要求,且兼容性远高于SIMILAR TO:

  • LIKE是所有主流关系型数据库都支持的SQL标准模糊匹配语法,用%作为通配符代表任意长度的任意字符,你只需要把用户输入的关键词前后拼接上%,就能匹配所有包含该关键词的结果,比如关键词Santos拼接为%Santos%,就可以同时匹配到Lucas Santos、Santos Jr这类结果。
  • SIMILAR TO是PostgreSQL数据库独有的语法,支持正则表达式匹配,功能更强但兼容性极差,你的简单模糊匹配需求完全用不到正则,没必要使用。

现有代码问题修正

你当前的代码存在几个明显问题,需要同步修改:

  1. 你注释了else分支,导致无论输入框是否为空,都会执行两次查询逻辑,最终jTable会被带筛选条件的查询结果覆盖,需要把else的注释放开,让两个分支互斥执行。
  2. 模糊匹配参数没有拼接通配符,直接塞入用户输入的内容会变成精确匹配,无法实现任意位置匹配。
  3. 执行查询时多余调用了一次ps.execute(),属于冗余代码,直接删除即可。
  4. 建议补充资源关闭逻辑,避免数据库连接泄漏。

修正后参考代码

try{
    Connection cn=DB.connector.getConnection();
    String searchKey = jTextFieldNOME.getText().trim();
    DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
    tm.setRowCount(0);

    if(searchKey.equals("")){
        // 输入为空时查询全量数据
        PreparedStatement stm=cn.prepareStatement("select cad_cpf,cad_nome,cad_apelido,cad_idade,cad_data from cad_pessoa order by cad_nome asc, cad_cpf asc nulls last");
        ResultSet rs = stm.executeQuery();
        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);
        }
        stm.close();
        rs.close();
    }else{
        // 输入不为空时走模糊查询
        PreparedStatement ps=cn.prepareStatement("select cad_cpf,cad_nome,cad_apelido,cad_idade,cad_data from cad_pessoa where cad_nome like ? order by cad_nome asc, cad_cpf asc nulls last ");
        // 拼接前后通配符实现任意位置匹配
        ps.setString(1, "%" + searchKey + "%");
        ResultSet rs = ps.executeQuery();
        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);
        }
        ps.close();
        rs.close();
    }
    cn.close();
}catch (Exception e){
    JOptionPane.showMessageDialog(this, e);
}

内容的提问来源于stack exchange,提问作者Luís Felipe Ambrozin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:18:00