亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 實(shí)體對(duì)象的抽象以及一種基于數(shù)據(jù)庫(kù)的實(shí)現(xiàn)(轉(zhuǎn)).txt

?? java學(xué)習(xí)文檔
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
作者:sure160
email: sure160@china.com
日期:6/13/2001 12:46:36 PM
簡(jiǎn)介:本文探討了關(guān)系數(shù)據(jù)庫(kù)中的實(shí)體對(duì)象在面向?qū)ο笳Z(yǔ)言中如何抽象、實(shí)現(xiàn),并提出一種實(shí)現(xiàn)方案。
一、為什么要使用實(shí)體對(duì)象的概念 
實(shí)體對(duì)象指的是可永久存儲(chǔ)的數(shù)據(jù)對(duì)象,通常可以用關(guān)系數(shù)據(jù)庫(kù)的一張數(shù)據(jù)表或一張主表和與之連接的幾張子表來(lái)表示。為什么要引入實(shí)體對(duì)象的概念呢?我可以肯定您是看過(guò)關(guān)于面向?qū)ο髢?yōu)點(diǎn)的長(zhǎng)篇大論的,不過(guò)我覺(jué)得有必要再嘮叨兩句,因?yàn)椴皇撬杏肅++或JAVA編程的人都是使用面向?qū)ο蟮姆绞较雴?wèn)題的。 

在現(xiàn)實(shí)世界中,對(duì)象比它的屬性要穩(wěn)定,所以數(shù)據(jù)要抽象成對(duì)象。比如由于需求的修改,一個(gè)圖書(shū)管理系統(tǒng)要顯示更多的書(shū)目詳細(xì)信息,圖書(shū)的屬性發(fā)生了變化,而圖書(shū)這個(gè)對(duì)象并沒(méi)有變,和其他對(duì)象(例如書(shū)架、借閱者)之間的關(guān)系也沒(méi)有變。用一個(gè)數(shù)據(jù)對(duì)象來(lái)保存書(shū)目信息的程序修改起來(lái)要簡(jiǎn)單的多。 
把實(shí)體對(duì)象如何永久儲(chǔ)存的方法封裝到對(duì)象中可以實(shí)現(xiàn)使用對(duì)象的外部程序的與數(shù)據(jù)庫(kù)無(wú)關(guān),便于程序的移植。 
在程序設(shè)計(jì)中使用實(shí)體對(duì)象概念把面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O(shè)計(jì)、面向?qū)ο缶幋a著幾個(gè)步驟連貫和一致。 
可以減少外部程序中復(fù)雜性,使用這些實(shí)體對(duì)象的程序只需要簡(jiǎn)單的調(diào)用insert()或update()的方法,而不用去寫(xiě)討厭的SQL語(yǔ)句。

但是,由于歷史原因,即使象Java這樣的新興語(yǔ)言,也沒(méi)有在所有地方完全利用面向?qū)ο蟮乃枷搿W屛覀兛纯碕DBC吧,這是一個(gè)號(hào)稱用對(duì)象封裝的數(shù)據(jù)庫(kù)接口。可是它封裝的是什么呢?連接、語(yǔ)句、結(jié)果集和存儲(chǔ)過(guò)程。這其實(shí)并不是我們?cè)O(shè)計(jì)系統(tǒng)所關(guān)心的東西,我們關(guān)心的是數(shù)據(jù)對(duì)象本身,而不是它從數(shù)據(jù)庫(kù)中提取的方法。當(dāng)然,JDBC本身也不該受到太多的指責(zé),因?yàn)樗緛?lái)的目標(biāo)就是封裝、屏蔽關(guān)系型數(shù)據(jù)庫(kù)之間的差異,而不是企圖實(shí)現(xiàn)一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)。

EJB第一次引起我的注意就是因?yàn)樗岢龅腅ntity Bean,也就是實(shí)體對(duì)象。它對(duì)實(shí)體對(duì)象提供了一套完整的實(shí)現(xiàn)思路,但是我認(rèn)為它太復(fù)雜了,主要原因是EJB想要做的事太多了。大部分情況下我并不需要分布式處理,我也不需要把實(shí)體對(duì)象存儲(chǔ)到文件中去。我需要的僅僅是在一個(gè)本地運(yùn)行的基于數(shù)據(jù)庫(kù)的程序。

