所以我试图创建一个SQL语句,我有一些条件。基本上用户输入(通过JSP中的HTML表单)学期,如果是研究生或本科课程,则会显示该标准中所有课程的列表。
到目前为止我所拥有的是
SELECT course
FROM coursetable
WHERE semester = 'fall'
现在我想补充一点,如果你输入毕业生,那么它会添加
WHERE semester ='fall'
AND grad_level = graduate
但是如果你输入本科生,那么它会添加
WHERE semester ='fall'
AND grad_level = undergraduate
答案 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>