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

首頁 > 開發(fā) > Java > 正文

利用Java存儲過程簡化數(shù)據(jù)庫操作

2024-07-21 02:06:07
字體:
供稿:網(wǎng)友
 利用java存儲過程溝通sql、xml、java、j2ee和web服務(wù)。
存儲過程(stored procedure)允許將運(yùn)行于數(shù)據(jù)庫層中的持久性邏輯與運(yùn)行于中間層中的商務(wù)邏輯有效地分離開來。這種分離可以降低整個應(yīng)用程序的復(fù)雜性,并提供其重用性、安全性、性能和可伸縮性。

但是,妨礙存儲過程廣泛采用的一個主要障礙是不同數(shù)據(jù)庫廠商使用各種專有的、且依賴于數(shù)據(jù)庫的實現(xiàn)語言。使用基于java的存儲過程可以解決這一問題。oracle已經(jīng)實現(xiàn)了ansi標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)規(guī)定了從sql中將靜態(tài)java方法作為過程或函數(shù)進(jìn)行調(diào)用的能力。這種實現(xiàn)被簡單地稱作"java存儲過程"。

在本文中,你將了解基于java的存儲過程如何幫助簡化商務(wù)邏輯、提高其性能,并擴(kuò)展數(shù)據(jù)庫的功能。本文將介紹oracle如何在數(shù)據(jù)庫內(nèi)啟用基于java的存儲過程。還會介紹java存儲過程如何訪問數(shù)據(jù),以及如何創(chuàng)建基本java存儲過程。

選擇pl/sql還是java

在考慮oracle存儲過程時,你可能會想到pl/sql。不過,從oracle8i開始,oracle已經(jīng)在數(shù)據(jù)庫中支持java,從而為存儲過程提供了不同于pl/sql的開放式和可移植的方法。我可以聽到"$64 000問題":"我如何在pl/sql和java之間做出選擇?我是否應(yīng)當(dāng)忘記已經(jīng)學(xué)習(xí)的所有pl/sql相關(guān)知識,而變?yōu)橐粋€java天地的新手?"

兩種語言都適用于數(shù)據(jù)庫編程,都有自己的優(yōu)點(diǎn)和弱點(diǎn)。在決定選擇哪一種語言時,可以參考下面根據(jù)經(jīng)驗得出的通用規(guī)則:

對于要求與sql進(jìn)行無縫集成的數(shù)據(jù)庫中心來說則邏輯使用pl/sql,從而完成對數(shù)據(jù)庫對象、類型和特性的訪問。



出于與數(shù)據(jù)庫的無關(guān)性考慮時,可以選擇java作為開放式的語言來取代pl/sql,同時也為了集成和溝通sql、xml、j2ee和web服務(wù)等各個領(lǐng)域。
oralcejvm使得java可以運(yùn)行在數(shù)據(jù)庫中

從oracle8i版本1(oralce8.1.5)開始,oracle便提供緊密集成的java虛擬機(jī)(jvm),jvm支持oralce的數(shù)據(jù)庫會話期結(jié)構(gòu)。任何數(shù)據(jù)庫對話期都可以在第一java代碼調(diào)用時啟動一個虛擬上專用的jvm,后續(xù)的用戶可以使用這一已經(jīng)存在的支持java的會話期。事實上,所有會話共享同一jvm代碼并保持"僅靜態(tài)"的私有狀態(tài),而垃圾則收集在單個對話期空間內(nèi),從而為各個java對話期提供了和sql操作相同的對話期隔離和數(shù)據(jù)完整性能力。這里,不需要為了數(shù)據(jù)完整性而進(jìn)行單獨(dú)的java支持的過程。這一基于對話期的結(jié)構(gòu)提供了較小的內(nèi)存占用率,并使oraclejvm具有與oracle數(shù)據(jù)庫一樣的線性smp可伸縮性。

創(chuàng)建java存儲過程

要將java方法轉(zhuǎn)換為java存儲過程需要幾個步驟,包括:用loadjava實用程序?qū)ava類加載到數(shù)據(jù)庫中,利用調(diào)用規(guī)范(call spec)發(fā)布java方法,將java方法、參數(shù)類型和返回類型映射到其sql的對應(yīng)部分。下面部分說明如何完成這些步驟。

