gpt4 book ai didi

java - 带有 Java 的动态 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 00:33:36 25 4
gpt4 key购买 nike

我正在编写一个从数据库中获取记录的程序。我想创建一个基于 3 个变量(studentID、firstName 和/或 lastname)的动态查询。这是我返回记录的 Java 代码:

result = statement.executeQuery("SELECT * FROM student "
+ "WHERE (studentID = "
+ getStudentId() + " AND " + getStudentId() + " <> 0)"
+ " OR (firstName = '"
+ getFirstName() + "' AND '" + getFirstName() + "' IS NOT NULL)"
+ " OR (lastName = '"
+ getLastName() + "' AND '" + getLastName() + "' IS NOT NULL)");

我希望搜索能够根据存在的变量返回从模糊到具体的结果。目前,如果 studentID 是唯一提供的字段,它会返回该单个记录,或者如果 studentID 不存在但 firstName 存在,它会按 firstName 返回所有记录(如果只有变量存在,则 lastName 相同)。不起作用的是,如果我提供 firstName 和 lastName,它会返回所有带有 firstName 的记录,无论记录的姓氏如何,以及所有带有 lastName 的记录,无论名字是什么。示例 firstName = "Bill"和 lastName = "Jackson":

1  Bill Hader
2 Steve Jackson
3 Bill Jackson
4 Bill Stewart
5 Denise Jackson
6 Wendy Jackson
7 Bill Matthews

我想弄清楚的是,如果我提供特定条件(例如 firstName 和 lastName),如何获取包含指定的名字和姓氏的特定记录。

最佳答案

A) 这应该可以解决问题:

String query = "SELECT * FROM student WHERE (studentID=? OR ?=0) 
AND (firstName=? OR ? IS NULL)
AND (lastName =? OR ? IS NULL)";
ps.setInt(1,getStudentID());
ps.setString(2,getFirstName());
ps.setString(3,getFirstName());
result ps.executeQuery();

请注意,逻辑与您发布的内容相反。在您的代码中,如果 studentId0firstName 为 null,则您有:

(studentID=0 AND 0<>0) OR (firstName='null' OR null IS NOT NULL)

这是 false。相反,您需要指定

(studentID=0 OR 0=0) AND (firstName='null' OR null IS NULL)

B) 如果你想要 Java 中的条件逻辑:

String query = "SELECT * FROM student WHERE (";
if (getStudentId()!=0) query+="studentID=? AND";
if (getFirstName()!=null) query+="firstName=? AND";
if (getLastName ()!=null) query+="lastName=? AND";
query+=" 1=1)";
PreparedStatement ps = connection.prepare(query);
if (getStudentId()!=0) ps.setInt(1,getStudentID());
if (getFirstName()!=null) ps.setString(2,getFirstName());
if (getLastName ()!=null) ps.setString(3,getFirstName());
result ps.executeQuery();

关于java - 带有 Java 的动态 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15384421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com