二、EJB如何實(shí)現(xiàn)的實(shí)體對(duì)象 
剛才提到了EJB已經(jīng)實(shí)現(xiàn)了實(shí)體對(duì)象,那么讓我們看看它是如何實(shí)現(xiàn)的。EJB中Entity Bean的對(duì)象實(shí)際上是對(duì)數(shù)據(jù)對(duì)象的一種完美的抽象,在這里我們幾乎看不到數(shù)據(jù)庫(kù)管理系統(tǒng)的作用。一個(gè)實(shí)體對(duì)象有幾種狀態(tài),在內(nèi)存中、在磁盤(pán)緩存中、或者在數(shù)據(jù)庫(kù)中,實(shí)體對(duì)象的這些狀態(tài)通常我們是不關(guān)心的,EJB的容器在必要的情況下會(huì)自動(dòng)轉(zhuǎn)換對(duì)象的狀態(tài),也就是說(shuō)自動(dòng)把它存到數(shù)據(jù)庫(kù)中,或從數(shù)據(jù)庫(kù)中取出。我們要訪問(wèn)一個(gè)數(shù)據(jù)對(duì)象,要向一個(gè)對(duì)象容器提出申請(qǐng),由它返回一個(gè)對(duì)象實(shí)例供我們使用。一個(gè)Entity Bean對(duì)應(yīng)于數(shù)據(jù)表中的一行。如果我們?cè)L問(wèn)的是同一行數(shù)據(jù),對(duì)象容器返回的是不同的對(duì)象,但都指向同一個(gè)Entity Bean,并把我們所有的方法請(qǐng)求都發(fā)送給這個(gè)Entity Bean。實(shí)際上EntityBean的容器基本實(shí)現(xiàn)了一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)。它這種實(shí)現(xiàn)方法帶來(lái)幾個(gè)顯著的問(wèn)題: 

運(yùn)行效率非常低。JAVA的速度慢是個(gè)老問(wèn)題了,EJB的速度慢不光是因?yàn)榇罅看a用JAVA實(shí)現(xiàn),而且由于它的結(jié)構(gòu),要根據(jù)數(shù)據(jù)表中的某一個(gè)屬性查出一行數(shù)據(jù),必須首先用SQL查詢查找到這一行的主鍵(Primary Key),然后通過(guò)主鍵來(lái)找到這個(gè)Bean,如果這個(gè)Bean不在內(nèi)存中--很不幸,這種情況經(jīng)常發(fā)生,那么實(shí)際上是執(zhí)行了兩次SQL查詢才找到一行數(shù)據(jù)。 
容器本身要管理事務(wù),以防數(shù)據(jù)的污讀、污寫(xiě)、死鎖等等一系列問(wèn)題。本來(lái)DBMS管理這類問(wèn)題已經(jīng)有很多年經(jīng)驗(yàn)了,已經(jīng)相當(dāng)完美的解決了這些問(wèn)題,可是EJB不得不通過(guò)一個(gè)Transcation Server來(lái)管理這些問(wèn)題。這使得容器的代碼變得極其復(fù)雜,另外編程人員也不得不重新熟悉這些接口。 
由于bean 中的數(shù)據(jù)是否存儲(chǔ)在數(shù)據(jù)庫(kù)里是由容器管理的,那么其他程序訪問(wèn)數(shù)據(jù)庫(kù)會(huì)帶來(lái)數(shù)據(jù)同步的問(wèn)題。因此,在EJB架構(gòu)中,外部程序不能直接訪問(wèn)數(shù)據(jù)庫(kù),只能通過(guò)EJB訪問(wèn)。

三、我們實(shí)現(xiàn)的目標(biāo) 
我們只想把數(shù)據(jù)庫(kù)對(duì)象更好的封裝起來(lái),為什么要購(gòu)買(mǎi)別人昂貴的代碼?為什么要為我們不會(huì)用到的分布式去犧牲大量的性能。我們想要盡量使用DBMS的功能,以實(shí)現(xiàn)最佳的性能和最簡(jiǎn)化的代碼。

