Java JDBC 搜索字段

Java JDBC search field

你好 我有一个关于 Java 和 JDBC 的问题,我已经准备好了 运行。我正在创建一个搜索字段,一切都很好,但是当搜索字段为空时,我得到了,然后按搜索没有任何反应。我想要做的是让它在搜索字段为空时搜索所有内容。

这是我的当前密码 atm

private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    Connection connection = FlatFinder.getConnection();
    Statement selectStmt = null;
    try {
        selectStmt = connection.createStatement();
        String sql = String.format(
                "SELECT * FROM `flats` WHERE Rent BETWEEN %s AND %s AND No_of_rooms BETWEEN %s AND %s",
                priceField.getText(),
                priceFieldMax.getText(),
                roomField.getText(),
                roomFieldMax.getText()
        );
        ResultSet rs = selectStmt.executeQuery(sql);
        resultList.setListData(new String[0]);
        DefaultListModel m = new DefaultListModel();
        while (rs.next()) {
            String text = String.format("%s, %d, %s, %s",
                    rs.getString("Location"),
                    rs.getInt("No_of_rooms"),
                    rs.getInt("Rent"),
                    rs.getString("Owner")
            );
            m.addElement(text);
        }
        resultList.setModel(m);
    } catch (SQLException ex) {
        Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
    }
} 

你有什么想法吗?谢谢!

最简单的方法是用实际表示相应字段的无穷大和负无穷大的值替换空输入字符串。

例如,对于 No_of_rooms,您可以使用“0”和“1000”之类的东西,对于租金,您可以使用“0”和一些非常大的数字。

因为当搜索字段为空时,您的 SQL 语句将像

SELECT * FROM flats WHERE Rent BETWEEN AND AND No_of_rooms BETWEEN AND

您可以 运行 直接在 SQL 服务器上的语句来查看 returned 是什么。

如果你想return一切,只需用语句查询(所以你必须检查条件)

SELECT * FROM flats

更新

处理空字段的一个非常简单的例子

String statement = "SELECT * FROM flats";
if (priceField.getText() != null) {
    statement = statement.concat("WHERE Rent BETWEEN ").concat(priceField.getText()).concat(" AND");
} else {
    statement = statement.concat("WHERE Rent BETWEEN 0 AND");
}
...
and so on

即允许用户输入空字符串。然后,在您的代码中执行如下操作:

highPrice = priceField.getText()
  If (highPrice == null)
      highPrice = "1000000"

  // then do the same with the low price 
  // bound (setting it to zero if the corresponding 
  // field is null

  // the construct your query with BOTH price limits
  // so you will change your code such that it will
  // ALWAYS include an upper and lower limit

希望对您有所帮助。