我將使用一個簡單的hello類,它有一個方法hello.world(),返回字符串"hello world":


public class hello{ public static string world () { return "hello world"; }}

loadjava 實用程序

loadjava是加載java源文件、java類文件和java資源文件的實用程序,它可以用來驗證字節(jié)碼,并將java類和jar文件布置到數(shù)據(jù)庫中。它既可以通過命令行調(diào)用,也可以通過包含于dbms_java類中的loadjava()方法調(diào)用。為了加載我們的hello.class示例,輸入:


loadjava -user scott/tiger hello.class



從oracle9i版本2開始,loadjava允許通過為包含在被處理的類中的方法創(chuàng)建相應(yīng)的call specs來自動將java類發(fā)布為存儲過程。oracle為開發(fā)、測試、調(diào)試和布置java存儲過程提供了oracle9i jdeveloper。

the resolver spec

基于jdk的jvm在列于classpath中的目錄中查找類引用,并對其進(jìn)行解析。因為oracle數(shù)據(jù)庫類存在于數(shù)據(jù)庫模式中,所以oraclejvm利用數(shù)據(jù)庫解析器(resolver)通過列于resolver spec中的模式查找并解析類引用。與classpath不同(classpath可以應(yīng)用于所有的類),resover spec根據(jù)每類的情況進(jìn)行應(yīng)用。缺省解析器首先在加載類的模式中搜尋類,然后在公共同義詞(public synonyms)中搜索。


loadjava -resolve <myclass>
你可能需要指定不同的解析器,也可以在使用loadjava時強(qiáng)制進(jìn)行解析,從而在布置時確定可能在以后運(yùn)行時發(fā)生的任何問題。



loadjava -resolve -resolver "((* scott) (foo/bar/* others) (* public))"

call spec和存儲過程調(diào)用

為了從sql中調(diào)用java方法(以及從pl/sql和jdbc中調(diào)用),必須首先通過call spec發(fā)布公共靜態(tài)方法,它為sql定義方法采用的參數(shù)以及返回的sql類型。

在我們的例子中,我們將利用sql*plus連接到數(shù)據(jù)庫,并為hello.world()定義一個頂級call spec:


sql> connect scott/tigersql> create or replace function helloworld returnvarchar2 as language java name 'hello.world () returnjava.lang.string'; /function created.

可以像下面這樣調(diào)用java存儲過程:


sql> variable mystring varchar2[20];sql> call helloworld() into :mystring;call completed.sql> print mystring;mystring---------------------hello world

java存儲過程可以通過其call spec從以下各項中進(jìn)行調(diào)用:sql dml語句(insert, update、delete、select、call、explain plan、lock table和merge)、pl/sql塊、子程序、程序包以及數(shù)據(jù)庫觸發(fā)器。call spec的美妙之處在于存儲過程實現(xiàn)可以從pl/sql轉(zhuǎn)換為java,反之亦可,這一點(diǎn)對于請求者是透明的。

call spec從實現(xiàn)語言中(pl/sql或java)中抽象出調(diào)用界面,因而使之能夠在原有應(yīng)用程序和新的基于java/j2ee的應(yīng)用程序之間共享商務(wù)邏輯。但是,在從java客戶程序調(diào)用在數(shù)據(jù)庫駐留的java類時,你可能不希望通過pl/sql包裝器(wrapper)。在以后的版本中,oracle計劃提供一種機(jī)制,它可以使開發(fā)人員略過call spec。

高級數(shù)據(jù)訪問控制

java存儲過程可用于控制和限制對oracle數(shù)據(jù)的訪問,其方法是只允許用戶通過存儲過程管理數(shù)據(jù),而存儲過程在其調(diào)用者的權(quán)限內(nèi)執(zhí)行,而不能對表本身進(jìn)行訪問。例如,你可以在特定時間內(nèi)禁止更新數(shù)據(jù),或者使管理者只具有查詢工資數(shù)據(jù)的權(quán)利,而不能進(jìn)行更新,或者記錄所有的訪問并通知某一安全機(jī)構(gòu)。