事務(wù)處理最好還是用DBMS來(lái)管理,因?yàn)樗幌蚬艿煤芎茫沂聞?wù)處理的代碼很復(fù)雜,我不打算自己來(lái)完成。

我不打算用同一個(gè)對(duì)象來(lái)指向數(shù)據(jù)庫(kù)的一行。數(shù)據(jù)庫(kù)的一行數(shù)據(jù)在程序中可能有多個(gè)對(duì)象,這些對(duì)象都應(yīng)該是臨時(shí)對(duì)象,而不是永久對(duì)象。他們的共享問(wèn)題由DBMS本身加鎖來(lái)解決。

由于我們只是為訪問(wèn)DBMS提供了一個(gè)接口,外部程序完全可以不通過(guò)這個(gè)接口來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。

實(shí)現(xiàn)后,使用實(shí)體對(duì)象的代碼要簡(jiǎn)單。例如,數(shù)據(jù)庫(kù)里有一個(gè)表account,它只有兩個(gè)字段accountid和name,我們把它作為一個(gè)實(shí)體對(duì)象Account,假設(shè)我們要完成從數(shù)據(jù)庫(kù)查詢、修改、插入,使用它的代碼片段如下: 
Connection conn=ConnectionPool.getConn(); //也可以通過(guò)標(biāo)準(zhǔn)的DriverManager得到數(shù)據(jù)庫(kù)連接,這是完全一樣的

  Conn.setAutoCommit(false); //如果不使用事務(wù),這一行可以省去

Account a1=new Account(conn);

a1.getByAccountId(1); //查找到相應(yīng)記錄

System.out.println(a1.name);

a1.getByAccountIdForUpdate(1); //如果企圖修改一個(gè)對(duì)象,必須通過(guò)forUpdate系列的方法得到這個(gè)對(duì)象

  a1.name="new name";

  a1.update();  //修改原有記錄

Account a2=new Account(conn);

a2.accountId=3;

  a2.name="姚大";

  a2.insert();  //插入一條新記錄

  conn.commit();
 


實(shí)體對(duì)象的屬性通過(guò)方法修改是比較理想的方式,如用getName(),setName()兩個(gè)方法訪問(wèn)Name屬性。這還可以解決屬性之間相互關(guān)聯(lián)的問(wèn)題。例如,表中有一個(gè)地區(qū)代碼和地區(qū)名稱兩個(gè)域,必須保持一致,這就可以考慮在屬性設(shè)置方法中實(shí)現(xiàn)。在這里我們?yōu)榱撕?jiǎn)單,直接通過(guò)屬性修改,在一般情況下,我覺(jué)得也是可以接受到。

有一點(diǎn)必須注意的就是多線程程序所帶來(lái)的數(shù)據(jù)完整性問(wèn)題。對(duì)于我們常使用的從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)到對(duì)象中->修改對(duì)象屬性->更新到數(shù)據(jù)庫(kù)這個(gè)流程,非常容易出現(xiàn)數(shù)據(jù)完整性破壞問(wèn)題。比如一個(gè)進(jìn)程中甲對(duì)象讀取數(shù)據(jù)后,另一個(gè)進(jìn)程中乙對(duì)象又修改了同一數(shù)據(jù),這時(shí)甲對(duì)象再次更新數(shù)據(jù)庫(kù)會(huì)帶來(lái)污寫(xiě)。解決的辦法是對(duì)象增加一個(gè)方法給數(shù)據(jù)庫(kù)的這條記錄加鎖。例如Account.getByAccountId函數(shù)改為Account.getByAccountIdForUpdate,這個(gè)函數(shù)中相應(yīng)的sql語(yǔ)句(ORACLE數(shù)據(jù)庫(kù))改為"select AccountId,name from account where accountId=? for update",這樣數(shù)據(jù)取出后就自動(dòng)加鎖,這個(gè)鎖將會(huì)在事務(wù)提交或回滾時(shí)釋放。for update在SQLServer相應(yīng)的語(yǔ)法為holdlock。

