2011-12-18 82 views
0

所以我想创建一个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 

回答

1

,你会想做什么(如果你使用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从用户的输入。

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

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>