2011-12-18 84 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>