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

首頁 > 數(shù)據(jù)庫 > DB2 > 正文

將XML應(yīng)用程序從DB2 8.x遷移到Viper

2024-09-06 23:58:11
字體:
供稿:網(wǎng)友

簡介

db2 universal database (udb) version 8.x 中的 xml 支持基于 db2 的關(guān)系基礎(chǔ)設(shè)施。在 db2 viper 版本之前,xml 數(shù)據(jù)要么原樣存儲為字符大對象 (clob),要么被分解到關(guān)系表中。

相反,db2 udb version 9.1 具有對 xml 數(shù)據(jù)的真正本機支持。xml 現(xiàn)在被當(dāng)作新的數(shù)據(jù)類型,xml 數(shù)據(jù)存儲在經(jīng)過解析的帶注釋的樹中,獨立于關(guān)系數(shù)據(jù)存儲?;?xml 模式的 xml 索引已經(jīng)引入,同時還引入了對用于查詢和發(fā)布 xml 數(shù)據(jù)的語言 xquery 和 sql/xml 的支持。為了理解這些新的 xml 特性對遷移的重大意義,需要將 db2 8.x 中用于存儲和查詢 xml 數(shù)據(jù)的不同技術(shù)與 db2 udb version 9 中可用的類似的或新的 xml 功能相比較。

本文是關(guān)于將 xml 應(yīng)用程序從 db2 8.x 遷移到 db2 viper 的三篇系列文章中的第一篇。該系列從描述一個基于 java 的存儲過程開始,您可以使用該存儲過程來對 xml 數(shù)據(jù)執(zhí)行子文檔更新。您可以下載更新后的存儲過程的源代碼和 jar 文件,并根據(jù)說明安裝它。

第二篇文章比較 db2 version 8.x 中和 db2 viper 中的 xml 特性。然后簡要討論 db2 viper 中引入的新 xml 特性,并詳細(xì)介紹新 xml 支持對于遷移現(xiàn)有基于 xml 的應(yīng)用程序的重大意義。這篇文章還包括基于 java 的實用工具的源代碼,該工具用于幫助生成遷移數(shù)據(jù)庫對象時所需的腳本。

本系列的最后一篇文章介紹分步示例遷移場景。它包括示例場景的源代碼。

更新存儲過程

對于本機存儲在 db2 中的 xml 文檔,不存在用于執(zhí)行子文檔更新的開箱即用的功能。缺少該功能的原因是,目前還沒有定義 xquery 中更新的標(biāo)準(zhǔn)。

該問題的一種解決方案是,將文檔交給客戶機,修改它,然后再將其保存到數(shù)據(jù)庫中。該方法受到客戶機環(huán)境的 xml 功能的限制,并且還要求專家級的人員編寫基于文檔對象模型 (dom) 的客戶機。

通過創(chuàng)建更新存儲過程,可以更新數(shù)據(jù)庫中的 xml 文檔而無需將其交給客戶機。該存儲過程支持對本機存儲在數(shù)據(jù)庫中的 xml 文檔進行部分更新。

存儲過程允許:

更改目標(biāo) xml 文檔中任何文本或?qū)傩怨?jié)點的值

使用另一個 xml 元素替換 xml 文檔中的元素節(jié)點(及其所有子節(jié)點)

刪除 xml 文檔中的節(jié)點

插入新元素

多次更新源文檔

更新多個源文檔

使用修改的 xml 文檔替換另一個 xml 文檔

將修改的文檔插入新記錄

更新信息可以:

靜態(tài)地嵌入更新調(diào)用中

使用 sql 在運行時動態(tài)地創(chuàng)建

使用算術(shù)表達式基于初始文本或?qū)傩灾颠M行計算

注意:在后臺,更新存儲過程仍然執(zhí)行完整的文檔更新。

 

 

xmlupdate 命令

db2xmlfunctions.xmlupdate (commandxml、querysql、updatesql、errorcode、errormsg)

commandxml —— 該參數(shù)是一個用于封裝更新命令的 xml 字符串。這些命令將應(yīng)用到由 querysql 所選擇的 xml 文檔。

