Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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 对不同的搜索组合使用一条sql语句_Java_Mysql_Sql - Fatal编程技术网

Java 对不同的搜索组合使用一条sql语句

Java 对不同的搜索组合使用一条sql语句,java,mysql,sql,Java,Mysql,Sql,我是SQL新手,我在Java程序中实现了这个搜索方法,它从1到5个文本字段中获取搜索输入,并搜索满足搜索条件的对象 一个表中有4个数据库列,但另一个表中有1个,我可以加入搜索 这只是一个AND搜索,也就是说,若只有名称有输入,那个么搜索具有该名称的对象,但若名称和年龄有输入,那个么对象必须两者都有。我的结论是,这是31个搜索组合,我可以使用If为每个组合创建和查询,但我是否可以创建一个忽略空输入的SQL语句,但如果不是空的,则包含它 范例 要亲自搜索的表 TextField 1名称:John 文

我是SQL新手,我在Java程序中实现了这个搜索方法,它从1到5个文本字段中获取搜索输入,并搜索满足搜索条件的对象

一个表中有4个数据库列,但另一个表中有1个,我可以加入搜索

这只是一个AND搜索,也就是说,若只有名称有输入,那个么搜索具有该名称的对象,但若名称和年龄有输入,那个么对象必须两者都有。我的结论是,这是31个搜索组合,我可以使用If为每个组合创建和查询,但我是否可以创建一个忽略空输入的SQL语句,但如果不是空的,则包含它

范例 要亲自搜索的表

TextField 1名称:John

文本字段2年龄:

TextField 3重量:120

TextField 4头发颜色:绿色


由于输入为空,SQL将忽略select from age,但使用并搜索其他3个条件。

处理参数的一般问题的一个解决方案是使用or。大概是这样的:

where (name = :name or :name is null) and
      (age = :age or :age is null) and
      . . .
您可以将from子句调整为始终联接表-也许使用left join时您的问题不清楚。或者,您可以使用exists子查询


注意:上述构造需要扫描表中的所有行。它不能使用索引。然而,为表编制索引以便在2^n组合上进行快速搜索本身是相当棘手的。为已经解决的问题创建代码毫无意义,因为您需要编写、测试和维护这些代码


QueryDSL允许您使用Java类动态构建查询。因此,您需要为每个输入框添加一个子句。如果需要添加或删除文本框,请在代码中执行相同操作。

它确实需要动态SQL。在普通JDBC中,您需要连接字符串;如果您使用的是ORM,那么一些标签将很容易为您完成。您使用的是普通JDBC还是ORM?我使用的是普通JDBC示例数据,所需的结果将非常有用。你提到了两张桌子,但不清楚它们是什么。您提到了一个对象,但不清楚它指的是什么。这里使用的对象是错误的词,我正在寻找符合搜索标准的ID,即在示例中,我希望获得所有行的唯一personId,这些行的值在列中:名称、年龄和发色。第二张表在这个问题上可能无关紧要。如果我可以忽略空文本字段,但将它们包含在SELECT*…中,并在它们不为空时进行查询,则会有更多信息?