亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Jakarta Project: DBTags標(biāo)簽庫(kù)(Pre Beta)

2019-11-18 14:17:38
字體:
供稿:網(wǎng)友

  概述
DBTags 自定義標(biāo)簽庫(kù)用于讀寫SQL數(shù)據(jù)庫(kù)。

需要的條件
jsp 需求

這個(gè)需要一個(gè)支持JSP規(guī)范1.2版本以上的servlet引擎。

雖然它也可以工作于某些如tomcat這樣的JSP 1.1 版引擎,但是不能工作在如Weblogic 這樣的引擎上。它是根據(jù)JSP 1.2 規(guī)范設(shè)計(jì)的,需要<jsp:getPRoperty ... /> 標(biāo)簽:

jsp:setProperty 和 jsp:getProperty 中的name屬性的值是通過pageContext 對(duì)象的findAttribute()方法得到的對(duì)象.
JSP 1.1 規(guī)范不要求這個(gè)行為而tomcat碰巧支持而Weblogic 不支持。也有相當(dāng)直接的方法為Weblogic 的用戶寫一個(gè)自定義標(biāo)簽效仿這個(gè)行為。已經(jīng)有現(xiàn)成的范例可以從 這里得到。

DBTags 需求

DBTags 庫(kù)支持?jǐn)?shù)據(jù)源,而這不是java 2 標(biāo)準(zhǔn)版的一部分。為了能使用數(shù)據(jù)庫(kù),要么使用J2EE,或者下載JDBC 2.0 Optional API 。

配置
使用下面步驟使你的web應(yīng)用可以使用這個(gè)標(biāo)簽庫(kù):

拷貝標(biāo)簽庫(kù)的描述文件dbtags.tld 到你的web應(yīng)用的 /WEB-INF 子目錄下
拷貝標(biāo)簽庫(kù)的 JAR 文件到應(yīng)用的 /WEB-INF/lib 子目錄下。
在/WEB-INF/web.xml 下增加如下內(nèi)容::
<taglib>
<taglib-uri>http://jakarta.apache.org/taglibs/dbtags</taglib-uri>
<taglib-location>/WEB-INF/dbtags.tld</taglib-location>
</taglib>

在你的JSP 頁面中使用這個(gè)標(biāo)簽庫(kù),在每頁的頂部直接加上如下內(nèi)容:

<%@標(biāo)簽lib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

"sql" 是你希望使用的標(biāo)簽前綴,你可以將它改為你喜歡使用的值。

文檔
簡(jiǎn)單使用范例
下面是一個(gè)打印表中的書名的JSP頁面源文件:

<%@標(biāo)簽lib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>
<%-- open a database connection --%>
<sql:connection id="conn1">
<sql:url>jdbc:MySQL://localhost/test</sql:url>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
</sql:connection>
<%-- open a database query --%>
<table>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- loop through the rows of your query --%>
<sql:resultSet id="rset2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/>
<sql:wasNull>[no description]</sql:wasNull></td>
</tr>
</sql:resultSet>
</sql:statement>
</table>
<%-- close a database connection --%>
<sql:closeConnection conn="conn1"/>
標(biāo)簽具體介紹
下面是DBTags標(biāo)簽庫(kù)的總體描述,標(biāo)簽的某些細(xì)節(jié),例如connection, statement, resultSet, 和 preparedStatement 標(biāo)簽的所有可能的屬性,在這里沒有討論。 Tag Reference 列出了所有的細(xì)節(jié)。

Connection標(biāo)簽
打開連接

有三種方式打開一個(gè)數(shù)據(jù)庫(kù)連接:

1. 使用數(shù)據(jù)庫(kù) URL

connection標(biāo)簽可以接受一個(gè)數(shù)據(jù)庫(kù)URL通過Driver Manager獲得一個(gè)Connection:

<%-- open a database connection --%>
<sql:connection id="conn1">
<%-- required --%>
<sql:url>jdbc:mysql://localhost/test</sql:url>
<%-- optional --%>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:passWord>notVerySecure</sql:password>
</sql:connection>
"id"屬性是必須的。在結(jié)束標(biāo)簽后,一個(gè)java.sql.Connection 對(duì)象被加為一個(gè)pageContext屬性,可以被包括statement, preparedStatement, 和 closeConnection的其它的標(biāo)簽使用。

不在標(biāo)簽體內(nèi)包含數(shù)據(jù)庫(kù)URL, 驅(qū)動(dòng)器名,用戶id,或者口令,你可以使用可選屬性"initParameter":

<%-- store your connection info in the web.xml file --%>
<sql:connection id="conn1">
<sql:url initParameter="dbURL"/>
<sql:driver initParameter="mysqlDriver"/>
<sql:userId initParameter="dbUserId"/>
<sql:password initParameter="dbPassword"/>
</sql:connection>
2. 使用數(shù)據(jù)源

connection也可以接受一個(gè)指向Servlet屬性的javax.sql.DataSource對(duì)象的引用。(這個(gè)屬性是通過PageContext的findAttribute()方法得到的。):

<%-- open a database connection --%>
<sql:connection id="conn1" dataSource="ds1">
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:password>notVerySecure</sql:password>
</sql:connection>
3. 使用JNDI命名的JDBC數(shù)據(jù)源

Connection也可以接受一個(gè)使用JNDI命名的JDBC數(shù)據(jù)源。

<%-- open a database connection --%>
<sql:connection id="conn1" jndiName="java:/comp/jdbc/test"/>
關(guān)閉連接

將一個(gè)connection的引用傳遞到"closeConnection" 標(biāo)簽關(guān)閉一個(gè)連接:

<%-- 除非你使用自己的連接池,否則總應(yīng)該關(guān)閉連接 --%>
<sql:closeConnection conn="conn1"/>
Statement標(biāo)簽
"Statements"是向數(shù)據(jù)庫(kù)提交查詢的一種方法。(另一個(gè)是使用 "preparedStatement"。) 基于statement查詢的語法對(duì)任何知道SQL的人都是不生疏的。為了查詢數(shù)據(jù)庫(kù),打開一個(gè)"statement"標(biāo)簽,傳遞給它一個(gè)sql "query", 然后要么對(duì)inserts, updates, 和 deletes "execute"申明,或者調(diào)用resultSet 標(biāo)簽在一個(gè)select申明的結(jié)果上循環(huán)執(zhí)行。下面是一個(gè)簡(jiǎn)單的insert:

<%-- 向數(shù)據(jù)庫(kù)插入一行 --%>
<sql:statement id="stmt1" conn="conn1">
<%-- 設(shè)置SQL查詢 --%>
<sql:query>
insert into test_books (id, name)
values (3, ´<sql:escapeSql><%=request.getParameter("book_title")%></sql:escapeSql>´)
</sql:query>
<%-- 執(zhí)行查詢 --%>
<sql:execute/>
</sql:statement>
轉(zhuǎn)義SQL

"escapeSql"標(biāo)簽用在一個(gè)SQL查詢里面轉(zhuǎn)義輸入的值里面可能的單引號(hào)。

錯(cuò)誤處理

缺省情況下,SQL查詢的執(zhí)行導(dǎo)致的錯(cuò)誤(例如主鍵violations(違例),殘缺的SQL申明)將導(dǎo)致JSP頁面的失敗,你可以選擇性的設(shè)置"execute"標(biāo)簽的"ignoreErrors"屬性為"true",這將使SQL錯(cuò)誤打印到標(biāo)準(zhǔn)輸出而不會(huì)終止頁面:

<sql:statement id="stmt1" conn="conn1">
<%-- 這個(gè)SQL查詢是殘缺的 --%>
<sql:query>delete * from test_books</sql:query>
<%-- 查詢將失敗,但是頁面會(huì)繼續(xù) --%>
<sql:execute ignoreErrors="true"/>
</sql:statement>
空白處理

所有的statement和preparedStatement自動(dòng)的去除空白。

PreparedStatement標(biāo)簽
"Prepared statements"是產(chǎn)生SQL查詢的比較高級(jí)的形式。它不是直接將值插入SQL申明中,而是在需要設(shè)置值得地方放入一個(gè)´?´符號(hào),然后使用一組獨(dú)立的標(biāo)簽實(shí)際設(shè)置那些值。下面是statement中使用的范例的preparedstatement版本:

<%-- 向數(shù)據(jù)庫(kù)插入一行 --%>
<sql:preparedStatement id="stmt1" conn="conn1">
<%-- 設(shè)置SQL查詢。注重"name"值上缺少引號(hào) --%>
<sql:query>
insert into test_books (id, name)
values (?, ?)
</sql:query>
<sql:execute>
<sql:setColumn position="1">3</sql:setColumn>
<sql:setColumn position="2"><%=request.getParameter("book_title")%></sql:setColumn>
</sql:execute>
</sql:preparedStatement>
prepared statements的一個(gè)優(yōu)點(diǎn)就是你不需要在文本上執(zhí)行sql轉(zhuǎn)義。然而,記住標(biāo)準(zhǔn)的statements對(duì)于那些沒有連接池和prepared statements的數(shù)據(jù)庫(kù)和驅(qū)動(dòng)器在性能上更好。

setColumn標(biāo)簽

你可以將prepared statements的setColumn標(biāo)簽放置在execute或者 resultset標(biāo)簽的前面, 或者是execute標(biāo)簽的里面。execute標(biāo)簽永遠(yuǎn)不會(huì)輸出它的內(nèi)容(body),因此將setColumn標(biāo)簽放置在里面可以防止不必要的空白。

ResultSet標(biāo)簽
Resultset是一個(gè)select申明的結(jié)果。resultSet標(biāo)簽自動(dòng)循環(huán),每次一行。使用 "getColumn"標(biāo)簽從每行中提取值然后要么顯示他們,要么將他們存為字符串:

<%--在一個(gè)Html表格里面打印行 --%>
<table>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- 循環(huán)提取查詢結(jié)果中的行 --%>
<sql:resultSet id="rset2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/>
<%-- 假如書沒有說明則打印一個(gè)注釋 --%>
<sql:wasNull>[no description]</sql:wasNull></td>
</tr>
</sql:resultSet>
</sql:statement>
</table>
"wasNull"和"wasNotNull"標(biāo)簽

"wasNull"標(biāo)簽只有在前面的"getColumn"標(biāo)簽碰到一個(gè)數(shù)據(jù)庫(kù)中的空值(null)時(shí)執(zhí)行它的體中的內(nèi)容。你只能在一個(gè)resultset內(nèi)并且"getColumn"標(biāo)簽已經(jīng)被執(zhí)行時(shí)使用"wasNull"標(biāo)簽。"wasNotNull"標(biāo)簽在它前面的getColumn標(biāo)簽沒有產(chǎn)生一個(gè)空值(null)使執(zhí)行它的體中的內(nèi)容。參看Tag參考獲得范例。

"getColumn"標(biāo)簽

getColumn標(biāo)簽執(zhí)行兩個(gè)中的一個(gè)功能。你可以:

直接向JSP輸出列值(缺省行為)

<%-- 向JSP輸出值 --%>
<sql:getColumn position="1"/>
, 或者

將值作為一個(gè)String對(duì)象寫為頁面的一個(gè)屬性,通過"to"屬性。假如你愿意,你也可以為"scope"屬性分配一個(gè)不同于"page"的值。假如數(shù)據(jù)庫(kù)中該列的值為null, getColumn標(biāo)簽 將不會(huì)創(chuàng)建屬性。下面是一個(gè)使用getColumn標(biāo)簽產(chǎn)生一個(gè)整型的請(qǐng)求屬性:

<%-- 注重請(qǐng)求的屬性將是一個(gè)String --%>
<sql:getColumn position="1" to="someId" scope="request"/>
"getNumber"標(biāo)簽

假如你想對(duì)數(shù)字格式有更多的控制,使用getNumber標(biāo)簽。

"format"屬性可以是DecimalFormat構(gòu)造方法可以接受的模式或者是下面的類型: "CURRENCY", "PERCENT" 或者 "NUMBER"。

"locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。例如:


<%-- 格式化數(shù)據(jù)庫(kù)值為英國(guó)貨幣形式 --%>
<sql:getNumber colName="id" format="CURRENCY" locale="en_GB"/>

假如format和locale屬性都沒有設(shè)置,輸出將和getColumn一樣。
time標(biāo)簽

有幾個(gè)標(biāo)簽是設(shè)計(jì)用來顯示時(shí)間相關(guān)的數(shù)據(jù)的: getTime, getTimestamp 和 getDate。

"format"屬性可以是被SimpleDateFormat接受的形式或者是一個(gè)類型: "FULL", "LONG", "MEDIUM" 或 "SHORT"。這個(gè)屬性是可選的。

"locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。

禁止循環(huán)

缺省情況下resultset標(biāo)簽對(duì)ResultSet中的每行循環(huán)執(zhí)行。通過設(shè)置可選屬性"loop"為"false"就可以禁止這個(gè)特性然后手工操作ResultSet對(duì)象或者將它傳遞給另外的自定義標(biāo)簽。

<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- 禁止resultset標(biāo)簽的循環(huán) --%>
<sql:resultSet id="rset2" loop="false">
<%
ResultSet rset = (ResultSet) pageContext.getAttribute("rset2");
// 手工操作
%>
</sql:resultSet>
</sql:statement>
使用RowSets

你也可以用一個(gè)RowSet對(duì)象使用resultSet標(biāo)簽。通過設(shè)置選項(xiàng)"name",resultSet標(biāo)簽將查找一個(gè)ResultSet對(duì)象(包括RowSets)并將它以該名字存儲(chǔ)在page, request, 或者session上下文上。通過設(shè)置可選屬性"scope",你可以指定上下文來包含你的ResultSet/RowSet。注重當(dāng)你從一個(gè)屬性中讀取一個(gè)ResultSet/RowSet,resultSet標(biāo)簽可以不在statement標(biāo)簽內(nèi)。

<%-- 循環(huán)執(zhí)行ResultSet/RowSet的每行,無論它來自何處 --%>
<sql:resultSet id="rset1" name="rsetAtt">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/>
<%-- 假如書沒有說明則打印一個(gè)注釋 --%>
<sql:wasNull>[no description]</sql:wasNull></td>
</tr>
</sql:resultSet>
"wasEmpty"和"wasNotEmpty"標(biāo)簽

"wasEmpty"標(biāo)簽只有在上一個(gè)ResultSet標(biāo)簽從數(shù)據(jù)庫(kù)中得到0行時(shí)執(zhí)行它的體內(nèi)的內(nèi)容。它必須放在一個(gè)resultSet標(biāo)簽后否則將出錯(cuò)。"wasNotEmpty"標(biāo)簽在上一個(gè)ResultSet從數(shù)據(jù)庫(kù)中得到了多于 0 行時(shí)執(zhí)行體內(nèi)的內(nèi)容。參看Tag參考得到使用范例。

"rowCount"標(biāo)簽

"rowCount"標(biāo)簽打印數(shù)據(jù)庫(kù)返回的行數(shù)??梢栽赗esultSet標(biāo)簽內(nèi)使用它提供一個(gè)運(yùn)行計(jì)數(shù),或者在ResultSet標(biāo)簽后面使用打印總數(shù)。參看Tag 參考得到使用范例。在ResultSet前使用該標(biāo)簽將產(chǎn)生一個(gè)錯(cuò)誤。

Tag概要
Connection標(biāo)簽 connection 從DriverManager或者DataSource得到一個(gè)java.sql.Connection對(duì)象。
url 在封閉的connection標(biāo)簽中設(shè)置數(shù)據(jù)庫(kù)URL。
jndiName 在封閉的connection標(biāo)簽中設(shè)置JNDI命名的JDBC數(shù)據(jù)源。
driver 在封閉的connection標(biāo)簽中設(shè)置驅(qū)動(dòng)器類名。
userId 設(shè)置connection標(biāo)簽的用戶名。
password 設(shè)置connection標(biāo)簽的用戶名口令。
closeConnection 關(guān)閉指定的連接。"conn"屬性是該頁上下文上的一個(gè)connection對(duì)象。

單一的Statement標(biāo)簽 statement 創(chuàng)建并執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢。
escapeSql 將標(biāo)簽體中的每個(gè)單引號(hào)替換成一對(duì)單引號(hào)。

Statement/PreparedStatement標(biāo)簽 query 為一個(gè)statement或者preparedStatement標(biāo)簽設(shè)置一個(gè)查詢。
execute 為statement或者preparedStatement標(biāo)簽執(zhí)行一個(gè)insert, update 或者 delete。

單一的PreparedStatement標(biāo)簽 preparedStatement 創(chuàng)建并執(zhí)行一個(gè)記號(hào)化的數(shù)據(jù)庫(kù)查詢。
setColumn 設(shè)置preparedStatement中的一個(gè)字段。將值設(shè)置為標(biāo)簽體內(nèi)的一個(gè)字符串。

ResultSet標(biāo)簽 resultSet 標(biāo)簽resulset執(zhí)行查詢并循環(huán)執(zhí)行封閉的statement或者preparedstatement標(biāo)簽中的結(jié)果。這個(gè)標(biāo)簽體的內(nèi)容在resultset的每行上執(zhí)行??蛇x屬性"loop"(缺省為true)指定是否在每行上執(zhí)行標(biāo)簽體,或者只是簡(jiǎn)單的將ResultSet分配給頁面的一個(gè)用"id"指定的屬性。
wasNull 假如前面的getColumn標(biāo)簽從數(shù)據(jù)庫(kù)得到一個(gè)null值時(shí)執(zhí)行標(biāo)簽體。必須在一個(gè)resultset標(biāo)簽內(nèi)而且前面有一個(gè)getColumn標(biāo)簽,否則將產(chǎn)生一個(gè)錯(cuò)誤。
wasNotNull 假如上一個(gè)getColumn標(biāo)簽從數(shù)據(jù)庫(kù)得到的不是一個(gè)null值執(zhí)行標(biāo)簽體。
getColumn 在封閉的resultset內(nèi)得到字段值,作為一個(gè)字符串。字段索引通過"position"屬性設(shè)置,使用"to"屬性將該值設(shè)置為一個(gè)serlvet屬性而不是一個(gè)標(biāo)簽體。servlet屬性的范圍使用"scope"屬性指定(缺省為page)。
getNumber 和getColumn相似,但是對(duì)數(shù)字格式提供更精確的控制。 "format"屬性可以是DecimalFormat構(gòu)造函數(shù)可以接受的形式或者是一個(gè)類型: "CURRENCY","PERCENT" 或 "NUMBER"。 "locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。 假如format和locale屬性都沒有設(shè)置,輸出將和getColumn一樣。
getTime 和getColumn類似,但是對(duì)java.sql.Time格式提供更精確的控制。 "format"屬性可以是被SimpleDateFormat接受的形式或者是一個(gè)類型: "FULL", "LONG", "MEDIUM" 或 "SHORT"。這個(gè)屬性是可選的。 "locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。 假如format和locale屬性都沒有設(shè)置,輸出將和getColumn一樣。
getTimestamp 和getColumn類似,但是對(duì)java.sql.Timestamp格式提供更精確的控制。 "format"屬性可以是被SimpleDateFormat接受的形式或者是一個(gè)類型: "FULL", "LONG", "MEDIUM" 或 "SHORT"。這個(gè)屬性是可選的。 "locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。 假如format和locale屬性都沒有設(shè)置,輸出將和getColumn一樣。
getDate 和getColumn類似,但是對(duì)java.sql.Date格式提供更精確的控制。 "format"屬性可以是被SimpleDateFormat接受的形式或者是一個(gè)類型: "FULL", "LONG", "MEDIUM" 或 "SHORT"。這個(gè)屬性是可選的。 "locale"屬性可以有一到三個(gè)部分,也就是Locale構(gòu)造方法可以接受的形式: 語言, 國(guó)家 和 變量。它們使用"_"分割。
wasEmpty 上一個(gè)ResultSet標(biāo)簽從數(shù)據(jù)庫(kù)得到0行執(zhí)行標(biāo)簽體。必須在ResultSet標(biāo)簽后使用否則將產(chǎn)生一個(gè)錯(cuò)誤。
wasNotEmpty 上一個(gè)ResultSet標(biāo)簽從數(shù)據(jù)庫(kù)得到多于0行執(zhí)行標(biāo)簽體。必須在ResultSet標(biāo)簽后使用否則將產(chǎn)生一個(gè)錯(cuò)誤。
rowCount "rowCount"標(biāo)簽打印數(shù)據(jù)庫(kù)返回的行數(shù)。可以在ResultSet標(biāo)簽內(nèi)使用它提供一個(gè)運(yùn)行計(jì)數(shù),或者在ResultSet標(biāo)簽后面使用打印總數(shù)。在ResultSet前使用該標(biāo)簽將產(chǎn)生一個(gè)錯(cuò)誤。