原有應(yīng)用程序與j2ee應(yīng)用程序之間的數(shù)據(jù)邏輯共享

因為原有應(yīng)用程序與j2ee應(yīng)用程序都通過call spec調(diào)用存儲過程,所以j2ee和非j2ee應(yīng)用程序可以共享相同的數(shù)據(jù)邏輯。由于有了call spec,所以不用考慮所用的是何種實現(xiàn)語言(無論是pl/sql還是java),該數(shù)據(jù)邏輯都可以共享。

為bmp實體bean自動生成主關(guān)鍵字

在對ejb實體bean應(yīng)用bmp時,一個bean實例可以由自動生成的與新插入的數(shù)據(jù)相關(guān)聯(lián)的主關(guān)鍵字惟一確定,它是ejbcreate()的返回值??梢岳靡粋€插入相應(yīng)數(shù)據(jù)的存儲過程在一個數(shù)據(jù)庫操作中檢索ejbceater()中的該值,并檢索或計算主關(guān)鍵字。作為另一種方法,也可以利用jdbc3.0的return_generated_keys特性,以一個sql語句插入該數(shù)據(jù)并檢索相應(yīng)的關(guān)鍵字(或rowid)。但是,存儲過程方法在各個jdbc驅(qū)動器版本和數(shù)據(jù)庫之間更具可移植性。

可以用以下三個步驟實現(xiàn)這一模式:

創(chuàng)建一個java存儲過程,在公共genpk類中定義一個公共靜態(tài)java方法insertaccount()。此方法將插入數(shù)據(jù)、計算惟一的關(guān)鍵字(通過發(fā)出一個序列號),并返回計算出的關(guān)鍵字作為主關(guān)鍵字。



定義call spec



create or replace procedure insertaccount(owner invarchar, bal in number, newid out number)as language java name 'genpk.insertaccount(java.lang.string [])';/




在ejbcreate()內(nèi)調(diào)用存儲過程



public accountpk ejbcreate(string ownername, int balance) throws createexception{ try { callablestatement call = conn.preparecall{ "{call insertaccount(?, ?, ?)}"}; return new accountpk(accountid); }}

為cmp實體bean定制主關(guān)鍵字查找器

查找器方法(finder methods)用于檢索已存在的ejb實體bean實例。主關(guān)鍵字查找器使你能夠檢索惟一標(biāo)識的ejb實例。對于cmp實體bean,ejb容器根據(jù)聲明描述,自動生成主關(guān)鍵字查找器findbyprimarykey()方法。但是,在某些情況下,可能需要更多的控制,例如可能需要專門的查找器,如findbystoredprockey()。在這些情況下,你可以結(jié)合使用java存儲過程和對象關(guān)系框架(如oracle9i應(yīng)用服務(wù)器[oracle9ias] toplink)來實現(xiàn)定制的主關(guān)鍵字查找器方法。在將ejb查找器定義為redirect或named查找器后,toplink將生成一個sql查詢用于檢索bean實例。

數(shù)據(jù)驅(qū)動的ejb調(diào)用

在數(shù)據(jù)驅(qū)動體系結(jié)構(gòu)中,商務(wù)邏輯調(diào)用可以作為數(shù)據(jù)庫操作(如插入、更新或刪除)的結(jié)果來觸發(fā)。實現(xiàn)該數(shù)據(jù)邏輯的java存儲過程可以被聲明為數(shù)據(jù)庫觸發(fā)器,用以調(diào)用運(yùn)行于中間層j2ee應(yīng)用服務(wù)器的ejb。ejb的調(diào)用既可以采用j2ee1.3兼容的服務(wù)器通過interoperable inter-orb protocol(iiop)標(biāo)準(zhǔn)遠(yuǎn)程方法調(diào)用(remote method invocation,rmi)實現(xiàn),也可以通過銷售商特定的傳輸協(xié)議(如oracle9ias/oc4j的ormi,或者通過bea weblogic的t3)用rmi來實現(xiàn)。每個應(yīng)用服務(wù)器提供商在提供基于iiop的rmi,以提供互操作性的同時,都有其自己優(yōu)化的協(xié)議。oracle9ias同時支持基于iiop的rmi調(diào)用和基于ormi協(xié)議的rmi調(diào)用。

