Database access
標簽庫中的標簽用來提供在
JSP
頁面中可以與數據庫進行交互的功能,雖然它的存在對于早期純
JSP
開發的應用以及小型的開發有著意義重大的貢獻,但是對于
MVC
模型來說,它卻是違反規范的。因為與數據庫交互的工作本身就屬于業務邏輯層的工作,所以不應該在
JSP
頁面中出現,而是應該在模型層中進行。
對于
Database access
標簽庫本書不作重點介紹,只給出幾個簡單示例讓讀者略微了解它們的功能。
Database access
標簽庫有以下
6
組標簽來進行工作:
<sql:setDataSource>
、
<sql:query>
、
<sql:update>
、
<sql:transaction>
、
<sql:setDataSource>
、
<sql:param>
、
<sql:dateParam>
。
9.6.1?
用于設置數據源的
<sql:setDataSource>
標簽
<sql:setDataSource>
標簽用于設置數據源,下面看一個示例:
<sql:setDataSource
???????? var="dataSrc"
???????? url="jdbc:postgresql://localhost:5432/myDB"
???????? driver="org.postgresql.Driver"
???????? user="admin"
???????? password="1111"/>
該示例定義一個數據源并保存在“
dataSrc
”變量內。
9.6.2?
用于查詢的
<sql:query>
標簽
<sql:query>
標簽用于查詢數據庫,它標簽體內可以是一句查詢
SQL
。下面看一個示例:
<sql:query var="queryResults" dataSource="${dataSrc}">
????? select * from table1
</sql:query>
該示例將返回查詢的結果到變量“
queryResults
”中,保存的結果是
javax.servlet.jsp.jstl.sql.Result
類型的實例。要取得結果集中的數據可以使用
<c:forEach>
循環來進行。下面看一個示例。
<c:forEach var="row" items="${queryResults.rows}">
????? <tr>
???
?????????? <td>${row.userName}</td>
?????????????????? <td>${row.passWord}</td>
????? </tr>
</c:forEach>
“
rows
”是
javax.servlet.jsp.jstl.sql.Result
實例的變量屬性之一,用來表示數據庫表中的“列”集合,循環時,通過“
${row.XXX}
”表達式可以取得每一列的數據,“
XXX
”是表中的列名。
9.6.3?
用于更新的
<sql:update>
標簽
<sql:update>
標簽用于更新數據庫,它的標簽體內可以是一句更新的
SQL
語句。其使用和
<sql:query>
標簽沒有什么不同。
9.6.4?
用于事務處理的
<sql:transaction>
標簽
<sql:transaction>
標簽用于數據庫的事務處理,在該標簽體內可以使用
<sql:update>
標簽和
<sql:query>
標簽,而
<sql:transaction>
標簽的事務管理將作用于它們之上。
<sql:transaction>
標簽對于事務處理定義了
read_committed
、
read_uncommitted
、
repeatable_read
、
serializable4
個隔離級別。
9.6.5?
用于事務處理的
<sql:param>
、
<sql:dateParam>
標簽
這兩個標簽用于向
SQL
語句提供參數,就好像程序中預處理
SQL
的“
?
”一樣。
<sql:param>
標簽傳遞除
java.util.Date
類型以外的所有相融參數,
<sql:dateParam>
標簽則指定必須傳遞
java.util.Date
類型的參數。