Tag 參考
connection Availability: 1.0
Get a java.sql.Connection object from the DriverManager or a DataSource.

Tag Body JSP
Restrictions None
Attributes Name Required Runtime EXPression Evaluation Availability
id yes no 1.0
Name of the resulting Connection attribute.

dataSource no no 1.0
Name of an existing page attribute that contains a DataSource object.

jndiName no no 1.0
Name used to find a datasource via jndi.

Variables Name Scope Availability
id attribute value End of tag to end of page 1.0

Properties Name Get Set Availability
catalog yes yes 1.0
Set the catalog for this connection.

closed yes no 1.0
False if the connection is open, true if it is not.

readOnly yes yes 1.0
True if the connection has read-only permission.

Examples Method 1: using the DriverManager


<%-- open a database connection --%>
<sql:connection id="conn1">
<%-- required --%>
<sql:url>jdbc:mysql://localhost/test</sql:url>
<%-- optional --%>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:password>notVerySecure</sql:password>
</sql:connection>




Method 2: using a DataSource


<%-- open a database connection --%>
<sql:connection id="conn1" dataSource="ds1">
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:password>notVerySecure</sql:password>
</sql:connection>




Method 3: using a jndi named DataSource


<%-- open a database connection --%>
<sql:connection id="conn1" jndiName="java:/comp/jdbc/test"/>




url Availability: 1.0
Sets the database URL of the enclosing connection tag.

Tag Body JSP
Restrictions Use inside a connection tag.
Attributes Name Required Runtime Expression Evaluation Availability
initParameter no no 1.0
Optional attribute, indicating the name of an init parameter

Variables None
Examples


<%-- example 1: using the tag body --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
</sql:connection>
<%-- example 2: using an init parameter --%>
<sql:connection id="conn1">
<sql:url initParameter="dbURL"/>
</sql:connection>




jndiName Availability: 1.0
Sets the JNDI named JDBC DataSource of the enclosing connection tag.

Tag Body JSP
Restrictions Use inside a connection tag.
Attributes Name Required Runtime Expression Evaluation Availability
initParameter no no 1.0
Optional attribute, indicating the name of an init parameter

Variables None
Examples


<%-- example 1: using the tag body --%>
<sql:connection id="conn1">
<sql:jndiName>java:/comp/jdbc/test</sql:jndiName>
</sql:connection>
<%-- example 2: using an init parameter --%>
<sql:connection id="conn1">
<sql:jndiName initParameter="jndiDataSource"/>
</sql:connection>




driver Availability: 1.0
Sets the driver class name for the connection tag.

Tag Body JSP
Restrictions Use inside a connection tag.
Attributes Name Required Runtime Expression Evaluation Availability
initParameter no no 1.0
Optional attribute, indicating the name of an init parameter.

Variables None
Examples


<%-- example 1: using the tag body --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
</sql:connection>
<%-- example 2: using an init parameter --%>
<sql:connection id="conn1">
<sql:url initParameter="dbURL"/>
<sql:driver initParameter="dbDriver"/>
</sql:connection>




userId Availability: 1.0
Sets the user id for the connection tag.

Tag Body JSP
Restrictions Use inside a connection tag.
Attributes Name Required Runtime Expression Evaluation Availability
initParameter no no 1.0
Optional attribute, indicating the name of an init parameter.

Variables None
Examples


<%-- example 1: using the tag body --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
<sql:userId>root</sql:userId>
</sql:connection>
<%-- example 2: using an init parameter --%>
<sql:connection id="conn1">
<sql:url initParameter="dbURL"/>
<sql:userId initParameter="dbUserId"/>
</sql:connection>




password Availability: 1.0
Sets the password for the connection tag.

Tag Body JSP
Restrictions Use inside a connection tag.
Attributes Name Required Runtime Expression Evaluation Availability
initParameter no no 1.0
Optional attribute, indicating the name of an init parameter.

Variables None
Examples


<%-- example 1: using the tag body --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
<sql:userId>root</sql:userId>
<sql:password>notVerySecure</sql:password>
</sql:connection>
<%-- example 2: using an init parameter --%>
<sql:connection id="conn1">
<sql:url initParameter="dbURL"/>
<sql:userId initParameter="dbUserId"/>
<sql:password initParameter="dbPassword"/>
</sql:connection>




closeConnection Availability: 1.0
Close the specified connection. The "conn" attribute is the name of a connection object in the page context.

Tag Body empty
Restrictions None
Attributes Name Required Runtime Expression Evaluation Availability
conn yes no 1.0
Id of the connection you want to close.

