Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC搜索字段_Java_Database_Jdbc - Fatal编程技术网

Java JDBC搜索字段

Java JDBC搜索字段,java,database,jdbc,Java,Database,Jdbc,你好 我有一个关于Java和JDBC的问题,我把所有东西都安装好并运行起来了。我正在创建一个搜索字段,一切都很好,但是当搜索字段为空时,我得到了一个搜索字段,我按下了搜索按钮,什么都没有发生。我想做的是让它在搜索字段为空时搜索所有内容 这是我的现行代码 private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {

你好 我有一个关于Java和JDBC的问题,我把所有东西都安装好并运行起来了。我正在创建一个搜索字段,一切都很好,但是当搜索字段为空时,我得到了一个搜索字段,我按下了搜索按钮,什么都没有发生。我想做的是让它在搜索字段为空时搜索所有内容

这是我的现行代码

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);
    }
} 

你有什么想法吗?谢谢

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


例如,对于没有房间的房间,您将使用“0”和类似于“1000”的数字,对于租金,您将使用“0”和一些非常大的数字。

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

SELECT * FROM flats WHERE Rent BETWEEN AND AND No_of_rooms BETWEEN AND
您可以直接在SQL server上运行该语句以查看返回的内容

如果要返回所有内容,只需使用语句进行查询(因此必须检查条件)

更新

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

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

希望能有帮助。

我不太明白,你是什么意思?:)谢谢,也就是说,允许用户输入空字符串。然后,在您的代码中执行以下操作:是的,我知道,但我也希望能够搜索特定的值,如果没有键入任何内容,则搜索所有值:)谢谢,您可以忽略该特定条件。假设rent为空,则SQL将是从someNumber和someNumber之间没有房间的公寓中选择*。或者,如果没有提供下限或上限,只需按照amahfouz提到的做,用下限或上限值替换即可。但问题是我不知道如何为其编写代码,也不知道要修改代码中的内容,感谢您的回答:请参阅更新,了解一个处理空字段的非常简单的示例。因此,您必须处理所有不同的组合。在学习时,请注意,实际上,您永远不会以这种方式附加用户输入,因为这是一个大的安全问题—cue BobbyTables和google“Sql注入”。正确的方法是使用“准备”-参见
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