該命令的結(jié)構(gòu)是:

<updates namespaces=""> <update using="" col="" action="" path="">update value</update> </updates>

—— 這是用于包裝所有更新命令元素的根元素。

@namespace —— 該屬性的值應(yīng)該是由分號分隔的 “前綴:名稱空間” 字符串。前綴然后用于在 xml 文檔中導(dǎo)航時使用的任何路徑表達式中。

essential —— 否(僅當(dāng)在任何路徑中使用名稱空間時才需要它)。

即使是默認(rèn)名稱空間也必須用一個前綴進行限定。

—— 該元素定義需要在目標(biāo) xml 文檔上執(zhí)行的每個修改。

occurrence —— 可以定義這些元素中的一個或多個。

每次出現(xiàn)處理文檔的一個修改。

@col —— 該屬性的值應(yīng)該是對應(yīng)于要在 querysql 中修改的列位置的編號。

essential —— 是。

valid value —— 列位置從 1 開始。

@path —— 該屬性的值是目標(biāo) xml 文檔中節(jié)點的 xpath 位置。如果路徑無效,則存儲過程將中止。

essential —— 是。

valid value —— xpath 表達式。

如果要在 xpath 中使用名稱空間,請確保設(shè)置名稱空間屬性。

不能將通配符用于名稱空間。

@using —— 該屬性的惟一有效值是 sql。如果該屬性存在并設(shè)置為 sql,那么 update value( 元素的子節(jié)點)被視為一個 sql 查詢。查詢結(jié)果的第一行中的第一列將用作新的 update value。如果查詢失敗,那么存儲過程將中止。

essential —— 否。

valid value —— sql。

對于 xquery,可以使用關(guān)鍵字 xquery,也可以使用 sql/xml 函數(shù)將 xquery 嵌入 sql。

@action —— 該屬性定義將在 xml 文檔中的目標(biāo)節(jié)點(使用 @path 屬性中定義的 xpath 來定位)上進行的操作。如果操作失敗,那么存儲過程將中止。

essential —— 否。如果未設(shè)置操作,則假定是一個替換操作。

valid value —— 替換、追加、刪除和計算:

replace —— 使用 update value 替換目標(biāo)節(jié)點。

append —— 將 update value 作為子節(jié)點追加到目標(biāo)節(jié)點。

delete —— 刪除目標(biāo)節(jié)點。

compute —— 將 update value 當(dāng)作參數(shù)化的表達式。表達式中的問號 (?) 將由目標(biāo)節(jié)點的現(xiàn)有文本值替換。然后,計算表達式,得到的值將替換目標(biāo)節(jié)點中的現(xiàn)有值。計算出的值的 xpath 只能是葉節(jié)點。