Variables None
Examples


<%-- open a database connection --%>
<sql:connection id="conn1">
<sql:url>jdbc:mysql://localhost/test</sql:url>
<sql:userId>root</sql:userId>
<sql:password>notVerySecure</sql:password>
</sql:connection>
<%-- statement tags go here --%>
<sql:closeConnection conn="conn1"/>




statement Availability: 1.0
Create and execute a database query.

Tag Body JSP
Restrictions None
Attributes Name Required Runtime Expression Evaluation Availability
id yes no 1.0
Script variable id for use with standard jsp:getProperty tag.

conn yes no 1.0
id of the connection to use

Variables Name Scope Availability
id attribute value Nested within tag 1.0

Properties Name Get Set Availability
fetchSize yes yes 1.0
the number of rows that should be fetched from the database when more rows are needed

maxRows yes yes 1.0
the maximum number of rows that a ResultSet object can contain (handy!)

queryTimeout yes yes 1.0
the number of seconds the driver will wait for a Statement object to execute

Examples


<%-- insert a row into the database --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
insert into test_books (id, name)
values (3,
´<sql:escapeSql><%= request.getParameter("book_title") %></sql:escapeSql>´)
</sql:query>
<%-- execute the query --%>
<sql:execute/>
</sql:statement>




escapeSql Availability: 1.0
Replaces each single quote in the tag body with a pair of single quotes.

Tag Body JSP
Restrictions Use inside a query tag.
Attributes None
Variables None
Examples


<%-- insert a row into the database --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
insert into test_books (id, name)
values (3,
´<sql:escapeSql><%=request.getParameter("book_title")%></sql:escapeSql>´)
</sql:query>
<%-- execute the query --%>
<sql:execute/>
</sql:statement>




query Availability: 1.0
Set a query for a statement or preparedStatement tag

Tag Body JSP
Restrictions Use inside a statement or preparedStatement tag.
Attributes None
Variables None
Examples


<%-- insert a row into the database --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
insert into test_books (id, name)
values (3, ´<sql:escapeSql><%=request.getParameter("book_title")%></sql:escapeSql>´)
</sql:query>
<%-- execute the query --%>
<sql:execute/>
</sql:statement>




execute Availability: 1.0
Executes an insert, update or delete for a statement or preparedStatement tag

Tag Body JSP
Restrictions Use inside a statement or preparedStatement tag.
Attributes None
Variables None
Examples


<%-- insert a row into the database --%>
<sql:statement id="stmt1" conn="conn1">
<%-- set the SQL query --%>
<sql:query>
insert into test_books (id, name)
values (3, ´<sql:escapeSql><%=request.getParameter("book_title")%></sql:escapeSql>´)
</sql:query>
<%-- execute the query --%>
<sql:execute/>
</sql:statement>




preparedStatement Availability: 1.0
Create and execute a tokenized database query

Tag Body JSP
Restrictions The scipt variable is not available until after the query tag is called.
Attributes Name Required Runtime Expression Evaluation Availability
id yes no 1.0
Script variable id

conn yes no 1.0
id of the connection to use

Variables Name Scope Availability
id attribute value Nested within tag 1.0

Properties Name Get Set Availability
fetchSize yes yes 1.0
the number of rows that should be fetched from the database when more rows are needed

maxRows yes yes 1.0
the maximum number of rows that a ResultSet object can contain (handy!)

queryTimeout yes yes 1.0
the number of seconds the driver will wait for a Statement object to execute

Examples


<%-- insert a row into the database --%>
<sql:preparedStatement id="stmt1" conn="conn1">
<sql:query>
insert into test_books (id, name)
values (?, ?)
</sql:query>
<sql:execute>
<sql:setColumn position="1">3</sql:setColumn>
<sql:setColumn position="2"><%=request.getParameter("book_title")%></sql:setColumn>
</sql:execute>
</sql:preparedStatement>




setColumn Availability: 1.0
Set a field in a preparedStatement. Set the value as a String inside the tag body.

Tag Body JSP
Restrictions Use within the preparedStatement tag
Attributes Name Required Runtime Expression Evaluation Availability
position yes no 1.0
Column position

Variables None
Examples


<%-- use the tag body --%>
<sql:setColumn position="1"><%= someValue %></sql:setColumn>




resultSet Availability: 1.0
JSP tag resulset, executes the query and loops through the results for the enclosing statement or preparedstatement tag. The body of this tag is executed once per row in the resultset. The optional "loop" attribute, which default to true, specifies whether to execute the tag body once per row "true", or to simply assign the ResultSet to the page attribute specified by "id".

Tag Body JSP
Restrictions If a name attribute is not supplied, use within a statement or preparedStatement and after a query. If a name attribute is supplied, there are no restrictions.
Attributes Name Required Runtime Expression Evaluation Availability
id yes no 1.0
Script variable id

loop no no 1.0
True: execute the tag body once per row in the result set, automatically advancing the rows. False: execute the tag body once.

name no no 1.0
Name of an attribute containing a ResultSet object. If you pull a ResultSet object from an attribute, it is not necessary to place this tag inside of a statement.

scope no no 1.0
Scope (page, request, session, or application) to search for the ResultSet attribute indicated in the "name" attribute. If this is not supplied, we use the default findAttribute() behaviour.

Variables Name Scope Availability
id attribute value Nested within tag 1.0

Properties Name Get Set Availability
fetchSize yes yes 1.0
the number of rows that should be fetched from the database when more rows are needed

Examples


<%-- open a database query --%>
<table>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- loop through the rows of your query --%>
<sql:resultSet id="rset2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/>
<sql:wasNull>[no description]</sql:wasNull></td>
</tr>
</sql:resultSet>
</sql:statement>
</table>




wasNull Availability: 1.0
Executes its body if the last getColumn tag received a null value from the database. You must be inside a resultset tag and there must be a previous getColumn tag, or an error will be generated.

Tag Body JSP
Restrictions Must be used following a getColumn tag.
Attributes None
Variables None
Examples


<%-- open a database query --%>
<table>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- loop through the rows of your query --%>
<sql:resultSet id="rset2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/>
<sql:wasNull>[no description]</sql:wasNull></td>
</tr>
</sql:resultSet>
</sql:statement>




wasNotNull Availability: 1.0
Executes its body if the last getColumn tag did not encounter a null value from the database.

Tag Body JSP
Restrictions Must be used following a getColumn tag.
Attributes None
Variables None
Examples