說(shuō)到數(shù)據(jù)庫(kù)加鎖的問(wèn)題就不能不考慮到數(shù)據(jù)庫(kù)死鎖的可能。想完全避免死鎖是很困難的,只有盡量降低這種可能性。方法是:1、盡量少使用forUpdate這種函數(shù),只有在更改數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí)才使用。查詢的時(shí)候不要用,如果查詢后根據(jù)某個(gè)條件有可能修改,那么在查詢時(shí)不加鎖,在修改前重新調(diào)用forUpdate函數(shù)加鎖。2、盡量以某個(gè)特定的順序加鎖。例如有表A和表B,兩個(gè)程序都要同時(shí)更新這兩個(gè)表,最好都是先訪問(wèn)表A,再訪問(wèn)表B。

Oracle有個(gè)很好的功能就是自動(dòng)檢測(cè)死鎖。如果發(fā)生死鎖,會(huì)回滾一個(gè)事務(wù),并返回一個(gè)SQL錯(cuò)誤,我們的程序要檢測(cè)這個(gè)異常,處理程序中可能的錯(cuò)誤。

上面說(shuō)到的對(duì)象中,只有g(shù)etByXXX()這樣的方法,這種方法只會(huì)返回唯一的對(duì)象,如果想要返回一組對(duì)象,這時(shí)需要一個(gè)輔助類來(lái)實(shí)現(xiàn)。這個(gè)輔助類稱為對(duì)象瀏覽器EntityBrowser。再實(shí)體對(duì)象中返回一個(gè)對(duì)象瀏覽器的方法一般命名為getAllByXXX()

使用對(duì)象瀏覽器EntityBrowser要列出所有account表中的id和name的代碼如下,其實(shí)這個(gè)對(duì)象瀏覽器和Java定義的Enumeration接口的最大區(qū)別就是它有一個(gè)close方法。請(qǐng)看下面的代碼片斷,它輸出所有的Accout對(duì)象。


       Connection conn=ConnectionPool.getConn();

       Account a1=new Account(conn);

       EntityBrowser browser=a1.getAll();

       System.out.println("==Account List==");

       While (browser.hasMoreElement()) {

              Account a=(Account)browser.nextElement();

              System.out.print(a.accountId);

              System.out.print("--");

              System.out.println(a.name);

       }

       browser.close();
 


以上就是我們要實(shí)現(xiàn)的實(shí)體對(duì)象,下面介紹如何編寫(xiě)一個(gè)實(shí)體對(duì)象。

四、實(shí)現(xiàn)的代碼解釋 
首先,下面的代碼定義一個(gè)所有實(shí)體對(duì)象的基礎(chǔ)類EntityObject,這是一個(gè)抽象類,不能直接使用,但為其它實(shí)體對(duì)象定出了一個(gè)結(jié)構(gòu)。 
Import java.sql.*;
/**所有實(shí)體對(duì)象基礎(chǔ)類*/
abstract public class EntityObject {
       protected java.sql.Connection _conn;
       private boolean _dbStored;
       /**實(shí)體對(duì)象需要用一個(gè)數(shù)據(jù)庫(kù)連接初始化,這樣可以利用這個(gè)連接做事務(wù)提交或回滾*/
       public EntityObject(Connection conn) {_conn=conn;_dbStored=false;}

       /**這個(gè)方法用來(lái)插入新記錄,子類必須重定義這個(gè)方法*/
       public void insert() throws SQLException{ _dbStored=true;}

       /**這個(gè)方法用來(lái)修改數(shù)據(jù)庫(kù)原有記錄,子類必須重定義這個(gè)方法*/
       public void update() throws SQLException {_dbStored=true; }

	   /**這個(gè)方法用來(lái)刪除數(shù)據(jù)庫(kù)原有記錄,子類必須重定義這個(gè)方法*/
       public void delete() throws SQLException {_dbStored=false; }

       /**這個(gè)方法用來(lái)把數(shù)據(jù)庫(kù)select語(yǔ)句得出的結(jié)果映射到對(duì)象的屬性中去,子類必須重定義這個(gè)方法*/
       public void _setAttribute(ResultSet rs) throws SQLException {_dbStored=true; }