update value —— 這為每個更新命令 (//update/*) 的子節(jié)點。它可以是文本節(jié)點,也可以是元素。

essential —— 否。對于 action=delete,不需要它。

valid value —— 當(dāng) @using 屬性被設(shè)置為 sql 時,子節(jié)點應(yīng)該是文本值。它被當(dāng)作 sql 表達式。當(dāng) @action 屬性被設(shè)置為 compute 時,子節(jié)點應(yīng)該是文本值。它被當(dāng)作參數(shù)化表達式。在所有其他情況下,子節(jié)點都視為要替換的值。

querysql —— 任何用于檢索需要更新的 xml 文檔的有效 sql 選擇語句。

essential —— 是。

valid value —— 只能選擇 xml 文檔。如果選擇了其他列,存儲過程就會中止。

updatesql —— 它表示參數(shù)化的更新 sql。修改的 xml 文檔作為運行時參數(shù)被綁定到更新 sql。它允許將修改的 xml 文檔保存到數(shù)據(jù)庫中的其他 xml 列中。

essential —— 否。如果該參數(shù)為 null,則使用可更新的游標(biāo)來修改所選的列。

重要事項:從命令行處理器 (clp) 執(zhí)行更新存儲過程時,始終需要設(shè)置 updatesql 參數(shù)的值。如果將這個值設(shè)置為 null 或空字符串,clp 會拋出 jcc 異常:column not updatable。當(dāng)您從應(yīng)用程序代碼 (java) 內(nèi)部調(diào)用更新存儲過程時,將發(fā)生此情況(即 updatesql 設(shè)置為 null)。

errorcode —— 值為 -1 指示存儲過程因發(fā)生某種錯誤而中止。如果更新成功,則返回指示已更新的記錄數(shù)的正值。

errormsg —— 錯誤消息,包括 xml 解析器和 jcc 驅(qū)動程序拋出的任何異常。

注意:如果得到 java.lang.outofmemoryerror,應(yīng)該增加 java 堆大?。?

db2 update dbm cfg using java_heap_sz 1024

 

設(shè)置存儲過程

首先需要將更新存儲過程 jar 安裝到 db2 中。這個過程僅需執(zhí)行一次。下一步,對于每個數(shù)據(jù)庫,需要分別注冊存儲過程。

重要事項:如果希望在存儲過程中執(zhí)行 xqueries,那么需要為 db2 設(shè)置 jcc 驅(qū)動程序。確保 db2 在運行,然后從 db2 命令窗口執(zhí)行以下命令:

db2set db2_use_db2jcct2_jroutine=on

設(shè)置更新存儲過程的步驟

通過執(zhí)行以下步驟編譯 java 代碼并創(chuàng)建 db2xmlfunctions.jar 文件。

注意:db2xmlfunctions.jar 還可以從 下載 部分下載。如果您選擇下載該文件,則跳過 第 2 步。

創(chuàng)建目錄 /temp/samples。

將 xmlupdate_code.zip(可以在 下載 部分找到)復(fù)制到 temp 目錄。

將 xmlupdate.java 和 xmlparse.java 文件解壓到 /temp/samples 目錄。

編譯 java 文件并為 udf 創(chuàng)建 jar 文件。

在 microsoft windows 上,打開 db2 命令窗口:

set classpath= .;%db2path%/java/db2java.zip; %db2path%/java/db2jcc.jar; %db2path%/java/db2jcc_license_cisuz.jar; "%db2path%/java/jdk/bin/javac.exe" -d . *.java "%db2path%/java/jdk/bin/jar" cvf db2xmlfunctions.jar com/ibm/db2/xml/functions/*.class

在 aix 上,將 db2path 設(shè)置為 db2 sqllib 目錄:

classpath=$db2path/java/sqlj.zip:$db2path/java/db2java.zip $db2path/java/jdk/bin/javac.exe" -d . *.java $db2path/java/jdk/bin/jar" cvf db2xmlfunctions.jar com/ibm/db2/xml/functions/*.class

注意:上述命令假定使用 sh 或 bash shell。根據(jù)需要更改為 csh、tsh 等。

在 db2 中安裝存儲過程:

db2 -t connect to your_dbname&yuml; call sqlj.install_jar('file:/temp/samples/db2xmlfunctions.jar' , db2xmlfunctions,0);

在數(shù)據(jù)庫中注冊存儲過程:

create procedure db2xmlfunctions.xmlupdate( in commandsql varchar(32000), in querysql varchar(32000), in updatesql varchar(32000), out errorcode integer, out errormsg varchar(32000)) dynamic result sets 0 language java parameter style java no dbinfo fenced null call modifies sql data program type sub external name 'db2xmlfunctions:com.ibm.db2.xml.functions.xmlupdate.update' ; terminate;

刪除存儲過程

如果更改了存儲過程,那么在注冊新版本之前應(yīng)該首先從 db2 卸載它:

drop procedure db2xmlfunctions.xmlupdate(varchar(32000), varchar(32000),varchar(32000),integer, varchar(32000)); call sqlj.remove_jar(db2xmlfunctions);

 

 

xmlupdate 示例

對于 xmlupdate 示例,請執(zhí)行以下步驟:

創(chuàng)建測試表:

create table xmlcustomer(cid integer not null primary key, info xml );

將示例 xml 文檔插入表中:

insert into xmlcustomer (cid, info ) values (1006 , xmlparse ( document ' <customerinfo xmlns=" http://posample.org " cid="1006"> <name>hardeep singh</name> <addr country="united states"> <street>555 bailey ave</street> <city/> <prov-state>ca</prov-state> <pcode-zip> 95141</pcode-zip> </addr> <phone type="">543-4610</phone> </customerinfo>' preserve whitespace ) );

注意:由于更新調(diào)用修改了初始的 xml 文檔,所以您需要為某些查詢而刪除插入的文檔,并重新插入它。

示例查詢

下面是示例查詢:

替換節(jié)點:action=replace。

通過使用復(fù)雜名稱元素替換簡單名稱元素來更新測試文檔:

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="replace" col="1" path="/x:customerinfo/x:name"> <name><fname>hardeep</fname><lname>singh</lname></name> </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

使用 sql 查詢獲取新值以進行更新:

using=sql。 call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update using="sql" action="replace" col="1" path="http://x:customerinfo[@cid=1006]/x:addr/x:pcode-zip/text()"> select cid from xmlcustomer where cid=1006 </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

使用給定表達式來計算值:

action=compute。 call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="compute" col="1" path="/x:customerinfo/x:addr/x:pcode-zip/text()"> (20+?)*32-? </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? &yuml;here cid=1006',?,?);

對目標(biāo) xml 文檔執(zhí)行多個操作:

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update using="sql" action="replace" col="1" path="/x:customerinfo/x:addr/x:pcode-zip/text()"> select cid from xmlcustomer where cid=1006 </update> <update action="compute" col="1" path="/x:customerinfo/x:addr/x:pcode-zip/text()"> (2+?)*10-? </update> <update action="delete" col="1" path="/x:customerinfo/x:name"/> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

更新文檔時對其進行驗證。

為此,您需要創(chuàng)建模式并在 xsr 中注冊。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update using="sql" action="replace" col="1" path="/x:customerinfo/x:addr/x:pcode-zip/text()"> select cid from xmlcustomer where cid=1006 </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=xmlvalidate( ? according to xmlschema id test.schema2) where cid=1006',?,?)

使用 xmlupdate 替換屬性值。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="replace" col="1" path="/x:customerinfo/x:phone/@type"> tie line </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

使用 xmlupdate 替換文本值。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="replace" col="1" path="/x:customerinfo/x:addr/x:city/text()"> san jose </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

 

 

重要事項:必須在路徑的末尾指定 text()。這一步確保即使是空元素(即不具有現(xiàn)有文本節(jié)點的元素)也進行更新。如果省略了 text() 且不存在要替換的現(xiàn)有文本值,更新命令就會失敗。

使用 xmlupdate 追加子節(jié)點。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="append" col="1" path="/x:customerinfo/x:addr"> <county>santa clara</county> </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

注意:新節(jié)點 不在任何名稱空間中。

使用 xmlupdate 將更新的 xml 插入新行。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="replace" col="1" path="/x:customerinfo/x:name"> <name>marja soininen</name> </update> <update action="replace" col="1" path="/x:customerinfo/@cid">1008</update> </updates>', 'select info from xmlcustomer where cid=1006', 'insert into xmlcustomer (cid, info ) values (1008, cast( ? as xml))',?,?);

使用 xmlupdate 刪除節(jié)點。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="delete" col="1" path="/x:customerinfo/x:name"/> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

當(dāng)更新元素中沒有設(shè)置 @action 時,就默認(rèn)執(zhí)行替換操作。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update col="1" path="http://x:customerinfo[@cid=1006]/x:phone"> <phone><areacode>910</areacode></phone> </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

以下示例展示帶有無效名稱空間或帶有沒有前綴的名稱空間的 xmlupdate:

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://my.org"> <update col="1" path="http://x:customerinfo[@cid=1006]/x:phone"> <phone><areacode>910</areacode></phone> </update> </updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

該查詢返回設(shè)置為 1 的錯誤,以及如下錯誤消息:

<error type='abort' action='replace' msg='cannot find path //x:customerinfo[@cid=1006]/x:phone) in the xmldocument'>

以下示例展示的 xmlupdate 在更新元素中有一個遺漏的路徑:

call db2xmlfunctions.xmlupdate ( '<updates > <update col="1"> (20+?)*32-? </update></updates>', 'select info from xmlcustomer where cid=1006', 'update xmlcustomer set info=? where cid=1006',?,?);

該查詢返回設(shè)置為 1 的錯誤,以及如下錯誤消息:

<error type='abort' action='null' msg='path not defined'></error>

使用相同名稱空間中的新節(jié)點替換某個節(jié)點。

call db2xmlfunctions.xmlupdate ( '<updates namespaces="x:http://posample.org"> <update action="replace" col="1" path="/x:customerinfo/x:name"> <name xmlns="http://posample.org"> <fname>marja</fname><lname>soininen</lname> </name> </update> </updates>', 'select info from xmlcustomer where cid=1008', 'insert into xmlcustomer (cid, info ) values (1007, cast( ? as xml))',?,?);

結(jié)束語

本文描述的更新存儲過程允許對本機存儲在數(shù)據(jù)庫中的 xml 文檔進行部分更新。下一篇文章將深度挖掘和具體研究新的 xml 支持對遷移現(xiàn)有基于 xml 的應(yīng)用程序的重大意義。

致謝

感謝 matthias nicola、bert van der linden、irina kogan、annie wang、ying chen 和 xiaoli du 在撰寫這篇文章時給予的幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品99久久99久久久| 亚洲网友自拍偷拍| 无码 制服 丝袜 国产 另类| 成年人黄视频网站| 日韩中文字幕二区| 夜色77av精品影院| 色偷偷福利视频| 91社区国产高清| 日夜操在线视频| 亚洲精品日韩综合观看成人91| 午夜精品久久久久久久蜜桃| 91精品婷婷国产综合久久蝌蚪| 高清一区在线观看| 欧美美女一区| 日本高清中文字幕| 国产精品av一区二区三区| 精品福利电影| 欧美一区二区三区成人片在线| 懂色av一区二区夜夜嗨| 欧美一级大片在线免费观看| 国产999久久久| 日韩少妇内射免费播放| 一区二区在线观看视频在线观看| 亚洲欧洲一区二区天堂久久| 国产精品久久久久久久久果冻传媒| 亚洲欧美日韩精品久久亚洲区| 国产亚洲欧美色| 精品推荐国产麻豆剧传媒| 一区二区三区中文在线观看| 最近2019年日本中文免费字幕| 久久精品国产久精国产爱| 亚洲av无码乱码在线观看性色| 午夜天堂精品久久久久| 免费高清视频精品| 伊人精品在线观看| 欧洲免费av| 成人黄色大片在线免费观看| 制服丝袜影音| 综合久久国产九一剧情麻豆| 成人综合av| 精品国产第一国产综合精品| www欧美激情| 色乱码一区二区三区熟女| 精品福利久久久| 国模吧无码一区二区三区| 国偷自拍第113页| 岛国av在线一区| 日韩一二区视频| 美女在线观看视频一区二区| 中国毛片在线观看| 国产精品99精品无码视亚| 国产不卡一区| 黄页网站大全在线观看| 97视频在线观看免费| 筱崎爱全乳无删减在线观看| 91久久精品国产91久久性色tv| 欧美大片免费观看网址| 亚洲色图欧洲色图| 在线观看国产麻豆| 天堂中文在线视频| 波兰性xxxxx极品hd| 亚洲电影一级黄| 久久亚洲精品伦理| 超碰国产精品久久国产精品99| 国产福利91精品一区二区三区| av黄色在线网站| 91精品国产乱码久久久| www.激情.com| 粉嫩久久99精品久久久久久夜| 91高清视频免费| 精品无码m3u8在线观看| 91桃色在线观看| 99麻豆久久久国产精品免费优播| av手机在线播放| 老太脱裤子让老头玩xxxxx| 亚洲人成伊人成综合图片| 亚洲熟妇无码乱子av电影| 久久久久久久久福利| 久久99国产综合精品免费| 国产亚洲精品久久久久久| 亚洲国产精品成人一区二区| 91精品婷婷国产综合久久竹菊| 77导航福利在线| 性感av在线播放| 久国产精品韩国三级视频| 欧美久久婷婷综合色| 欧美人与拘性视交免费看| www.黄色一片| 亚洲线精品一区二区三区八戒| 在线黄色免费看| 日韩少妇一区二区| 亚洲人成无码www久久久| 青青草成人免费视频| 国产福利在线| 麻豆传媒视频在线| 西西人体44www大胆无码| 国产精品视频久久久久久| www免费网站在线观看| 日本精品一区在线| 亚洲不卡中文字幕无码| 亚洲熟妇av乱码在线观看| 黄色激情在线观看| 午夜激情福利视频| 免费观看美女裸体网站| 国产精品入口麻豆免费| 国产盗摄女厕一区二区三区| 高清色视频在线观看| 日韩一区二区三区高清在线观看| 成人一区在线看| 天堂av资源在线| 九九热在线精品视频| 亚洲免费观看在线视频| 97久久精品午夜一区二区| 五月激情六月婷婷| 亚洲高清黄色| 李丽珍裸体午夜理伦片| av免费在线观| 日韩精品dvd| 天干天干啦夜天干天2019| 男人晚上看的视频| 久久视频在线| 人妻精品久久久久中文| 国产成人午夜片在线观看高清观看| 亚洲欧美在线精品| www.男人的天堂| 亚洲激情二区| 好吊操这里只有精品| 116极品美女视频在线观看| 久久久久久无码午夜精品直播| 亚洲综合色激情五月| 亚洲黄在线观看| jizz亚洲女人高潮大叫| 四虎成人精品永久免费av九九| 黄色av网站在线| 黑人粗进入欧美aaaaa| 极品白嫩的小少妇| 日本一区二区三区四区视频| 亚洲午夜视频在线| www.夜夜操.com| 精品视频资源站| 免费在线观看一级毛片| 一片黄亚洲嫩模| 日本色综合中文字幕| 一区二区三区日韩在线| 99一区二区三区| 最新在线观看av网站| 青春草在线视频免费观看| 伊人色在线观看| 一级黄色片日本| 国产精品中文久久久久久久| 九九九免费视频| 国产精品久久久久7777| 精品三级久久久久久久电影聊斋| 影音先锋中文字幕第一页| 国内免费久久久久久久久久久| 成人亚洲欧美日韩在线观看| 欧美成人高清视频| 欧美日韩精品在线一区| 成人啪啪18免费游戏链接| 国产欧美精品区一区二区三区| 亚洲欧美在线aaa| 99re在线精品| 国产剧情在线观看一区| 国产亚洲一卡2卡3卡4卡新区| 激情综合网激情| www.4hu95.com四虎| 好吊的妞视频这里都有| 亚洲国产综合久久精品小蝴蝶| 可以免费看污视频的网站在线| 日韩中文字幕无砖| 8×8x拔擦拔擦在线视频网站| 少妇精品视频在线观看| 首页综合国产亚洲丝袜| 国产精品免费入口| 99爱在线视频| 国产欧美 在线欧美| 91蜜桃网址入口| 色欲综合视频天天天| 一级黄色片日本| 91麻豆精品国产91久久久更新资源速度超快| 日本免费一区二区三区最新| 国产乱淫av片免费| 福利91精品一区二区三区| 在线看的网站你懂| 久久久精品tv| 亚洲专区区免费| 欧美噜噜久久久xxx| 国产成人高清激情视频在线观看| 欧美丝袜自拍制服另类| 国产亚洲福利社区一区| 国内成人精品2018免费看| 精人妻无码一区二区三区| 国产精品人人人人| 九九热hot精品视频在线播放| 午夜影院在线视频| 人妻无码一区二区三区免费| 草色在线视频| 蜜臀精品一区二区三区| 一区二区三区在线观看视频| 成人亚洲国产| 精品福利电影| 国内外成人免费激情在线视频| 国产富婆一区二区三区| 秋霞午夜剧场| 国产一级二级三级| 国产日产精品一区二区三区的介绍| 免费高清成人在线| 日本韩国欧美在线观看| 亚洲制服一区| 久久九九亚洲综合| 伊人久久婷婷色综合98网| 天海翼女教师无删减版电影| 亚洲精品视频一区二区| 国产成人自拍偷拍| 国产精品九色蝌蚪自拍| 岛国av午夜精品| 精品少妇人妻av一区二区| 国产精品私房写真福利视频| 免费成人深夜夜行视频| 五月天激情国产综合婷婷婷| …久久精品99久久香蕉国产| 久久精品一区二区三区四区五区| 欧美一区二区三区电影在线观看| 精品一二三四区| 久久无码人妻精品一区二区三区| 无码精品a∨在线观看中文| av网站在线观看免费| 精品日产乱码久久久久久仙踪林| 黄视频网站在线看| 国产精品少妇自拍| 性欧美video另类hd3| 国产精品欧美在线观看| 能看av的网址| 国内精品模特av私拍在线观看| 性囗交免费视频观看| 久久久精品在线| 国产日韩精品在线观看| 影音先锋亚洲一区| 午夜亚洲国产au精品一区二区| 精品福利在线看| 色欧美在线观看| 天天色综合天天色| 亚洲成av人在线观看| 欧美最猛性xxxxx直播| 四虎成人av| 亚洲第一区色| 国产成人高潮免费观看精品| 美女久久久久久| 4444亚洲人成无码网在线观看| 爱爱免费小视频| 欧美主播一区二区三区美女 久久精品人| 色一色在线观看视频网站| caoporen人人| 五月天一区二区| 亚洲国产精品va在线| 奇米四色中文综合久久| 欧美日韩成人一区二区| 国产在线视频一区二区三区| 蜜桃91精品入口| 亚洲国产人成综合网站| 美女极度色诱视频www免费观看| 国产成人精品视| 美女高潮视频在线看| 好吊的妞视频这里都有| 欧美性猛交xxxxx少妇| 国产亚洲精久久久久久无码77777| 日本高清视频免费看| 91国产精品电影| 亚洲色图网址| 性视频1819p久久| 欧美视频一二三| 欧美91精品| 天堂√在线观看一区二区| 波多野结衣av在线播放| 国产婷婷色一区二区三区在线| 日韩成人av在线资源| 精品一区二区三孕妇视频| 国产精品夜夜夜爽张柏芝| 青青九九免费视频在线| 天天综合天天综合色| 黄色片网站免费| 久久精品亚洲| 97久久精品人人澡人人爽| 91精品国产一区二区人妖| 看黄网站在线观看| 久久久久美女| 91中文在线视频| 91精品国产综合久久久久久漫画| 岛国在线视频| 99re亚洲国产精品| 欧美日韩精品综合| 欧美精品在线观看| 国产av精国产传媒| 在线香蕉视频| japanese在线播放| 成人精品一区二区三区中文字幕| 亚洲精品高清视频| 国产精品88a∨| 久久精品成人欧美大片免费| 日韩精品一区二区三区视频播放| 国产欧美va欧美va香蕉在| 无码人妻少妇色欲av一区二区| 黄网站免费观看| 日韩成人午夜| 涩涩视频免费观看| 国产精品人妻一区二区三区| 亚洲精品福利在线观看| xxx欧美xxx| 日韩精品亚洲一区二区三区免费| 日本精品久久久久| 免费在线看成人av| 国产香蕉97碰碰久久人人| 国产精品久久久久久久久毛片| 香蕉精品视频在线观看| 亚洲精品97久久中文字幕| 黄色网页在线| 国产精品家庭影院| 久久综合久久美利坚合众国| 欧美成人精品1314www| 亚洲国产美女| 性xxxx奶大欧美高清| 成人亚洲欧美一区二区三区| 久久精品国产亚洲av久| 亚洲欧美精品在线| 黄页网站大全在线观看| 久久精品五月婷婷| 国产福利一区二区三区在线视频| 国产精品日韩一区二区|