JSTL標簽庫 - SQL標簽庫
SQL標簽庫
JSTL提供了與數據庫相關操作的標簽,可以直接從頁面上實現數據庫操作的功能,在開發小型網站是可以很方便的實現數據的讀取和操作。本章將詳細介紹這些標簽的功能和使用方法。
SQL標簽庫從功能上可以劃分為兩類:設置數據源標簽、SQL指令標簽。
引入SQL標簽庫的指令代碼為:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
1 設置數據源
使用<sql:setDataSource>標簽可以實現對數據源的配置。
【語法1】:直接使用已經存在的數據源。
<sql:setDataSource dataSource=”dataSource”[var=”name”] [scope=”page|request|session|application”]/>
【語法2】:使用JDBC方式建立數據庫連接。
<sql:setDataSource driver=”driverClass” url=”jdbcURL” user=”username” password=”pwd” [var=”name”] [scope=”page|request|session|application”]/>
<sql:DataSource>標簽屬性說明
參數名:說明: EL: 類型: 必須: 默認值
dataSource:數據源:是:String、Javax.sql.DataSource: 否:無
driver:使用的JDBC驅動:是:String:否:無
url: 連接數據庫的路徑:是:String:否:無
user:連接數據庫的用戶名:是:String:否:無
password:連接數據庫的密碼:是:String:否:無
var:指定存儲數據源的變量名:否: String:否: 無
scope:指定數據源存儲的JSP范圍:否:String:否:page
提示:是否必須是相對的,比如說如果使用數據源則,driver、url等就不再被使用。如果使用JDBC則要用到driver、url、user、password屬性。
2 SQL操作標簽
JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam> 和<sql:transaction>這5個標簽,通過使用SQL語言操作數據庫,實現增加、刪除、修改等操作。下面將介紹這5個標簽的功能和使用方式。
1.<sql:query>標簽
<sql:query>標簽用來查詢數據。
【語法1】:
<sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”] [dataSource=”dateSource”] [maxRow=”maxRow”] [startRow=”starRow”]/>
【語法2】:
<sql:query var=”name” [scope=”page|request|session|application”] [dataSource=”dateSource”] [maxRow=”maxRow”] [startRow=”starRow”]>
sqlQuery
</sql:query>
<sql:query>標簽屬性說明
參數名:說明:EL: 類型:必須:默認值
sql:查詢數據的SQL語句:是: String: 是:無
dataSource: 數據源對象: 是:String、Javax.sql.DataSoutce:否:無
maxRow:設定最多可以暫存數據的行數:是:String:否:無
startRow: 設定從那一行數據開始:是:String:否:無
var:指定存儲查詢結果的變量名:否:String:是:無
scope:指定結果的作用域: 否: String:否: page
使用<sql:query>必須指定數據源,dataSource是可選的,如果未給定該屬性標簽會在page范圍內查找是否設置過數據源,如果沒有找到將拋出異常。
一般情況下使用<sql:setDateSource>標簽設置一個數據源存儲在session范圍中,當需要數據庫連接時使用dataSource屬性并實現數據庫的操作。
<sql:query>的var屬性是必須的用來存放結果集,如果沒有指定scope范圍則默認為page,即在當前頁面我們可以隨時輸出查詢結果。
maxRows和startRow屬性用來操作結果集,使用SQL語句首先吧數據放入內存中,檢查是否設置了startRow屬性,如果設置了就從starRow指定的那一行開始取maxRows個值,如果沒有設定則從第一行開始取。
結果集參數說明
屬性名:類型:說明
rowCount:int:結果集中的記錄總數,該屬性統計結果集中有效記錄的量,可以使用于大批量數據分頁顯示。
Rows:Java.util.Map:以字段為索引查詢的結果,得到每個字段對應的值。返回的結果為:字段名={字段值···}
rowsByIndex: Object[]:以數字為作索引的查詢結果,常用得到數據庫中數據的方式,從有效行的第一個元素開始遍歷,到最后一個有效行的最后一個元素。
columnNames: String[]: 字段名稱數組,用于得到數據庫中的字段名。
limitedByMaxRows:boolean:是否設置了maxRows屬性來限制查詢記錄的數量,用于判斷是否受到了maxRows的限制。
提示:limitedByMaxRows用來判斷程序是否收到maxRows屬性的限制。并不是說設定了maxRows屬性,得到結果集的 limitedByMaxRows的屬性都為true,當取出的結果集小于maxRows時,則maxRows沒有對結果集起到作用此時也為false。例如可以使用startRow屬性限制結果集的數據量。
結果集的作用就是定義了數據在頁面中的顯示方式。
2.<sql:update>標簽
<sql:update>用來實現操作數據庫如:使用create、update、delete和insert等SQL語句,并返回影響記錄的條數。
【語法1】:SQL語句放在標簽屬性中。
<sql:update sql=”SQL語句” [var=”name”] [scope=”page|request|session|application”] [dateSource=”dateSource”]/>
【語法2】:SQL語句放在標簽體內。
<sql:update [var=”name”] [scope=”page|request|session|application”] [dateSource=”dateSource”]>
SQL語句
</sql:update>
<sql:update>標簽屬性說明
參數名:說明:EL:類型:必須:默認值
sql: 查詢數據的SQL語句:是: String: 是: 無
dataSource: 數據源對象: 是: String、Javax.sql.DataSoutce: 否:無
var:指定存儲查詢結果的變量名:否: String:是:無
scope:指定結果的作用域:否:String:否:page
提示:<sql:update>標簽的屬性同<sql:query>標簽的屬性相比只減少了maxRows和startRow2個屬性。其他參數用法一樣。
使用<sql:update>可以實現數據表的創建、插入數據、更行數據、刪除數據。使用時只須在標簽中放入正確的SQL語句即可,同時要捕獲可能產生的異常。
3.<sql:param>標簽
<sql:param>標簽用于動態的為SQL語句設定參數,同<sql:query>標簽共同使用。可以防止SQL注入作用類似于java.sql.PreparedStatement。
【語法1】:
<sql:param value=”value”/>
【語法2】:
<sql:param>Value</sql:param>
【參數說明】:
value的作用為SQL中的參數賦值。
【使用示例】:
<sql:query var=”result”>
select * from person where 序號=?
<sql:query>
4.<sql:dateParam>標簽
<sql:dataParam>標簽主要用于為SQL標簽填充日期類型的參數值。
【語法】:
<sql:dateParam value=”date”[type=”timestamp|time|date”]/>
【參數說明】:
value屬性:java.util.Date類型的參數。
type屬性:指定填充日期的類型timestamp(全部日期和時間)、time(填充的參數為時間)、date(填充的參數為日期)。
5.<sql:transaction>標簽
<sql:transaction>標簽提供了數據操作的一種安全機制(即事務回滾),當操作數據庫的某條SQL語句發生異常時,取消<sql:transaction>標簽體中的所有操作,恢復原來的狀態,重新對數據庫進行操作。
【語法】:
<sql:transaction [dataSource=”dataSource”] [isolation=”read_committed|read_uncommitted|repeatable|serializable”]>
<sql:query>
<sql:uptade>
</sql:transation>