數(shù)據(jù)驅(qū)動的消息傳送

oracle9i數(shù)據(jù)庫嵌入了advanced queuing(aq,高級排隊),它是一種集成的、穩(wěn)定、可靠、安全、可擴(kuò)展和事務(wù)處理式的消息排隊框架。oracle通過標(biāo)準(zhǔn)的java消息傳送系統(tǒng)(java messaging system,jms)api為java開發(fā)人員提供aq功能。java存儲過程可以通過jms接口調(diào)用aq操作,從而能夠?qū)崿F(xiàn)快速、在會話期內(nèi)、可擴(kuò)展的、數(shù)據(jù)驅(qū)動的消息傳送。

java存儲過程可以利用jms調(diào)用aq操作??梢杂靡韵?個步驟實現(xiàn)這一模式:

創(chuàng)建并啟動jms queue(為此,可以將以下一些操作嵌入sql腳本內(nèi)):



execute dbms_aqadm.create_queue_table(queue_table =>'queue1', queue_payload_type =>'sys.aq$_jms_text_message', comment => 'a test queue', multiple_consumers => false, compatible => '8.1.0');execute dbms_aqadm.create_queue( queue_name => 'queue1', queue_table => 'queue1' );execute dbms_aqadm.start_queue(queue_name => 'queue1');




創(chuàng)建java存儲過程(代碼摘錄如下):



