【问题标题】:Loading entries from MySQL into Java table based on search field基于搜索字段将条目从 MySQL 加载到 Java 表中
【发布时间】:2013-02-02 08:24:40
【问题描述】:

我有一个 MySQL 表,其中已包含条目,并且我已将其连接到我的 Java 程序,因此每当程序运行时它都会显示表值。我基本上是在尝试实现一个搜索字段,用户可以在其中键入任何属性的值,并且与该值匹配的所有条目都将加载到表中。然后用户将能够选择匹配的正确条目,并且他们可以编辑或更新该条目的信息。这对我很有用,尤其是当您的条目具有相同的值时,例如名字、姓氏或邮政编码。

try {
        String sql = "SELECT * FROM donors WHERE donor_id = ?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, txtSearch1.getText());
        rs = ps.executeQuery();
        tblDonors.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    } 

    try {
        String sql = "SELECT * FROM donors WHERE first_name = ?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, txtSearch1.getText());
        rs = ps.executeQuery();
        tblDonors.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

搜索字段只搜索第二个查询,而不是第一个,所以我可以输入一个名称,匹配的名称将加载到表中,但是当我尝试输入一个 ID 号时,没有任何反应。我对此很陌生,但我认为这与我的结果集对象有关?虽然不完全确定。任何帮助都会很棒。

【问题讨论】:

    标签: java mysql search


    【解决方案1】:

    这里发生的情况是第二个结果覆盖了第一个结果。我认为最简单的解决方案是在 where 子句中使用or,如下所示:

    String sql = "SELECT * FROM donors WHERE (donor_id = ?) or (first_name = ?)";
    ps.setString(1, txtSearch1.getText());
    // but of course there are 2 ?'s now, we have to give the value to the second one
    // as well
    ps.setString(2, txtSearch1.getText());
    

    由于占位符在 JDBC 中的工作方式,您必须为每个 ? 提供一个值。

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 2012-10-03
      • 1970-01-01
      • 2018-11-03
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多