久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 數(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)在被當作新的數(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 特性,并詳細介紹新 xml 支持對于遷移現(xiàn)有基于 xml 的應(yīng)用程序的重大意義。這篇文章還包括基于 java 的實用工具的源代碼,該工具用于幫助生成遷移數(shù)據(jù)庫對象時所需的腳本。

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

更新存儲過程

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

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

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

存儲過程允許:

更改目標 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 文檔中導航時使用的任何路徑表達式中。

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

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

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

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

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

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

essential —— 是。

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

@path —— 該屬性的值是目標 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 文檔中的目標節(jié)點(使用 @path 屬性中定義的 xpath 來定位)上進行的操作。如果操作失敗,那么存儲過程將中止。

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

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

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

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

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

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

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

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

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

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

essential —— 是。

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

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

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

重要事項:從命令行處理器 (clp) 執(zhí)行更新存儲過程時,始終需要設(shè)置 updatesql 參數(shù)的值。如果將這個值設(shè)置為 null 或空字符串,clp 會拋出 jcc 異常:column not updatable。當您從應(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(可以在 下載 部分找到)復制到 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。

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

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',?,?);

對目標 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',?,?);

當更新元素中沒有設(shè)置 @action 時,就默認執(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ā)表
天堂а√在线中文在线| 亚洲人成亚洲人成在线观看图片 | 成人精品视频网站| 国产乱叫456在线| 色在线观看视频| 日本人妻一区二区三区| 99视频在线免费播放| 亚洲国产日韩欧美| av成人午夜| 羞羞色国产精品| 国产亚洲欧美日韩一区二区| 欧美日韩国产高清一区二区| 亚洲国产毛片aaaaa无费看| av一区二区三区四区| 奇米一区二区三区| 天天av天天翘| 国产91免费在线观看| 亚洲一区二区视频在线播放| 国产成人精品亚洲男人的天堂| 乐播av一区二区三区| 性农村xxxxx小树林| 伊人成人免费视频| 毛片毛片毛片毛片毛| 999在线免费视频| 毛片av在线播放| 特级毛片在线免费观看| 亚洲成人蜜桃| 神马欧美一区二区| 麻豆久久久av免费| 国产精品区一区二区三含羞草| 国产美女高潮久久白浆| 国产成人精品综合| 国产精品海角社区在线观看| 国产mv久久久| 国产美女精品视频免费观看| 国产精品日韩在线一区| 国产精品午夜视频| 国产精品日韩欧美| 91久久久一线二线三线品牌| 99r国产精品视频| 成人区精品一区二区| 99久久免费国| 国产91视觉| 激情伦成人综合小说| 精品国产_亚洲人成在线| 久久久7777| 一本一道久久a久久综合精品| 免费成人进口网站| 毛片在线视频播放| 搡女人真爽免费午夜网站| 亚洲精品一二三四五区| 成人亚洲免费视频| xxxx黄色片| 美国美女黄色片| 69精品久久久| 国产免费a视频| 亚洲av无码乱码国产麻豆 | 午夜在线成人av| 色婷婷av久久久久久久| 日韩视频在线你懂得| 亚洲男人天堂2023| 中文字幕在线国产精品| 久久久久久久国产| www.久久久| 一本一道久久a久久精品综合| 五十路熟女丰满大屁股| 欧美丰满熟妇bbb久久久| www成人啪啪18软件| 中文字幕一区在线播放| 日韩成人一级片| 成人的网站免费观看| 亚洲老妇xxxxxx| 日韩一级成人av| 久久伊人91精品综合网站| 国产精品久久久久久久久久久久 | 午夜精品一区二区三区免费视频 | 99精品国产一区二区| 亚洲午夜精品一区二区| 超碰网在线观看| 丰满圆润老女人hd| 中文字幕一级片| 热久久一区二区| 国产精品久久久久一区二区三区| 91久久国产综合久久| 日韩精品中文字幕久久臀| 久久久免费高清电视剧观看| 国产精品久久国产精品| 99久久激情视频| 阿v天堂2014| 99产精品成人啪免费网站| 高清成人免费视频| 日韩欧美成人精品| 久久国产剧场电影| 国产午夜精品一区二区三区嫩草 | 国产成人91久久精品| 欧美理论一区二区| 青青草原国产在线视频| 久久久久成人网站| 日韩精品电影在线观看| 亚洲欧美一区二区三区极速播放 | 超碰在线人人爱| 老熟妇高潮一区二区三区| www.国产三级| 综合亚洲深深色噜噜狠狠网站| 欧美一区二区三区免费观看视频| 97久久精品国产| 一区二区三区在线视频111| 无码人妻一区二区三区一| www.av88| 久久久久久久久久久黄色| 精品久久久久久综合日本欧美| 国产精品av在线播放| 国产一区二区三区乱码| av在线播放中文字幕| 丝袜美腿一区二区三区| 黑人巨大精品欧美一区二区免费| 欧美精品一区二区三区国产精品| 日韩欧美精品一区二区| 中日韩精品一区二区三区| 婷婷五月综合激情| 色婷婷av一区二区三区软件| 欧洲成人免费视频| 成人羞羞国产免费网站| 精品国产午夜福利| 国产精品妹子av| 啊v视频在线一区二区三区| 亚洲国产精品综合| 青青操国产视频| 成人免费观看男女羞羞视频| 日韩高清不卡在线| 欧美午夜片在线免费观看| 国产成人高潮免费观看精品| 久久人人爽av| 空姐吹箫视频大全| 欧美专区日韩专区| 成人免费网站在线观看| 久久久久久无码精品人妻一区二区| 精品国产99久久久久久宅男i| 亚洲妇女屁股眼交7| 68精品国产免费久久久久久婷婷| 日韩中文字幕三区| 国产模特av私拍大尺度| 一本久久a久久免费精品不卡| 国产日韩亚洲欧美| 国产中文字幕一区二区| 激情综合五月天| 亚洲精品一区二区在线| 伊人av成人| 人人爽人人爽人人片av| 亚洲成国产人片在线观看| 国产精品v日韩精品| 四虎成人免费视频| 国产成人av一区二区三区在线观看| 亚洲毛片在线观看| www.av片| 精品国产18久久久久久| 337p亚洲精品色噜噜| 日本一区网站| 久久久久99精品成人片我成大片 | 久久 天天综合| 亚洲欧美变态国产另类| 九九爱精品视频| 日批视频在线播放| 精品美女在线播放| 国产一区二区四区| 日本黄色一区二区三区| 日韩精品专区在线影院重磅| 男女激烈动态图| 国产三级按摩推拿按摩| 欧美日韩一区二区电影| 一本一本a久久| 欧日韩免费视频| 日韩中文字幕综合| 亚洲视屏在线播放| 午夜免费福利在线| 国产在线视视频有精品| 麻豆乱码国产一区二区三区| 日韩久久久久久久久久久| 99精品久久只有精品| 日本精品久久久久久久| 久久中文字幕精品| 一区二区三区在线视频观看58| 99视频国产精品免费观看| 精品亚洲永久免费| 欧美天天综合网| 国产 国语对白 露脸| 日韩专区在线视频| 久久久久久久久久国产精品| 玖玖爱在线观看| 亚洲免费色视频| 欧美日韩在线一区二区三区| av免费在线不卡| 亚洲嫩模很污视频| 日韩女优在线视频| 亚洲黄色录像片| 亚洲精品tv久久久久久久久| 亚洲精品字幕在线| xx视频.9999.com| 国产三级国产精品| 亚洲成人中文在线| 91成人在线视频观看| 日韩福利电影在线| 日本在线观看天堂男亚洲| 日韩视频中文字幕在线观看| 欧美亚洲一区二区在线| 国产精品999视频| 国产激情偷乱视频一区二区三区| 国产精品久久久久秋霞鲁丝| 国产在线观看黄色| 日韩电影在线观看中文字幕| 五月天视频在线观看| 亚洲国产激情av| 亚洲精品一卡二卡三卡四卡| 日本aⅴ亚洲精品中文乱码| 青草成人免费视频| 国产精品7777777| 亚洲福利视频免费观看| 国产精久久久久| 香蕉久久一区二区不卡无毒影院| cao在线观看| 欧美日韩国产精品综合| 欧美午夜精品一区| 国产一伦一伦一伦| 曰韩精品一区二区| 天天夜碰日日摸日日澡性色av| a亚洲天堂av| 欧美中日韩免费视频| 久久男女视频| 91亚洲永久免费精品| 亚洲av无码国产精品久久不卡 | 中文字幕 国产| 欧美裸体xxxx极品少妇| 国产福利拍拍拍| 久久精品中文字幕| 日韩精品视频免费看| 少妇av一区二区三区| 国产无遮无挡120秒| 按摩亚洲人久久| 精品国产午夜福利| 久久久久久久成人| 国产精品久久免费| 国产精品久久999| 丰满少妇一级片| 91嫩草在线视频| 老汉av免费一区二区三区| 精品卡一卡二| 粉嫩高潮美女一区二区三区| 日韩视频在线免费播放| 日本一区二区三区视频视频| 日韩网站在线免费观看| 亚洲人成在线播放网站岛国| 性生活免费在线观看| 欧美图片一区二区三区| 欧美丰满美乳xxⅹ高潮www| 亚洲国产精品成人av| 国产wwwwxxxx| 久久久极品av| av小说天堂网| 国产精品国产精品| 国产91精品在线观看| 久久99久久久久久| 性做久久久久久| 黄色网址在线视频| 国产午夜精品全部视频在线播放 | 在线免费观看一级片| 日本视频久久久| 麻豆高清免费国产一区| 亚洲高清精品中出| 国产精品www在线观看| 日韩精品成人免费观看视频| 欧美一区二区三区男人的天堂| www.久久久久久久久久久| 久久精品亚洲一区| 久久66热偷产精品| 国产伦精品一区二区三区免| 伊人久久大香线蕉精品| 亚洲伦理一区二区三区| 日韩va欧美va亚洲va久久| 91久久国产精品91久久性色| 国产精品中文欧美| 日韩伦理在线免费观看| 午夜亚洲福利老司机| 免费成人深夜夜行p站| 一区二区国产精品视频| 一级久久久久久久| 91视频婷婷| 2022国产精品视频| 自拍偷拍21p| 亚洲精品国产精品自产a区红杏吧| 久久精品国产亚洲AV无码男同| 国产精品一二区| 久久久久久久网| 欧美一级片在线免费观看| 亚洲欧美日韩精品久久亚洲区 | 午夜免费看视频| 亚洲精品久久久久国产| 国产伦理吴梦梦伦理| 欧美日韩综合另类| 亚洲一区二区美女| 成年人一级黄色片| 91免费的视频在线播放| 亚洲欧洲精品一区二区精品久久久| 六十路息与子猛烈交尾| 韩剧1988在线观看免费完整版| 国产ts人妖一区二区| 亚洲精品永久视频| 欧美成人黑人xx视频免费观看| 黄色精品一二区| 小早川怜子一区二区三区| www.日韩av.com| 精品一区二区三区香蕉蜜桃| 色乱码一区二区三区在线| 亚洲欧洲日本专区| 美女久久一区| 国产一级特黄a大片免费| 亚洲人成网站色ww在线| 奇米影视在线99精品| 国模视频一区二区| 国产黄人亚洲片| 三级视频网站在线观看| 国产成人91久久精品| 1000精品久久久久久久久| 色哟哟一一国产精品| 精品国产aⅴ麻豆| 欧美日韩一级黄| 99草在线视频| 日韩免费视频播放| 日韩中文在线中文网在线观看 | 亚洲缚视频在线观看| 久久久天天操| 无码人妻一区二区三区在线视频| 国内自拍欧美激情| 国产精品国产三级国产aⅴ入口 | 久久的精品视频| 国产亚洲一区二区三区| 免费网站看av| 小说区视频区图片区| 国产一区二区日韩精品欧美精品| 国产综合色产在线精品| 亚洲自拍偷拍图| 国产91精品入口17c| 69堂亚洲精品首页| 奇米777欧美一区二区| 亚洲av成人无码一二三在线观看| 91国产丝袜在线放| 欧美夫妻性生活| 国产在线精品免费av| 中文字幕91视频| 亚洲欧洲一区二区福利| 亚洲美女激情视频| 91在线播放网址| 日韩精品乱码久久久久久| 免费看黄色a级片| 久久综合久中文字幕青草| 最新中文字幕一区二区三区| 最新国产中文字幕| 免费看污污网站| 成人在线免费观看视视频| 欧美综合一区二区三区| 久久精品999| 黑人と日本人の交わりビデオ| 亚洲欧洲日本国产| 欧美大码xxxx| 欧美日韩激情视频| 日本在线观看不卡视频| 神马久久精品综合| 毛片在线视频播放| 成人啪啪免费看| 亚洲第一免费网站| 中文字幕av免费专区久久| 一级做a爰片久久毛片16| 无码人妻一区二区三区免费n鬼沢| 欧美大片免费久久精品三p| 青青草成人在线观看| 国精品人伦一区二区三区蜜桃| 熟妇熟女乱妇乱女网站| 欧美精品激情视频| 在线亚洲一区观看| 国产福利精品一区| 少妇太紧太爽又黄又硬又爽| 999在线精品视频| 免费av在线一区二区| 欧美理论片在线观看| 欧美日韩国产免费一区二区| 北条麻妃国产九九精品视频| 波多野结衣高清在线| 少妇伦子伦精品无吗| 亚洲一区三区电影在线观看| 91精品国产亚洲| 日韩一区二区三区观看| 国产欧美日韩在线| 日本加勒比一区| 欧美成人综合色| 无码人妻少妇色欲av一区二区| 亚洲欧美国产精品桃花| 国产99久久精品一区二区 夜夜躁日日躁 | 欧美 日韩 中文字幕| 九九热视频在线免费观看| 日本888xxxx| 亚洲自拍三区| 成人午夜高潮视频| 久久久av网站| 精品国产制服丝袜高跟| 亚洲午夜久久久久久久久电影网| 国产成人高清视频| 国产综合在线播放| 一区二区三区视频免费看| 3d动漫精品啪啪一区二区下载| 人人妻人人添人人爽欧美一区| 免费在线观看91|