<%-- open a database query --%>
<table>
<sql:statement id="stmt1" conn="conn1">
<sql:query>
select id, name, description from test_books
order by 1
</sql:query>
<%-- loop through the rows of your query --%>
<sql:resultSet id="rset2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3" to="description"/>
<sql:wasNotNull>Description: <%= pageContext.getAttribute("description") %></sql:wasNotNull></td>
</tr>
</sql:resultSet>
</sql:statement>




getColumn Availability: 1.0
Gets the value, as a String, of a coulmn in the enclosing resultset. The column number is set via the "position" attribute. You can optionally set the value, as a String, to a serlvet attribute instead of the tag body with the "to" attribute. The scope of the servlet attribute is specified by the "scope" XML attribute (default = page).

Tag Body empty
Restrictions Use within the resultSet tag
Attributes Name Required Runtime Expression Evaluation Availability
position no no 1.0
Column position

colName no no 1.0
Column name

to no no 1.0
Optionally assign the String to an attribute rather than the JSP output.

scope no no 1.0
Optionally change the scope of the attribute designated in "to" (default = page).

Variables None
Examples


<%-- output to the JSP directly --%>
<sql:getColumn position="1"/>




getNumber Availability: 1.0
Similar to getColumn, but provides more precise control over number formatting. The "format" attribute can be either a pattern as accepted by the DecimalFormat constrUCtor or a style: "CURRENCY", "PERCENT" or "NUMBER". The "locale" attribute can have one to three components as accepted by the Locale constructor: language, country and variant. They are separated by "_". If neither the format nor locale attribute is set, output should be identical to getColumn.

Tag Body empty
Restrictions Use within the resultSet tag
Attributes Name Required Runtime Expression Evaluation Availability
position no no 1.0
Column position

colName no no 1.0
Column name

to no no 1.0
Optionally assign the String to an attribute rather than the JSP output.

scope no no 1.0
Optionally change the scope of the attribute designated in "to" (default = page).

locale no yes 1.0
Format according to a particular locale.

format no yes 1.0
Specify a format for the number.

Variables None
Examples


<%-- format a database value as English currency --%>
<sql:getNumber colName="id" format="CURRENCY" locale="en_GB"/>




getTime Availability: 1.0
Similar to getColumn, but provides more precise control over java.sql.Time formatting. The "format" attribute can be either a pattern as accepted by SimpleDateFormat or a style: "FULL", "LONG", "MEDIUM" or "SHORT". The "locale" attribute can have one to three components as accepted by the Locale constructor: language, country and variant. They are separated by "_". If neither the format nor locale attribute is set, output should be identical to getColumn.

Tag Body empty
Restrictions Use within the resultSet tag
Attributes Name Required Runtime Expression Evaluation Availability
position no no 1.0
Column position

colName no no 1.0
Column name

to no no 1.0
Optionally assign the String to an attribute rather than the JSP output.

scope no no 1.0
Optionally change the scope of the attribute designated in "to" (default = page).

locale no yes 1.0
Format according to a particular locale.

format no yes 1.0
Specify a format for the time.

Variables None
Examples


<sql:getTime colName="time"/>




getTimestamp Availability: 1.0
Similar to getColumn, but provides more precise control over java.sql.Timestamp formatting. The "format" attribute can be either a pattern as accepted by SimpleDateFormat or a style: "FULL", "LONG", "MEDIUM" or "SHORT". The "locale" attribute can have one to three components as accepted by the Locale constructor: language, country and variant. They are separated by "_". If neither the format nor locale attribute is set, output should be identical to getColumn.

Tag Body empty
Restrictions Use within the resultSet tag
Attributes Name Required Runtime Expression Evaluation Availability
position no no 1.0
Column position

colName no no 1.0
Column name

to no no 1.0
Optionally assign the String to an attribute rather than the JSP output.

scope no no 1.0
Optionally change the scope of the attribute designated in "to" (default = page).

locale no yes 1.0
Format according to a particular locale.

format no yes 1.0
Specify a format for the timestamp.

Variables None
Examples


<sql:getTimestamp colName="time"/>




getDate Availability: 1.0
Similar to getColumn, but provides more precise control over java.sql.Date formatting. The "format" attribute can be either a pattern as accepted by SimpleDateFormat or a style: "FULL", "LONG", "MEDIUM" or "SHORT". It is required. The "locale" attribute can have one to three components as accepted by the Locale constructor: language, country and variant. They are separated by "_".

Tag Body empty
Restrictions Use within the resultSet tag
Attributes Name Required Runtime Expression Evaluation Availability
position no no 1.0
Column position

colName no no 1.0
Column name

to no no 1.0
Optionally assign the String to an attribute rather than the JSP output.

scope no no 1.0
Optionally change the scope of the attribute designated in "to" (default = page).

locale no yes 1.0
Format according to a particular locale.

format no yes 1.0
Specify a format for the date.

Variables None
Examples


<sql:getDate colName="time" format="FULL"/>




wasEmpty Availability: 1.0
Executes its body if the last ResultSet tag received 0 rows from the database. You must be after a ResultSet tag, or an error will be generated.

Tag Body JSP
Restrictions Use after a ResultSet tag.
Attributes None
Variables None
Examples


<%-- showing the contents of the table --%>
<table>
<tr><th>id</th><th>name</th><th>description</th></tr>
<sql:preparedStatement id="stmt6" conn="conn1">
<sql:query>
select id, name, description from test_books
</sql:query>
<sql:resultSet id="rset4">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3" to="description"/></td>
</tr>
</sql:resultSet>
<tr>
<td colspan="3">
<%-- show different text, depending on whether or not
any rows were retrieved --%>
<sql:wasEmpty>No rows retrieved.</sql:wasEmpty>
<sql:wasNotEmpty><sql:rowCount/> rows retrieved.</sql:wasNotEmpty>
</td>
</tr>
</sql:preparedStatement>




wasNotEmpty Availability: 1.0
Executes its body if the last ResultSet tag received more than 0 rows from the database. You must be after a ResultSet tag, or an error will be generated.

Tag Body JSP
Restrictions Use after a ResultSet tag.
Attributes None
Variables None
Examples


