SQL根据条件将变量字符串附加到WHERE子句

时间:2011-12-18 16:25:39

标签: java sql oracle jdbc

所以我试图创建一个SQL语句,我有一些条件。基本上用户输入(通过JSP中的HTML表单)学期,如果是研究生或本科课程,则会显示该标准中所有课程的列表。

到目前为止我所拥有的是

SELECT course
FROM coursetable
WHERE semester = 'fall'

现在我想补充一点,如果你输入毕业生,那么它会添加

WHERE semester ='fall'
AND grad_level = graduate

但是如果你输入本科生,那么它会添加

WHERE semester ='fall'
AND grad_level = undergraduate

3 个答案:

答案 0 :(得分:1)

您要做的事情(如果您使用的是JDBC)将SQL查询设置为使用参数,如下所示:

String strSQL = "SELECT course FROM coursetable WHERE semester = ? AND grad_level = ?";

然后,当您使用Java代码进行调用时,您将添加“semester”和“gradLevel”作为参数。同样,如果您使用JDBC,它看起来像这样:

PreparedStatement pstmt = connection.prepareStatement(strSQL);
pstmt.setString(1, strSemester);
pstmt.setString(2, strGradLevel);

这假设您已将strSemester和strGradLevel设置为来自用户的输入。

答案 1 :(得分:1)

我假设这只是为了练习,因为你真的应该将你的业务逻辑与你的观点分开(即jsp)。 请搜索mvc并选择适合您的框架。 还可以使用prepared statement

要简单地完成工作,你的SQL应该是

SELECT course FROM coursetable WHERE semester = ? AND grad_level = ?

并在预备语句中使用设置参数。

your_preparedStatement.setString(1, semester);
your_preparedStatement.setString(2, level);

如果需要动态添加和删除列,最快使用StringBuilder并追加。 但是有一些框架,例如Squiggle

答案 2 :(得分:1)

您可以使用JSTL条件动态更改查询。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
. . .
<sql:query dataSource="jdbc/example" var="courses">
SELECT course FROM courseTable WHERE semester=?
<sql:param value="${semester}"/>
<c:if test="${not empty param.graduate}">
AND grad_level=?
<sql:param value="${param.graduate}"/>
</c:if>
</sql:query>