Java 在多个用户输入为空时返回的SQL搜索
这是我的难题,我正在尝试实现对我的网站的搜索,我有多个组合框,用户可以选择一个选项并按search,但我确实希望至少返回基于他们选择的存在内容,即如果他们将部分留空,只选择Semmer,那么我的结果集中应该有一些内容,或者,如果他们选择了学期和讲师,而其他人则为空,那么我的结果集中应该有一些东西,不幸的是它不起作用。这是我的问题Java 在多个用户输入为空时返回的SQL搜索,java,mysql,sql,Java,Mysql,Sql,这是我的难题,我正在尝试实现对我的网站的搜索,我有多个组合框,用户可以选择一个选项并按search,但我确实希望至少返回基于他们选择的存在内容,即如果他们将部分留空,只选择Semmer,那么我的结果集中应该有一些内容,或者,如果他们选择了学期和讲师,而其他人则为空,那么我的结果集中应该有一些东西,不幸的是它不起作用。这是我的问题 SELECT * FROM CoursesTaught c WHERE c.Section = :section AND c.CourseNa
SELECT *
FROM CoursesTaught c
WHERE c.Section = :section
AND c.CourseName=:courseName
AND c.Semester=:semeste
AND c.programName=:ProgramName
AND c.CoordinatorName=:coordinatorname
基本上,我想做的是做一个检查,如果是空的,或者是“n/a”,而不是“和”做一个“或”,但我无法理解 根据用户选择动态生成查询。类似的问题以及如何在Java中执行此操作的答案:除非您想要有一个非常难看的SQL查询,否则您需要使用服务器端语言来评估用户选择,并根据用户选择动态地将查询构建为查询字符串 可能最容易使用union运算符:
您可以手动创建查询字符串,即
String query = "SELECT * FROM CoursesTaught c ";
String whereCondition = "";
if(!section.isEmpty)
if(whereCondition.isEmpty)
whereCondition = whereCondition + " AND c.Section = '" + section + "'";
else
whereCondition = "c.Section = '" + section + "'";
if(!courseName .isEmpty)
if(whereCondition.isEmpty)
whereCondition = whereCondition + " AND c.CourseName = '" + courseName + "'";
else
whereCondition = "c.CourseName = '" + courseName + "'";
.
.
.
if(!whereCondition.isEmpty)
query = query + whereCondition;
您可以将query字符串传递给您的executeQuery()方法。使用
Jared\S
建议的方法,您可能会看到最佳性能,但您可以使用常规sql:
SELECT *
FROM CoursesTaught c
WHERE (c.Section = :section or :section is null)
AND (c.CourseName=:courseName or :courseName is null)
AND (c.Semester=:semester or :semester is null)
AND (c.programName=:ProgramName or :programName is null)
AND (c.CoordinatorName=:coordinatorname or :coordinatorName is null)
这假设缺少的参数为null,如果不是简单地更改测试以查找空字符串(假设为参数类型)
这种方法的一个缺点是,如果所有参数都为空,您最终将返回整个表。请澄清“我的结果集中的某些内容”的意思。@Joe我的意思是,至少应该显示匹配的那些内容。如果section='1'和sement=“”(即留空),则它不应返回0,至少应返回所有为1的节。@user2752552您需要对用户的输入进行适当的验证,并基于输入,使用连接准备查询。我的猜测是,您直接使用查询中表单中的ll字段的条件,即使用户将这些字段留空
SELECT *
FROM CoursesTaught c
WHERE (c.Section = :section or :section is null)
AND (c.CourseName=:courseName or :courseName is null)
AND (c.Semester=:semester or :semester is null)
AND (c.programName=:ProgramName or :programName is null)
AND (c.CoordinatorName=:coordinatorname or :coordinatorName is null)