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屬性限制結果集的數據量。
結果集的作用就是定義了數據在頁面中的顯示方式。