Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 基于用户输入的多条件搜索_Java_Design Patterns - Fatal编程技术网

Java 基于用户输入的多条件搜索

Java 基于用户输入的多条件搜索,java,design-patterns,Java,Design Patterns,我目前正在从事一个小项目,该项目涉及使用JDBC连接到一个小型MySQL数据库。它是一个小应用程序,有多个JTextFields和一些jcombox,可用于向数据库添加新用户、更新用户、删除用户和搜索用户 当用户按下“查找”按钮时,应该能够运行搜索,并查看用户填写的字段,然后根据这些字段构建查询。例如,用户根据名字和姓氏搜索某人: String query = SELECT * FROM members WHERE firstName = ... and Surname = ... 当程序检测

我目前正在从事一个小项目,该项目涉及使用JDBC连接到一个小型MySQL数据库。它是一个小应用程序,有多个JTextFields和一些jcombox,可用于向数据库添加新用户、更新用户、删除用户和搜索用户

当用户按下“查找”按钮时,应该能够运行搜索,并查看用户填写的字段,然后根据这些字段构建查询。例如,用户根据名字和姓氏搜索某人:

String query = SELECT * FROM members WHERE firstName = ... and Surname = ...
当程序检测到用户已经用要搜索的数据填写了这些字段时,firstName和姓氏字段被追加

我的问题是,我正试图找到一种有效的方法,能够搜索出多个条件,而不会以反模式箭头结束。我不希望我的代码看起来像:

if( firstName.getText().length() > 0 )
{
  do_something();

   if( lastName.getText().length() > 0 )
   {
     do_something();

     if( email.getText().length() > 0 )
     {
         do_something();
     }
   }
}
等等…但到目前为止,这是我能想到的唯一方法,这将是可怕的,因为搜索条件的可能组合。我在考虑也许做一个开关,这可能会有帮助,但我不知道什么基地关闭开关

任何帮助都将不胜感激

如果您使用java.awt.panel,您可以尝试以下方法

for(Component component : myPanel.getComponents()) {
  if(component instanceof JTextField) {
    JTextField textField = (JTextField) component;   
    buildYourSearchQuery(textField.getText());
  }
}

为什么需要嵌套“if”语句?您可以简单地重复调用appendtoquerystring,并在其中检查长度。对于一个甚至不存在该方法的方法,我应该更改它。第二,为什么它们不需要嵌套呢?您是否还需要进行测试以查看用户是否填写了字段并进行了追加?它们不应该嵌套。根据上面的代码,如果用户没有给出名字,那么您将忽略他提供的姓氏和电子邮件。