SQL将变量字符串附加到WHERE子句,具体取决于条件
问题描述:
所以我想创建一个SQL语句,并且我有一些条件。基本上,用户输入(通过JSP中的HTML表单)学期,如果是研究生或本科课程,则会显示该条件中所有课程的列表。SQL将变量字符串附加到WHERE子句,具体取决于条件
我有什么到目前为止,这是
SELECT course
FROM coursetable
WHERE semester = 'fall'
现在我想补充一点,如果你在毕业输入,则反而会加重
WHERE semester ='fall'
AND grad_level = graduate
,但如果你输入的本科,然后将其将新增
WHERE semester ='fall'
AND grad_level = undergraduate
答
,你会想做什么(如果你使用JDBC)设置你的SQL查询中使用的参数,如:
String strSQL = "SELECT course FROM coursetable WHERE semester = ? AND grad_level = ?";
然后,当您从Java代码进行调用时,您将添加“学期”和“gradLevel”作为参数。同样,如果你正在使用JDBC,它会是这个样子:
PreparedStatement pstmt = connection.prepareStatement(strSQL);
pstmt.setString(1, strSemester);
pstmt.setString(2, strGradLevel);
这是假设你已经设置strSemester和strGradLevel从用户的输入。
答
我假设这只是为了实践,因为你真的应该从你的视图(即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
答
您可以使用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>