       /**這個(gè)方法可以判斷這個(gè)對(duì)象是否已存在數(shù)據(jù)庫(kù)中*/
       public boolean isDbStored() {return _dbStored;}
       /**這個(gè)方法將實(shí)體對(duì)象設(shè)為不存在數(shù)據(jù)庫(kù)中,所有的getByxxx()方法首先要調(diào)用這個(gè)方法,使本對(duì)象無(wú)效,才能用select語(yǔ)句得到符合條件的對(duì)象*/
       public void clearDbStored() {_dbStored=false;}
}


 


下面我們就可以定義一個(gè)實(shí)際的實(shí)體類。考慮一種簡(jiǎn)單情況,實(shí)體對(duì)象在關(guān)系數(shù)據(jù)庫(kù)中只用一張表表示。這樣的實(shí)體對(duì)象定義最簡(jiǎn)單。例如,數(shù)據(jù)庫(kù)里有一個(gè)表account,它只有兩個(gè)字段accountid和name,下面定義它的實(shí)體類。實(shí)體類必須重載insert,update,_setAttribute方法,然后根據(jù)需要增加getByXXX()方法,根據(jù)某個(gè)屬性從數(shù)據(jù)庫(kù)查找一個(gè)對(duì)象。


Import java.sql.*;
public class Account extends EntityObject {
/*這里定義實(shí)體對(duì)象類所有的屬性*/
       public int accountId;
       public String name;
//最好將實(shí)體對(duì)象中的屬性全部定義成私有,然后定義getXXX(), setXXX()兩個(gè)方法來(lái)訪問(wèn)這個(gè)屬性,這樣的封裝性最好,但略過(guò)于麻煩。如果數(shù)據(jù)結(jié)構(gòu)預(yù)料會(huì)經(jīng)常修改,最好用這個(gè)辦法。否則,定義成公有屬性也可。
       Public Account(Connection conn){ super(conn); }
       //重定義這個(gè)方法,執(zhí)行實(shí)際的sql命令
public void insert() throws SQLException {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区夜色| 国产精品69毛片高清亚洲| 精品国产区一区| 91色在线porny| 国模无码大尺度一区二区三区| 夜夜夜精品看看| 国产欧美日韩在线观看| 欧美高清视频www夜色资源网| 成人一道本在线| 美女被吸乳得到大胸91| 亚洲资源在线观看| 亚洲欧洲一区二区在线播放| xnxx国产精品| 欧美一区三区四区| 欧美影视一区二区三区| 成人app在线观看| 国产一区三区三区| 免费观看久久久4p| 亚洲aⅴ怡春院| 一区二区三区美女| 亚洲欧美一区二区三区极速播放 | 性久久久久久久| 日韩一区在线播放| 国产视频亚洲色图| 精品成人一区二区三区| 日韩午夜在线观看| 欧美日韩视频在线一区二区 | 欧美tickle裸体挠脚心vk| 欧美日韩黄色一区二区| 欧美在线一区二区| 欧亚洲嫩模精品一区三区| 99久久精品费精品国产一区二区| 国产99一区视频免费 | 欧美色电影在线| 欧美最新大片在线看| 91麻豆国产自产在线观看| 成人激情文学综合网| 国产成人精品www牛牛影视| 久久国产欧美日韩精品| 久久se这里有精品| 九一九一国产精品| 韩国一区二区视频| 国产成人在线看| 成人精品国产一区二区4080| 成人免费观看男女羞羞视频| 成人午夜视频网站| 99国产精品国产精品久久| 91丝袜国产在线播放| 欧美性受xxxx黑人xyx| 欧美色网站导航| 91精品国产一区二区三区香蕉| 欧美日韩国产综合一区二区三区 | 欧美综合亚洲图片综合区| 91国内精品野花午夜精品| 欧美在线一二三四区| 777欧美精品| 精品动漫一区二区三区在线观看| 久久久高清一区二区三区| 中文字幕不卡的av| 亚洲特黄一级片| 亚洲午夜激情网站| 婷婷中文字幕一区三区| 久久99这里只有精品| 国产成人精品三级麻豆| 日本精品一区二区三区四区的功能| 在线观看国产91| 欧美刺激脚交jootjob| 久久精品一区蜜桃臀影院| 国产精品国产三级国产aⅴ入口 | 久久综合五月天婷婷伊人| 国产欧美综合在线| 亚洲精品免费在线观看| 日本在线不卡视频| 国产精品资源网站| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 3d成人h动漫网站入口| 亚洲电影一区二区| 久久精品久久99精品久久| 国产成人av影院| 欧美午夜免费电影| 精品久久久久久无| 亚洲人成网站精品片在线观看| 婷婷六月综合亚洲| 国产成人综合在线播放| 欧美在线小视频| 精品国产露脸精彩对白| 亚洲免费观看高清完整版在线观看熊| 午夜av一区二区三区| 丁香亚洲综合激情啪啪综合| 欧美亚洲日本国产| 国产视频一区二区在线| 婷婷久久综合九色综合绿巨人| 国产精品一区二区不卡| 欧美性猛交xxxxxx富婆| 国产欧美日韩视频一区二区| 亚洲va欧美va天堂v国产综合| 国产高清亚洲一区| 7799精品视频| 亚洲天堂av老司机| 国产米奇在线777精品观看| 欧美色网站导航| 国产精品欧美经典| 蜜臀av性久久久久蜜臀aⅴ| 91黄色在线观看| 国产亚洲欧美一级| 日本不卡视频在线观看| 色婷婷久久综合| 国产精品色噜噜| 国产麻豆成人传媒免费观看| 91精品国产欧美一区二区18| 一区二区三区蜜桃| 色综合天天综合网天天狠天天 | 国产精品午夜电影| 久久精品国产99国产| 精品1区2区3区| 亚洲三级电影全部在线观看高清| 国产一区久久久| 日韩一区二区免费高清| 亚洲不卡av一区二区三区| 91碰在线视频| 国产精品久久777777| 国产一区二区三区免费观看| 日韩一区二区三区高清免费看看| 亚洲成人黄色小说| 欧美中文字幕不卡| 亚洲免费观看高清| 色综合久久88色综合天天免费| 国产精品―色哟哟| 成人午夜av影视| 国产视频一区在线观看| 国产精品伊人色| 久久精品欧美日韩| 国产精品 日产精品 欧美精品| 精品国产成人系列| 紧缚奴在线一区二区三区| 精品日韩99亚洲| 激情成人午夜视频| 26uuu亚洲婷婷狠狠天堂| 国产原创一区二区三区| 亚洲精品在线观看网站| 久国产精品韩国三级视频| 日韩三级视频在线看| 蜜桃视频在线观看一区二区| 日韩免费一区二区| 久99久精品视频免费观看| 精品福利二区三区| 国产成人av资源| 国产精品的网站| 色诱视频网站一区| 亚洲综合激情另类小说区| 欧美性一级生活| 日韩成人免费电影| 欧美精品一区二区久久久| 国产凹凸在线观看一区二区| 中文一区在线播放| 日本高清无吗v一区| 亚洲va欧美va人人爽午夜| 日韩欧美国产综合一区| 国产一区二区三区综合 | 日韩精品电影在线观看| 日韩视频在线你懂得| 国产乱淫av一区二区三区| 国产精品伦理一区二区| 欧美影院一区二区三区| 另类调教123区| 中文字幕精品三区| 欧美视频一区二区三区四区| 美腿丝袜亚洲三区| 国产精品免费丝袜| 欧美日韩专区在线| 精品综合免费视频观看| 亚洲欧美在线aaa| 欧美乱妇15p| 国产精品一二三区| 亚洲一二三级电影| 337p粉嫩大胆色噜噜噜噜亚洲| 91在线小视频| 麻豆精品国产传媒mv男同| 国产农村妇女毛片精品久久麻豆| 日本道免费精品一区二区三区| 欧美aaaaaa午夜精品| 综合久久国产九一剧情麻豆| 9191国产精品| 不卡欧美aaaaa| 日韩一区精品字幕| 国产精品久久久久毛片软件| 欧美精品久久99| 成人免费看的视频| 日韩成人精品在线观看| 国产精品视频一区二区三区不卡| 欧美日韩视频第一区| 成人一区在线看| 男人操女人的视频在线观看欧美| 国产精品欧美久久久久一区二区| 在线不卡a资源高清| www.亚洲免费av| 国产毛片精品视频| 日本伊人色综合网| 一区二区三区在线影院| 国产婷婷一区二区|