public static void runtest(string msgbody){ try { // get database connection ora_drv = new oracledriver(); db_conn = ora_drv.defaultconnection(); // setup sender (cf online code sample) .. // create message s_msg = s_session.createtextmessage(msgbody); // send message sender.send(s_msg); s_session.commit(); // receive message r_msg = (textmessage) receiver.receive(); r_session.commit(); // output message text string body = r_msg.gettext(); system.out.println("message was '"+body+"'"); ..}}




創(chuàng)建call spec:



create or replace procedure jmsproc (t1 in varchar) as language java name 'jmssample.main (java.lang.string[])';/




調(diào)用存儲過程:



call jmsproc('hello');

數(shù)據(jù)庫輔助的web發(fā)布(緩沖失效)

各應(yīng)用程序結(jié)構(gòu)必須面對的一個共同問題是如果可靠地將數(shù)據(jù)庫信息進(jìn)行緩存,以提高整個系統(tǒng)的性能。jcache是一種即將公布的標(biāo)準(zhǔn)規(guī)范(jsr 107),它可以解決這一問題。它說明了一種對java對象臨時在內(nèi)存中進(jìn)行緩存的方法,包括對象的創(chuàng)建、共享訪問、假脫機(jī)(spooling)、失效、各jvm的一致性等。它可被用于緩存jsp內(nèi)最經(jīng)常讀取的數(shù)據(jù),如產(chǎn)品目錄和價格列表。利用jcache,多數(shù)查詢的反應(yīng)時間會因為有緩存的數(shù)據(jù)而加快(內(nèi)部測試表明反應(yīng)時間大約快15倍)。

為了跟蹤原始數(shù)據(jù)的所有變化,并刷新已緩存的數(shù)據(jù),java存儲過程會作為一個觸發(fā)器被附加在一個表上。這個表的任何變化都會自動調(diào)用該存儲過程,后者再調(diào)出一個已定義的jsp使jcache對象失效,該對象將其狀態(tài)映射到該數(shù)據(jù)庫表。在失效時,緊跟其后的查詢將強(qiáng)制緩存器根據(jù)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行更新。



擴(kuò)展數(shù)據(jù)庫的功能

在數(shù)據(jù)庫中直接運(yùn)行java代碼的一個妙處就在于要實現(xiàn)新的功能,只需要簡單地加載代碼或庫,并利用call spec制作可用于sql、pl/sql、java、j2ee和非java api的進(jìn)入點(diǎn)(公共靜態(tài)方法)。oracle9i數(shù)據(jù)庫用戶可以很容易地擴(kuò)展數(shù)據(jù)庫功能。oracle自己利用這種能力來獲得新的應(yīng)用程序和工具包,如xml developer kits(xdks)。

溝通sql、pl/sql、java、j2ee、.net和xml

oracle xdk是用java編寫的,并將其公共方法可用作java存儲過程,從而擴(kuò)展了數(shù)據(jù)庫的xml可編程能力。sql、pl/sql、java、j2ee和非java(.net)商務(wù)邏輯都能夠訪問xml分析器、xslt處理器、xpath引擎和xml sql utility(xsu)。

xml分析器可以通過xmlparser和xmldom包進(jìn)行訪問。xsu是一種java實用程序,它可以由sql查詢結(jié)果或jdbc resultset生成xml文檔,并將xml文檔中的數(shù)據(jù)寫入數(shù)據(jù)庫表或視圖中。利用xsu,xml輸出可以輸出為文本、dom樹或dts。通過dbms_xmlquery和dbms_xmlsave包,xsu即可用于pl/sql。

結(jié)論

oracle數(shù)據(jù)庫與java vm的集成可以創(chuàng)建可移植、功能強(qiáng)大和與數(shù)據(jù)庫無關(guān)的數(shù)據(jù)邏輯和持續(xù)性邏輯(persistence logic)。運(yùn)行于中間層的商務(wù)邏輯和運(yùn)行于數(shù)據(jù)庫層的數(shù)據(jù)邏輯之間的分離提高了應(yīng)用程序的可擴(kuò)展性、靈活性和可維護(hù)性。
注冊會員,創(chuàng)建你的web開發(fā)資料庫,
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲区第一页| 性爱视频在线播放| 免费毛片网站在线观看| www.激情网.com| 日韩高清国产一区在线| 国产系列第一页| 亚洲精品一二三四| 亚洲婷婷伊人| 亚洲国产精品欧美久久| 亚洲欧美综合一区| 在线观看黄色av| 在线观看不卡视频| 久久人人97超碰人人澡爱香蕉| 欧美精品videossex88| 日本a级片久久久| 无码精品视频一区二区三区| 日韩精品久久久久久久| 无需播放器的av| 欧美亚洲一级二级| 欧美人与性动交α欧美精品图片| 欧美日韩伊人| 在线免费观看黄色av| 欧洲在线一区| 国产盗摄女厕一区二区三区| 欧美精品videossex变态| 中文字幕av一区二区三区佐山爱| 欧美精品一区二区久久久| 高清在线一区二区| 精品少妇3p| 久久久国产视频91| 国产精品久久国产精品99gif| 男女午夜刺激视频| 亚洲一区二区在线观看视频| 欧美日韩国产黄| 鲁一鲁一鲁一鲁一色| 成人白浆超碰人人人人| 亚洲国内精品在线| 四虎成年永久免费网站| 天天插天天射天天干| 亚洲高清色综合| 亚洲精品福利视频网站| 在线免费日韩片| 国产欧美精品日韩| 在线观看日本视频| 91久久偷偷做嫩草影院| 日韩精品亚洲人成在线观看| 欧美亚洲tv| 五月激情六月丁香| 丝袜制服影音先锋| 美女把尿口扒开给男人桶视频| 中文字幕日韩欧美在线视频| 精品亚洲一区二区三区在线观看| 国产亚洲精品免费| 中文字幕在线观看播放| 亚洲图区欧美| 亚洲人成网站在线| 日韩av在线综合| av成人免费网站| 国产精品国产三级国产有无不卡| 高清国产福利在线观看| 暖暖成人免费视频| 久久免费少妇高潮99精品| 亚洲一区二区三区在线| 欧美视频裸体精品| 亚洲精品一区二区三区蜜桃| 成人免费视频网| 精品无人乱码一区二区三区的优势| 国产精品99精品| 轻轻草在线视频| 99国产精品久久久久久久成人热| 国产精品美女av| 欧美性色黄大片手机版| 久久亚洲综合色一区二区三区| 美国一级黄色录像| 亚洲日本久久久午夜精品| 日本在线播放一区二区三区| 欧美二级三级| 欧美精品观看| 久久久精品国产免大香伊| 成人午夜精品在线| 国产精品传媒麻豆hd| 99久久国产综合精品五月天喷水| 日韩av高清在线| 国产黄色成人av| 久久综合国产| 国产一级黄色录像片| 人人爱人人爽| 999av视频| 91看片在线| 国产欧美va欧美va香蕉在| 狠狠操夜夜操| 久久婷婷亚洲| 欧美日韩高清在线播放| 亚洲精品伦理在线| 三区视频在线观看| 狠狠色狠狠色综合系列| 精品国产一区二区三区无码| 日韩久久精品一区二区三区| 阿v天堂2014| 久久久久精彩视频| 国产一区二区三区高清播放| 国产主播福利在线| 九九视频在线免费观看| 日本亚洲精品在线观看| 隣の若妻さん波多野结衣| 色婷婷激情综合| 日韩大片欧美大片| 欧美另类极品videosbest视频| 国产成+人+亚洲+欧美+综合| 激情五月综合| 国产激情视频在线看| 91香蕉视频污版| 亚洲性色av| 96sao精品免费视频观看| 亚洲国产精品成人综合| 亚洲福利视频网站| 国产精品久久久久久久第一福利| 国产另类第一区| 疯狂做受xxxx高潮欧美日本| 国产精品中文字幕久久久| 欧美xxxx18性欧美| 国产视频一二三四区| 久久久久久久久久码影片| 91国产在线播放| 午夜久久久久久久久久| 国产精品videossex久久发布| 国内精品国产成人国产三级粉色| 国产精品久久久久久久久久久新郎| 色网在线播放| 伊人精品综合| 最近免费中文字幕大全免费版视频| 久久视频免费在线| 漂亮人妻被中出中文字幕| 欧美日韩在线一| 天天干天天插天天射| 亚洲女人初尝黑人巨大| 国产女人18毛片水真多18精品| 久久久久久18| 免费视频二区| 激情婷婷久久| 日韩精品一区二区三区视频在线观看| 久久精品小视频| 成人免费av资源| 成人免费高清在线观看| 亚洲av成人无码久久精品老人| xxxx在线播放| 欧美精品久久久久久久久老牛影院| 亚洲三区欧美一区国产二区| 岛国毛片在线观看| 无码免费一区二区三区| 欧美手机在线视频| 日韩精品人妻中文字幕有码| www.av在线| 国产嫩草一区二区三区在线观看| 日本韩国精品在线| xxxx日本少妇| 成人精品美女隐私视频| 国产精品自拍av| 久久精品嫩草影院| 亚洲一区在线免费| 精品久久久久久中文字幕人妻最新| 国产精品国产三级国产普通话对白| 日韩精品一区二区三区第95| 美女精品国产| 欧美电影一区| 精品国偷自产国产一区| 99久久99热久久精品免费看| 精品视频123区在线观看| 日韩人妻精品中文字幕| 免费黄色激情视频| 国产三级精品三级在线观看国产| 日本熟女毛茸茸| 性国裸体高清亚洲| 欧美羞羞免费网站| 欧美大陆一区二区| 国产日韩欧美电影| 久久激情免费视频| 欧美高清视频在线观看| 欧美在线观看一区二区| 尤物视频..com| 最新欧美日韩亚洲| 亚洲成av人影院| 国产精品乱码一区二区三区| 国产亚洲精品成人| 蜜桃视频第一区免费观看| 国产精品久久一区主播| 国产乱子伦精品无码码专区| 秋霞成人午夜伦在线观看| 免费观看一区二区三区| 东京热一区二区三区四区| 亚洲啊v在线免费视频| 欧美黑人乱大交| 国产www视频| 日韩黄色三级| 精品乱码一区| 91精品国产一区二区三区蜜臀| 欧美综合久久| 人操人爱免费视频| 亚洲人在线观看| 成人美女视频在线观看18| 午夜精品久久久久久久99热浪潮| 久久午夜夜伦鲁鲁一区二区| 日韩av福利| 欧美 变态 另类 人妖| 亚洲人精品午夜在线观看| 97超碰青青草| 在线色视频网| 国产精品入口夜色视频大尺度| 欧美亚洲精品天堂| 国内精品久久久久久久久电影网| 韩国视频一区| 在线免费观看中文字幕| 久久成人一区| 亚洲美女一区二区三区| 日本少妇性生活| 国产精品x8x8一区二区| 亚洲新声在线观看| 欧美日韩免费一区二区三区| 三年中文高清在线观看第6集| 黄一区二区三区| 日本视频免费一区| 日韩欧美视频免费在线观看| 九色porny丨国产精品| 午夜精品久久久久久99热软件| 色欲av伊人久久大香线蕉影院| 久久久国产成人| 色综合久久综合中文综合网| 国产精品午夜一区二区| 国产一区二区三区黄网站| 寂寞少妇一区二区三区| 夜色福利刺激| 青青操综合网| 欧美一区二区大片| 国产日产精品一区二区三区的介绍| 日本高清视频www| 性色av一区二区三区免费| 成人嘿咻视频免费看| 不卡视频在线播放| 综合电影一区二区三区| 人操人视频在线观看| 久久视频免费在线播放| 男女在线视频| 国内视频一区二区| 天海翼亚洲一区二区三区| 成人激情电影在线| 97视频在线免费| 亚洲一区二区三区毛片| 理论片大全免费理伦片| 日韩欧美精品综合| www视频在线观看免费| www.日韩.com| 久久亚裔精品欧美| 麻豆中文字幕在线观看| 天天摸日日摸狠狠添| 日本激情视频网站| 国产精品涩涩涩视频网站| 极品美女一区二区三区| 中国人与牲禽动交精品| 久久99热精品| 嫩草影院2018| 91欧美在线| 国产一区二区三区不卡视频网站| av影片在线看| 视频亚洲一区二区| 激情文学综合丁香| 亚洲最新在线视频| 久久九九精品99国产精品| 欧美成人精品一区二区综合免费| 欧美尤物巨大精品爽| 国产精品人妻一区二区三区| eeuss鲁片一区二区三区在线观看| 麻豆精品久久久久久久99蜜桃| av免费中文字幕| 天堂va蜜桃一区二区三区| 一区二区三区视频在线看| 国产小视频在线高清播放| 色哟哟精品丝袜一区二区| swag国产精品一区二区| 精品国产第一福利网站| 欧美一二三区| 香蕉精品999视频一区二区| 亚洲高清久久久久久| 国产精品自拍99| 欧美性xxx| 欧美电影免费| 99精品国产在热久久| 一区二区三区不卡在线视频| 久久久久亚洲AV| 国产免费一区二区三区四区五区| 久久蜜桃香蕉精品一区二区三区| 中文字幕在线永久| 中国av在线播放| 欧美激情国产日韩| 久久精品欧美视频| 97国产精品视频| 中文无码精品一区二区三区| 黄色av片三级三级三级免费看| 久久众筹精品私拍模特| 色妹子一区二区| 欧美日韩在线精品成人综合网| 亚洲av无码国产精品永久一区| 黄色一级片免费在线观看| 欧美性一区二区三区| 视频在线日韩| 97午夜影院| 亚洲精品一区二区三区蜜桃久| 成人免费午夜电影| 青青草娱乐在线| 日本一区二区综合亚洲| 97久久人人超碰caoprom| 久久精品亚洲一区二区三区浴池| 国产日韩综合一区二区性色av| 91精品国产自产在线老师啪| 亚洲啪啪av| 日韩无套无码精品| caoporn国产一区二区| 精品久久久国产| 国内精品久久久久久影院老狼| 一区二区三区精彩视频| 蘑菇福利视频一区播放| 久久夜色精品国产欧美乱极品| 国产精品久久一区二区三区不卡| 福利片在线播放| 樱桃视频在线观看一区| 欧美白人猛性xxxxx交69| 国产69精品久久久久久| 国产xxxxx| 在线播放av片|