<%-- showing the contents of the table --%>
<table>
<tr><th>id</th><th>name</th><th>description</th></tr>
<sql:preparedStatement id="stmt6" conn="conn1">
<sql:query>
select id, name, description from test_books
</sql:query>
<sql:resultSet id="rset4">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3" to="description"/></td>
</tr>
</sql:resultSet>
<tr>
<td colspan="3">
<%-- show different text, depending on whether or not
any rows were retrieved --%>
<sql:wasEmpty>No rows retrieved.</sql:wasEmpty>
<sql:wasNotEmpty><sql:rowCount/> rows retrieved.</sql:wasNotEmpty>
</td>
</tr>
</sql:preparedStatement>




rowCount Availability: 1.0
Prints out the number of rows retrieved from the database. It can be used inside a ResultSet tag to provide a running count of rows retreived, or after the ResultSet tag to display the total number. Using the tag before the ResultSet will produce an error.

Tag Body empty
Restrictions Use inside or after a ResultSet tag (not before).
Attributes None
Variables None
Examples


<%-- showing the contents of the table --%>
<table>
<tr><th>id</th><th>name</th><th>description</th></tr>
<sql:preparedStatement id="stmt6" conn="conn1">
<sql:query>
select id, name, description from test_books
</sql:query>
<sql:resultSet id="rset4">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3" to="description"/></td>
</tr>
</sql:resultSet>
<tr>
<td colspan="3">
<%-- show different text, depending on whether or not
any rows were retrieved --%>
<sql:wasEmpty>No rows retrieved.</sql:wasEmpty>
<sql:wasNotEmpty><sql:rowCount/> rows retrieved.</sql:wasNotEmpty>
</td>
</tr>
</sql:preparedStatement>





Examples
See the example application DBTags-examples.war for examples of the usage of the tags from this custom tag library.

Java Docs
Java programmers can view the java class documentation for this tag library as javadocs.

Revision History
Review the complete revision history of this tag library.

Developers´ Notes
Last updated: 08/14/2001 <div id="developers-notes">
On the radar screen
Here´s a list of what´s cooking with DBTags. If you´ve made a suggestion or contributed a patch that you think we´ve missed, send a note to taglibs-user@jakarta.apache.org.

To-do:

Add support for RowSets. (considering several contributions) [Update: Preliminary support has been added, see the history for details]

Under consideration:

ResultSet/RowSet "paging". (Ciot submitted some code to do this, which we plan to review and see if it´s a sufficiently general solution.)

On the back burner:

Connection management. There has been some discussion lately on if/how to terminate connections upon a JSP page error without making the usage too clunky. I think we´re still waiting for that spark of inspiration.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一个人免费观看视频www在线播放| 日本成人福利| 国产精品无码久久久久| 超级砰砰砰97免费观看最新一期| 日本美女一区二区三区视频| 1204国产成人精品视频| 91精品在线视频观看| 国产激情一区二区三区桃花岛亚洲| 国产成人在线播放视频| 天天操天天擦| 亚洲激情视频网站| 男女爱爱网站| 少妇高清精品毛片在线视频| 亚洲视频自拍偷拍| 99久久久免费精品国产一区二区| 噜噜噜在线观看免费视频日韩| 国产精品一区二区在线免费观看| 91精品国产高清一区二区三区蜜臀| 在线亚洲日本| 在线免费观看污| 亚洲一区二区av| 亚洲影院色无极综合| 亚洲伦理中文字幕| 色一情一乱一乱一91av| 顶级嫩模一区二区三区| caoporn国产一区二区| 亚洲天堂一级片| 韩国精品一区二区三区六区色诱| 久久免费黄色网址| 精品偷拍各种wc美女嘘嘘| 永久免费在线观看视频| 欧美午夜精品电影| av网站观看| 正在播放亚洲1区| 成人无遮挡免费网站视频在线观看| 国产理论电影在线| 久精品国产欧美| 免费视频久久久| 91福利在线尤物| fpee性欧美| 色视频一区二区三区| 亚洲的天堂在线中文字幕| 国产精品视频一区二区久久| 老妇喷水一区二区三区| 成人av三级| 国产亚洲成av人片在线观黄桃| 亚洲国产999| 九色porny丨首页在线| 欧美日韩一区二区三区免费| 日本少妇性高潮| dy888亚洲精品一区二区三区| 亚洲免费av网| 亚洲深夜福利网站| 欧美中文字幕亚洲一区二区va在线| 先锋资源中文字幕| 亚洲大香人伊一本线| 又黄又爽无遮挡| 色婷婷.com| 97久久综合区小说区图片区| 亚洲全黄一级网站| 国产偷国产偷精品高清尤物| 国产女人爽到高潮a毛片| 国产成人免费9x9x人网站视频| 国产大片中文字幕| 天天综合天天做| 精品成人自拍视频| 在线视频一区二区免费| 黄色三级视频在线| 欧美 亚洲 另类 激情 另类| www.浪潮av.com| 艳妇臀荡乳欲伦亚洲一区| 伊人久久久久久久久久久久久久| 一区二区三区精品99久久| 自拍在线观看| 成人亚洲综合| 免费成人深夜夜行p站| 亚洲经典三级| 国产精品99久久99久久久| 国产精品网站入口| 精品在线视频观看| 伊人精品综合| 翔田千里88av中文字幕| 2023国产一二三区日本精品2022| 亚洲摸下面视频| 精品一区二区影视| 中文精品视频一区二区在线观看| 在线中文字幕不卡| 日本三级久久久| 极品裸体白嫩激情啪啪国产精品| 国产寡妇树林野战在线播放| 久久女同精品一区二区| 国产黄视频网站| 红杏视频成人| 久久久久久久久久久国产精品| 在线观看18视频网站| 男操女免费网站| 91丨国产丨九色丨pron| 亚洲精品久久久中文字幕| www.天天射| 男人日女人视频网站| 天堂久久一区二区三区| 亚洲成人a**址| 日本爱爱爱视频| 91成人国产| 亚洲影院在线| 一本一道久久a久久综合精品| 亚洲成人国产综合| 欧美sss在线视频| 国产一区二区动漫| 国产91精品久久久| 午夜福利一区二区三区| 成人自拍性视频| 亚洲男人网站| 视频在线一区二区三区| 德国极品另类| 久久精品精品电影网| 一区二区三区国产豹纹内裤在线| 午夜精品久久久久久久久久久久久| 久久伊人91精品综合网站| 26uuu另类欧美| 综合日韩在线| 男人透女人免费视频| 日韩成人激情| 神马午夜一区二区| 99久久婷婷国产精品综合| 精品国产乱码久久久久软件| 欧美无乱码久久久免费午夜一区| 国产又爽又黄ai换脸| 色妞在线综合亚洲欧美| 午夜日韩福利| 中文字幕欧美日韩在线| 精品乱人伦小说| 精品人妻一区二区三区四区在线| 欧美在线免费视屏| 亚洲熟妇av一区二区三区| 成人爽a毛片| 鲁大师影院一区二区三区| 国产 国语对白 露脸| 伦理在线一区| av成人毛片| 潘金莲一级淫片aaaaaa播放1| 无码成人精品区在线观看| 四虎影视成人| 91女人视频在线观看| 免费日韩中文字幕| 欧美精品少妇一区二区三区| 99国产欧美另类久久久精品| 伊人网伊人影院| 羞羞在线观看网站| 亚洲精品狠狠操| 极品美女一区二区三区| 一区二区三区 在线观看视| 中文字幕+乱码+中文乱码www| 久热re这里精品视频在线6| 亚洲激情77| 暖暖视频在线免费观看| 日韩三级免费观看| 日韩久久免费电影| 国产在线国偷精品产拍免费yy| 最近2018中文字幕免费在线视频| lutube成人福利在线观看| 欧美高清视频在线高清观看mv色露露十八| 美国黄色小视频| 亚洲人一区二区| 日本学生初尝黑人巨免费视频| 国产mv久久久| 天堂а√在线8种子蜜桃视频| 欧美日韩国产影片| 岛国大片在线播放| 法国空姐在线观看免费| 国产99久久久欧美黑人| 亚洲欧洲综合另类在线| 二区中文字幕| 欧美成人aa大片| 黄网站在线观看永久免费| 中文日本在线观看| 国产精品久久久久久久久久免费看| 国产99久久久久| 欧美视频亚洲色图| 国产精品精品一区二区三区午夜版| 精品人伦一区二区三区| 秋霞午夜鲁丝一区二区| 2022亚洲天堂| 国产精品少妇自拍| 国产精品天干天干在线综合| av大片免费观看| 在线免费不卡电影| 乱妇乱女熟妇熟女网站| 午夜写真片福利电影网| 蜜桃视频在线观看成人| 色综合天天综合网天天狠天天| 国产va免费精品观看精品视频| 日本伊人色综合网| 亚洲欧洲激情在线| 天天操人人干| 超碰cao国产精品一区二区| 竹内纱里奈兽皇系列在线观看| 91在线一区二区| 中文字幕免费高清网站| 你懂的在线观看视频| 亚洲女成人图区| 欧美猛男同性videos| 九九热这里有精品| 91精品在线免费观看| 欧美一级二级三级| 欧美日韩亚洲国产精品| 精品人体无码一区二区三区| 国产高潮失禁喷水爽到抽搐| 精品粉嫩aⅴ一区二区三区四区| 日韩一级av毛片| 一本大道五月香蕉| 日韩精品在线观看网站| 每日更新在线观看av| 99精品视频在线观看免费| 成人手机在线电影| 99成人超碰| 北条麻妃av高潮尖叫在线观看| 欧美free性| 国产资源在线观看| 污污的视频免费观看| 国产视频xxxx| 国产精品中文字幕在线观看| 青青草免费在线| 成人免费网站视频| 久久91亚洲| 不卡的av影片| 一区二区亚洲精品国产| 亚洲美女性生活| 色综合 综合色| 亚洲激情偷拍| 欧美高清在线一区二区| 2021最新国产精品一区| 久久好看免费视频| 亚洲小视频在线播放| 国产专区在线| 日韩国产高清污视频在线观看| 日韩电影毛片| 国产精品二区二区三区| 国产亚洲精品自拍| 亚洲欧美激情在线视频| 国产精品久久人| 亚洲免费中文| 欧美极品在线视频| 18av网站| 国产成人在线视频网站| 不卡一卡2卡3卡4卡精品在| 黄色动漫在线观看| 欧美自拍偷拍网| 久久亚洲人体| 欧美色图色就是色| av电影在线网站| 成人国产免费视频| 91九色视频在线观看| 欧美日韩成人在线观看| 亚洲综合精品久久| 日韩欧美三级电影| 狠狠色综合色区| 亚洲欧美电影一区二区| 18以下岁禁止1000部免费| 农村少妇久久久久久久| 蜜臀av一级做a爰片久久| 九色视频网站入口| 国产欧美短视频| 国产男女裸体做爰爽爽| 黄色av免费播放| 日日夜夜一区二区| 苍井空浴缸大战猛男120分钟| 国产欧美中文字幕| 精品日本一区二区三区在线观看| 日本高清视频精品| 91在线观看免费视频| 公侵犯人妻一区二区三区| 五月天最新网址| 不卡区在线中文字幕| 91av资源网| av在线播放免费| 日本不卡1区2区3区| 亚洲成年人电影在线观看| 欧美成人家庭影院| 久草在线官网| 国产精品2020| 日本精品一区二区三区在线播放视频| 日韩精品一级中文字幕精品视频免费观看| 国产精品拍拍拍| 久久婷婷中文字幕| 亚洲一区二区四区| 国产一区二区三区朝在线观看| 亚洲国产精品久久| 国产电影一区二区三区爱妃记| 日韩mv欧美mv国产网站| 日本91av在线播放| 大香伊人中文字幕精品| 日韩一级片大全| 少妇免费毛片久久久久久久久| 怡红院av亚洲一区二区三区h| 国产日韩欧美精品在线观看| 欧美日韩在线高清| 91精品专区| 免费福利在线| 91精品国产91久久久久久一区二区| 91亚洲国产成人精品一区二区三| 国产精品一区电影| 九九精品视频在线| 可以免费看污视频的网站| 8×8x拔擦拔擦在线视频网站| 国产ts人妖一区二区三区| 亚洲精品99| 日批视频在线看| 午夜免费视频在线国产| 日韩福利视频在线观看| 国产亚洲在线播放| 日韩欧美一区二区久久婷婷| 狠狠狠色丁香婷婷综合久久五月| 国模精品娜娜一二三区| 亚洲欧美激情诱惑| 欧美亚洲第一区| 极品少妇xxxx精品少妇| 日本系列第一页| 少妇极品熟妇人妻无码| 五月婷婷丁香激情| 精品欧美一区二区三区久久久| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩视频一区二区三区| 老女人av在线| 国产女王在线**视频| 精品国产91久久久久久| 国产精品三区在线| 亚洲国产精品影院|