久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java SE 6中JDBC 4.0的增強特性

瀏覽:160日期:2024-06-06 09:05:09
內容: Java SE 6包含了對Java數據庫互連(JDBC)API的一些增強特性。這些增強特性的版本將定為JDBC version 4.0。JDBC新特性的目的是提供更簡單的設計和更好的開發體驗。本文將概述JDBC 4.0的增強特性和為企業級Java開發人員帶來的好處。我們將通過一個用Apache Derby作為后臺數據庫的貸款處理應用范例來探究JDBC的新特性。版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接作者:feichangcai;feichangcai原文:http://www.matrix.org.cn/resource/article/2006-11-19/Mustang+JDBC_c8c66f03-77c2-11db-bdce-bdc029e475a1.html關鍵字:Mustang;JDBCJava SE 6.0Java SE 6.0版以兼容性、穩定性和品質作為設計目標。本版本中有不少值得關注的增強特性,特別是JMX、web services、腳本語言支持(采用Rhino腳本引擎JSR 223把JavaScript技術與Java源碼進行集成)、數據庫連接、支持annotations和安全部分。另外,在JDBC API中還有不少新的特性,包括RowId支持和新增的SQLException子類。JDBC 4.0的特性得益于Mustang中的Java SE 服務提供商機制,Java開發人員再也不必用類似Class.forName()的代碼注冊JDBC驅動來明確加載JDBC。當調用DriverManager.getConnection()方法時,DriverManager類將自動設置合適的驅動程序。該特性向后兼容,因此無需對現有的JDBC代碼作任何改動。通過對Java應用程序訪問數據庫代碼的簡化,使得JDBC 4.0有更好的開發體驗。JDBC 4.0同時也提供了工具類來改進數據源和連接對象的管理,也改進了JDBC驅動加載和卸載機制。有了JDBC 4.0傳承自Java SE 5.0 (Tiger)版對元數據的支持功能,Java開發人員可用Annotations明確指明SQL查詢。基于標注的SQL查詢允許我們通過在Java代碼中使用Annotation關鍵字正確指明SQL查詢字符串。這樣,我們不必查看JDBC代碼和他所調用的數據庫兩份不同的文件。例如,用一個名為getActiveLoans()方法在貸款處理數據庫中獲取一個活躍貸款清單,你可以添加@Query(sql='SELECT * FROM LoanApplicationDetails WHERE LoanStatus = 'A'')標注來修飾該方法。并且,最終版的Java SE 6開發包(JDK 6)以及其相應的執行期環境(JRE 6)會捆綁一個基于Apache Derby的數據庫。這使得Java開發人員無需下載、安裝和配置一款單獨的數據庫產品就能探究JDBC的新特性。JDBC 4.0中增加的主要特性包括:1. JDBC驅動類的自動加載2. 連接管理的增強3. 對RowId SQL類型的支持4. SQL的DataSet實現使用了Annotations5. SQL異常處理的增強6. 對SQL XML的支持 另外,對BLOB/CLOB 的改進支持以及對國際字符集的支持也是JDBC 4.0的特性。這些特性將在隨后章節中詳細討論。JDBC驅動自動加載在JDBC 4.0中,我們不必再使用Class.forName()方法明確加載JDBC驅動。當調用getConnection方法時,DriverManager會嘗試從初始化時已經加載的JDBC驅動程序庫中選擇合適的驅動,以及他在當前應用的同一個類加載器中明確加載使用過的驅動。DriverManager中的getConnection和getDrivers方法已作了改進,以支持Java SE 服務提供商機制(SPM)。根據SPM,所謂服務就是一組廣為人知的接口和抽象類的集合,而服務提供商就是對某一服務的特定實現。SPM還指明了服務提供商的配置文件存放于META-INF/services目錄下。JDBC 4.0的驅動程序庫必須包含META-INF/services/java.sql.Driver文件。該文件包含對java.sql.Driver 實現的JDBC驅動文件名。例如,通過JDBC驅動連接Apache Derby數據庫,META-INF/services/java.sql.Driver將含有以下路徑:org.apache.derby.jdbc.EmbeddedDriver我們再來快速地看一下如何使用這一新特性加載一個JDBC驅動管理。以下顯示的是我們用以加載JDBC驅動的典型范例代碼。這里我們假設連接的是Apache Derby數據庫,因為該數據庫將在本文隨后的范例應用中用到: Class.forName('org.apache.derby.jdbc.EmbeddedDriver'); Connection conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword);但在JDBC 4.0中,我們不必寫Class.forName()這一行,我們只需要調用getConnection()方法取得數據庫連接。請注意,僅在完全獨立的模式下可使用該方法取得數據庫的連接。如果你使用一些類似數據庫連接池等技術管理連接,那么代碼將有所不同。連接管理在JDBC 4.0之前,我們依靠JDBC URL來定義一個數據源連接。現在有了JDBC 4.0,我們只需為標準連接工廠機制提供一組參數,就能獲取與任何數據源的連接。Connection和Statement接口增添的新方法為池環境中管理Statement對象提供了更好的連接狀態跟蹤機制和更大的靈活度。元數據工具(JSR-175)被用來管理活躍連接。我們還能獲得元數據信息,如:活躍連接狀態,并能指明XA事務的某一連接是標準式(Connection,在獨立應用的情況下)、池式(PooledConnection)還是分布式(XAConnection)。該接口僅在諸如WebLogic、WebSphere和JBoss等Java EE應用服務器的事務管理中使用。RowId支持JDBC 4.0增加了RowID接口以支持ROWID數據類型,Oracle和DB2數據庫支持該數據類型。在你需要把大量缺少唯一標識符字段的查詢記錄放入一個不允許重復對象的Collection容器(如Hashtable)的情況下,RowId很有用。我們可以用ResultSet的getRowId()方法獲取RowId,用PreparedStatement的setRowId()方法在查詢中使用RowId。關于RowId對象需要記住的一件重要事項是,RowId值在數據源之間不可移植。當在PreparedStatement和ResultSet中單獨使用set或update方法時,需要想到指明數據源。因此,RowId對象不應被不同的Connection和ResultSet對象共享。DatabaseMetaData中的getRowIdLifetime()方法可被用來確定RowId對象的有效存活時間。該方法的可能返回值如表1所列:RowId值 描述ROWID_UNSUPPORTED Doesn't support ROWID data type.ROWID_VALID_OTHER Lifetime of the RowID is dependent on database vendor implementation.ROWID_VALID_TRANSACTION Lifetime of the RowID is within the current transaction as long as the row in the database table is not deleted.ROWID_VALID_SESSION Lifetime of the RowID is the duration of the current session as long as the row in the database table is not deleted.ROWID_VALID_FOREVER Lifetime of the RowID is unlimited as long as the row in the database table is not deleted.基于標注的SQL查詢JDBC 4.0對標注(Java SE 5新增)作了進一步規范和補充,他允許開發人員不必再寫大量代碼就能達到聯系SQL查詢和Java類的目的。并且,通過使用Generics(JSR 014)和元數據(JSR 175) API,我們只要指明查詢的輸入和輸出參數就能將SQL查詢與Java對象進行關聯。我們還可以將查詢結果捆綁在Java類上以加快查詢輸出的處理。將查詢對象置于Java對象之中,我們可以不必像往常一樣寫所有代碼。在Java代碼中指明SQL查詢,經常用到兩種標注:Select標注Select標注用于在Java類中指明一個選擇查詢,使get方法能從數據庫表中取回數據。表2顯示的是Select標注的不同屬性及其作用:變量 類型 描述sql String SQL Select query string.value String Same as sql attribute.tableName String Name of the database table against which the sql will be invoked.readOnly, connected, scrollable Boolean Flags used to indicate if the returned DataSet is read-only or updateable, is connected to the back-end database, and is scrollable when used in connected mode respectively.allColumnsMapped Boolean Flag to indicate if the column names in the sql annotation element are mapped 1-to-1 with the fields in the DataSet.這里有一個應用Select標注從貸款數據庫中獲取所有活躍貸款的例子:interface LoanAppDetailsQuery extends BaseQuery { @Select('SELECT * FROM LoanDetais where LoanStatus = 'A'') DataSet getAllActiveLoans();}Sql標注同樣允許I/O參數(參數標記以一個問號后跟一個整型數據表示)。這里是一個參數化sql查詢的例子:interface LoanAppDetailsQuery extends BaseQuery { @Select(sql='SELECT * from LoanDetails where borrowerFirstName= ?1 and borrowerLastName= ?2') DataSet getLoanDetailsByBorrowerName(String borrFirstName, String borrLastName);}Update標注Update標注用于修飾Query接口方法以更新數據庫表中的一條或多條記錄。Update標注必須包含一個sql標注類型元素。這里是一個Update標注的例子:interface LoanAppDetailsQuery extends BaseQuery { @Update(sql='update LoanDetails set LoanStatus = ?1 where loanId = ?2') boolean updateLoanStatus(String loanStatus, int loanId);}SQL異常處理的增強特性異常處理是Java編程的一個重要部分,特別是對后臺關系數據庫進行連接或查詢時。SQLException是我們用以指出與數據庫相關錯誤的類。JDBC 4.0在SQLException處理中有不少增強。為了在處理SQLException時獲得更好的開發體驗,JDBC 4.0版作了如下增強:1. 新的SQLException子類2. 對因果關系的支持3. 對改進的for-each循環的支持新的SQLException類SQLException的新子類提供了一種方法,使Java開發人員能寫出更方便改動的錯誤處理代碼。JDBC 4.0介紹了兩個新的SQLException型別:• SQL non-transient exception • SQL transient exception Non-Transient Exception:除非修正引發SQLException異常的代碼,否則該異常在再次嘗試相同JDBC操作失敗后被拋出。表3顯示了JDBC 4.0新增的SQLNonTransientException異常子類(SQL 2003規范中定義了SQLState類的值):Exception class SQLState valueSQLFeatureNotSupportedException 0ASQLNonTransientConnectionException 08SQLDataException 22SQLIntegrityConstraintViolationException 23SQLInvalidAuthorizationException 28SQLSyntaxErrorException 42Transient Exception:當先前執行失敗的JDBC操作在沒有任何應用級功能干涉的情況下可能成功執行時,該異常被拋出。繼承自SQLTransientException的新異常如表4所列:Exception classSQLState valueSQLTransientConnectionException 08SQLTransactionRollbackException 40SQLTimeoutException None因果關系SQLException類現在支持Java SE鏈式異常機制(又稱因果工具),它使我們能在一個JDBC操作中處理多條SQLException異常(如果后臺數據庫支持多條異常特性)。這種情形發生在執行一條可能會拋出多條SQLException異常的語句時。我們可以調用SQLException中的getNextException()方法在異常鏈中進行迭代。這里是一些處理getNextException()因果關系的范例代碼:catch(SQLException ex) { while(ex != null) { LOG.error('SQL State:' + ex.getSQLState()); LOG.error('Error Code:' + ex.getErrorCode()); LOG.error('Message:' + ex.getMessage()); Throwable t = ex.getCause(); while(t != null) { LOG.error('Cause:' + t); t = t.getCause(); } ex = ex.getNextException(); }}增強的For-Each環Java SE 5中,SQLException類通過實現Iterable接口,增加了for-each循環支持的特性。這個循環的軌跡將會包括SQLException和其異常成因。這里的代碼片斷展示了SQLException中增加的增強型for-each環特性。catch(SQLException ex) { for(Throwable e : ex ) { LOG.error('Error occurred: ' + e); }}對國際字符集轉換的支持以下是JDBC類處理國際字符集的新增特性:1. JDBC數據類型:新增NCHAR、NVARCHAR、LONGNVARCHAR和NCLOB數據類型。2. PreparedStatement:新增setNString、setNCharacterStream和setNClob方法。3. CallableStatement:新增getNClob、getNString和getNCharacterStream方法。4. ResultSet:ResultSet接口新增updateNClob、updateNString和updateNCharacterStream方法。對大對象(BLOBs and CLOBs)支持的改進以下是JDBC 4.0處理LOBs的新增特性:1. Connection:新增方法(createBlob()、createClob()和createNClob())以創建BLOB、CLOB和NCLOB對象新實例。2. PreparedStatement:新增方法setBlob()、setClob()和setNClob()以使用InputStream對象插入BLOB對象,使用Reader對象插入CLOB和NCLOB對象。3. LOBs:在Blob、Clob和NClob接口中新增方法(free())以釋放這些對象所持有的資源。現在,讓我們來看一看java.sql和javax.jdbc包的新類,以及他們所提供的服務。JDBC 4.0 API:新類RowId (java.sql)正如先前所介紹的,該接口是對數據庫中SQL ROWID值的展示。ROWID是一種SQL內建的數據類型,用來標識數據庫中的一行特定數據。ROWID經常用于從表中返回查詢結果,而這些結果行往往缺少唯一ID字段。getRowId和setRowId等CallableStatement、PreparedStatement和ResultSet接口的方法允許程序員訪問SQL ROWID值。RowId接口還提供了一個方法(叫getBytes())把ROWID值作為一個byte型數組返回。DatabaseMetaData接口有一個名為getRowIdLifetime的新方法,用以確定某一RowId對象的存活時間。RowId的存活時間范圍可以是如下三種類型:1. 創建RowId的數據庫事務持續時間2. 創建RowId的會話持續時間3. 數據庫對應的記錄還未被刪除的持續時間DataSet (java.sql)DataSet接口提供了對執行SQL Query后所返回數據類型的安全檢查。DataSet還可以運行在連接或非連接模式。在連接模式下,DataSet類似于ResultSet的功能;而在非連接模式下,他類似于CachedRowSet的功能。由于DataSet繼承自List接口,因此我們能對查詢返回的記錄行進行迭代。對已有的類,JDBC 4.0也新增了不少方法。比如,Connection新增了createSQLXML和createSQLXML方法,ResultSet新增了getRowId方法。范例應用本文所示的范例應用是一個貸款處理應用軟件,他有一個貸款搜索頁面,用戶可以通過輸入貸款ID提交查詢表,以獲取貸款詳情。貸款搜索頁面調用一個控制器對象,而該對象又調用一個DAO對象訪問后臺數據庫,以取回貸款詳情。這些詳情包括貸款人、貸款數額、貸款截至日期等信息,并顯示在貸款詳情屏幕上。后臺數據庫中,我們有一個名為LoanApplicationDetails的表,來存儲貸款軟件的詳情。該范例應用的用例是通過指定貸款ID來獲取貸款詳情。當貸款已經登記并將抵押物與利息掛鉤后,貸款詳情就可以被獲取。表5顯示了貸款處理應用軟件項目的詳情。Name ValueProject Name JdbcAppProject Directory c:devprojectsJdbcAppDB Directory c:devdbserversapachederbyJDK Directory c:devjavajdk_1.6.0IDE Directory c:devtoolseclipseDatabase Apache Derby 10.1.2.1JDK 6.0 (beta 2 release)IDE Eclipse 3.1Unit Testing JUnit 4Build Ant 1.6.5下表所列的是我們連接貸款詳情Apache Derby數據庫所需的JDBC參數。這些參數存放于一個名為derby.properties的文本文件中,并置于項目的etc/jdbc目錄下(見表6)。Name ValueJDBC Driver File LoanAppMETA-INFservicesjava.sql.driverDriver org.apache.derby.ClientDriverURL jdbc:derby:derbyDBUser Id user1Password user1請注意:Apache Derby數據庫提供了兩種JDBC驅動:嵌入式驅動(org.apache.derby.jdbc.EmbeddedDriver)和客戶端/服務器驅動(org.apache.derby.jdbc.ClientDriver)。我在范例應用中使用客戶端/服務器版驅動。以下是使用ij工具來啟動Derby數據庫服務器并創建新數據庫的命令。要啟動Derby網絡服務器,需開啟一個命令行窗口,并運行如下命令(請根據你本機的環境改寫DERBY_INSTALL和JAVA_HOME環境變量)。set DERBY_INSTALL=C:devdbserversdb-derby-10.1.2.1-binset JAVA_HOME=C:devjavajdk1.6.0set DERBY_INSTALL=C:devdbserversdb-derby-10.1.3.1-binset CLASSPATH=%CLASSPATH%;%DERBY_INSTALL%libderby.jar; %DERBY_INSTALL%libderbytools.jar; %DERBY_INSTALL%libderbynet.jar;cd %DERBY_INSTALL%frameworksNetworkServerbinstartNetworkServer.bat要連接數據庫服務器并創建測試數據庫,需開啟另一個命令行窗口并運行以下命令。請確保DERBY_INSTALL和JAVA_HOME環境變量符合你本機的環境。set JAVA_HOME=C:devjavajdk1.6.0set DERBY_INSTALL=C:devdbserversdb-derby-10.1.3.1-binset CLASSPATH=%DERBY_INSTALL%libderbyclient.jar; %DERBY_INSTALL%libderbytools.jar;.%JAVA_HOME%binjava org.apache.derby.tools.ijconnect 'jdbc:derby://localhost:1527/LoanDB;create=true';測試要編譯Java源代碼,classpath需包括derby.jar和junit4.jar文件,這兩個文件在項目的lib目錄下。Classpath還需包括etc、etc/jdbc和etc/log4j目錄,這樣應用程序才能訪問JDBC屬性文件和Log4J配置文件。我創建了一個Ant構建腳本(在JdbcApp/build目錄下)來自動完成編譯和打包Java源代碼的工作。用于測試貸款詳情數據庫訪問對象的測試類名為LoanAppDetailsDAOTest。我們傳入貸款ID和貸款人參數就可以獲取貸款詳情。以下部分顯示了JDBC 4.0中自動加載JDBC驅動和基于標注的SQL查詢特性的代碼范例。JDBC驅動的自動加載BaseDAO抽象類有一個名為getConnection的方法用以獲得一個數據庫連接。以下代碼片斷顯示了該方法(注意,我們不必注冊JDBC驅動)。只要java.sql.Driver文件中有合適的驅動程序類名(org.apache.derby.jdbc.ClientDriver),JDBC驅動將被自動加載。protected Connection getConnection() throws DAOException { // Load JDBC properties first if (jdbcUrl == null || jdbcUser == null || jdbcPassword == null) { loadJdbcProperties(); } // Get Connection Connection conn = null; try { conn = DriverManager.getConnection(jdbcUrl, jdbcUser,jdbcPassword); } catch (SQLException sqle) { throw new DAOException('Error in getting a DB connection.',sqle); } return conn;}SQL標注LoanAppDetailsQuery接口有標注了的SQL查詢,用以獲取活躍貸款清單(criteria is loanstatus='A')和某貸款人的貸款詳情(在一個貸款人有多筆貸款的情況下)。在上文中,我們已經了解過了這些SQL標注。這里的范例代碼顯示了我們如何使用標注來調用已定義的SQL查詢。public DataSet getAllActiveLoans() throws Exception { // Get Connection Connection conn = getConnection(); LoanAppDetailsQuery query = null; DataSet loanDetails = null; query = QueryObjectFactory.createQueryObject( LoanAppDetailsQuery.class, conn); loanDetails = query.getAllActiveLoans(); return loanDetails;}public DataSet getLoanDetailsByBorrowerName( String borrFirstName, String borrLastName) throws Exception { // Get Connection Connection conn = getConnection(); LoanAppDetailsQuery query = null; DataSet loanDetails = null; query = QueryObjectFactory.createQueryObject( LoanAppDetailsQuery.class, conn); loanDetails = query.getLoanDetailsByBorrowerName( borrFirstName,borrLastName); return loanDetails;}結論JDBC 4.0在SQL方面為開發者提供了更好的開發體驗。JDBC 4.0的另一個目標是為API增加更豐富的工具以提供企業級JDBC特性管理JDBC資源。并且,JDBC 4.0 API還提供了JDBC驅動的移植方式,使其符合J2EE連接器架構(JCA)規范。這為JDBC廠商提供了向JDBC連接器遷移的能力。在面向企業服務的架構(SPA)中使用JDBC數據源,該移植方式很重要。在SOA中,JDBC數據源可被部署在另一個企業服務總線(ESB)架構內,而不需要為JDBC數據源另寫一份ESB實現代碼。本文中,我們了解了RowId支持,JDBC驅動加載和基于標注的SQL等JDBC 4.0的增強特性。未來,JDBC 4.0還將增加更多特性以支持SQL:2003。請參閱特性文檔,以獲取更多有關JDBC 4.0特性的信息。ResourcesMatrix-與Java共舞Sample Application Code Srini Penchikala是Flagstar Bank的一位信息系統問題專家。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd Java SE 6包含了對Java數據庫互連(JDBC)API的一些增強特性。這些增強特性的版本將定為JDBC version 4.0。JDBC新特性的目的是提供更簡單的設計和更好的開發體驗。本文將概述JDBC 4.0的增強特性和為企業級Java開發人員帶來的好處。我們將通過一個用Apache Derby作為后臺數據庫的貸款處理應用范例來探究JDBC的新特性。版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接作者:feichangcai;feichangcai
標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲欧美自拍视频 | 国产亚洲精品成人av久久ww | 日韩在线播放欧美字幕 | 日韩视频二区 | 亚洲精品免费看 | 人人做人人澡人人爽欧美 | 亚洲精品一区二区三区在线 | 深夜福利1000 | 国产99热 | 色婷婷一区二区三区四区 | 麻豆亚洲 | 日日综合| 亚洲一二三区电影 | 青青久久| 久久亚洲精品中文字幕 | 久久久久久国产视频 | 一级特黄 | 天天干天天搞天天射 | 免费毛片一区二区三区久久久 | 国产精品一二三 | 91视频免费观看网址 | 国产传媒在线观看 | 免费在线一区二区 | 久久久久久免费毛片精品 | 女男羞羞视频网站免费 | 亚洲成人自拍 | 丁香六月av | 国产视频99| 美女h在线观看 | 中文字幕在线日韩 | 欧美视频免费 | 欧美怡红院视频一区二区三区 | 国产精品久久国产精品 | 羞羞视频在线播放 | 国产精品美女www爽爽爽软件 | 国产一区成人 | 91在线精品秘密一区二区 | 日韩成人小视频 | av网站在线免费看 | 亚洲精品在线观看免费 | 日本乱偷中文字幕 | 国产情侣激情 | 九九色影院 | 久久精品| 午夜男人天堂 | aa毛片| 午夜精品一区 | 免费在线一区二区 | 男女精品视频 | 日韩1区3区4区第一页 | 欧美激情一区二区 | 亚洲国产精品99久久久久久久久 | 中文字幕国产一区 | 亚洲网站免费观看 | 欧美日韩国产精品一区二区 | 久草.com | 黄色毛片在线观看 | 日日夜夜草 | 欧美一区二区视频 | 国产精品美女一区二区三区四区 | 91在线视频在线 | 精品96久久久久久中文字幕无 | 国产一级一级特黄女人精品毛片 | 国产精品久久久久久久久久东京 | 黄色成人在线网站 | 日韩高清国产一区在线 | 国产精品自拍av | 91精品国产乱码久久久久久久久 | 国产精品69久久久久水密桃 | 在线观看精品91福利 | 免费av在线网站 | 欧美色综合 | 久草视频在线首页 | 女朋友的闺蜜3韩国三级 | 黄片毛片| 99亚洲| 亚洲欧洲一区二区 | 黄色官网在线观看 | 欧美视频免费在线 | 欧美日韩一区二区三区在线电影 | 久久99精品久久久水蜜桃 | 亚洲久草 | 欧美精品在线一区 | 欧美国产91 | 欧美日韩视频在线第一区 | 日韩三区视频 | www.久久99 | 91资源在线 | 欧美精品二区 | 日韩精品1区2区3区 成人黄页在线观看 | 亚洲 欧美日韩 国产 中文 | 久久久久国产成人精品亚洲午夜 | 久久机热| 亚洲免费视频网站 | 99热在线播放 | 日韩亚洲视频在线观看 | 欧美一级毛片免费观看 | 久久精品亚洲一区二区 | 黄色片视频在线观看 | 亚洲精品久久久一区二区三区 | 亚洲不卡视频 | 国产精品一区二区久久久 | 一二三四在线视频观看社区 | 99免费看| 新99热| 精品国产乱码一区二区三区 | 欧美一区二区三区xxxx监狱 | 毛片网站在线观看 | 91欧美在线 | 国产精品久久免费视频在线 | 免费av电影观看 | www.国产| 天天操操 | 国产在线一区二区三区 | 2019国产精品 | 欧美日韩一区在线观看 | 日韩中文在线视频 | 在线播放高清视频www | 欧美在线视频网站 | 精品国产髙清在线看国产毛片 | 日韩在线一区二区 | 日韩一区免费在线观看 | 一级片在线观看 | 国产在线观看免费 | 欧美视频综合 | 国产乱码精品一区二区三 | 永久精品 | 久久av综合 | 中国妞videos高潮 | 91精品区 | 成人亚洲视频 | 欧美在线观看免费观看视频 | 在线看亚洲 | 精品国产一区二区三区小蝌蚪 | 日韩午夜av | 91伦理片 | 成人自拍视频 | 久久精品成人 | 久久久免费av | www,99热| 精品一区视频 | 精品国产仑片一区二区三区 | 欧美高潮 | 午夜成人免费视频 | 中文字幕亚洲欧美精品一区四区 | 美女逼网站 | 久久久久久国产精品 | yy6080久久伦理一区二区 | 夜夜骑天天干 | 在线观看免费视频日韩 | 免费的日批视频 | 日韩精品一区二区三区在线观看 | 久久综合久 | 欧美一区二区三区免费 | 四虎影院网| 蜜月va乱码一区二区三区 | jjzz18国产 | 一本色道精品久久一区二区三区 | 成全视频免费观看在线看黑人 | 中文字幕第31页 | 国产一区二区精品丝袜 | 国产伦精品一区二区三区四区视频 | 亚洲三区在线观看 | 欧美日韩在线看 | 久久精品视频亚洲 | 久久综合九色综合欧美狠狠 | 国产欧美网址 | 欧美精品一区二区在线观看 | 丁香婷婷久久久综合精品国产 | 亚洲 欧美 日韩在线 | 日本久久精品 | 欧美永久精品 | 日韩一区二区在线免费 | 在线观看成人小视频 | 免费中文字幕 | 一级人爱视频 | 亚洲欧美日韩在线 | av久久| 亚洲精品成人 | 综合色婷婷一区二区亚洲欧美国产 | 色综合久久天天综合网 | 欧美簧片在线 | 久久国产精品免费一区二区三区 | 日韩久久一区二区 | 久久国产精品99久久久久久老狼 | 天天做天天看 | 一区二区中文 | a在线观看 | 日韩精品视频在线观看免费 | 国产色婷婷精品综合在线播放 | 国产精品久久久久久亚洲调教 | 精品91久久久 | 欧美 日韩 国产 成人 在线 | 色免费在线观看 | 国产一级一级 | 中文字幕视频二区 | 久久国产经典视频 | 久久精品网 | 亚洲欧美激情视频 | 国产一区二区精品久久 | 91大神免费观看 | 一级毛片国产 | 国产区精品 | 91在线视频播放 | 精品国产一区二区在线 | 一级毛片免费在线 | 羞羞视频免费观看入口 | 国产一区免费视频 | 久久国产区 | 国产精品国产 | 日本理伦片午夜理伦片 | 高清国产一区二区三区四区五区 | 黄色网址免费在线 | 成人欧美 | 亚洲日本欧美 | 男女全黄一级一级高潮免费看 | 最近免费中文字幕大全免费版视频 | 国产精品久久久 | 午夜视频网 | 天天天天天天操 | av免费网站在线观看 | 亚洲狠狠爱一区二区三区 | 美女扒开内裤让男人桶 | 亚洲一区免费在线观看 | 久草在线视频网 | 国产视频精品在线观看 | 国产在线小视频 | 黄瓜av | 在线一区观看 | 亚洲 自拍 另类 欧美 丝袜 | h视频在线免费 | h色视频在线观看 | 国产一区二区三区四区 | av官网在线 | 99久久久久国产精品免费 | av一区在线观看 | 国产精品亚洲欧美日韩一区在线 | 国产美女高潮 | 亚洲美女一区 | 超级乱淫片国语对白免费视频 | 成人不卡 | 美女福利视频 | 久久女人 | 国产在线一区二区三区 | 国产精品91网站 | 亚洲性生活免费视频 | 色久天堂 | 日韩城人网站 | 91成人精品 | 久久久精品高清 | 欧美激情性国产欧美无遮挡 | 日韩免费视频 | 国产一级特黄视频 | 91精品国产一区二区三区蜜臀 | 国产在线观看一区 | 亚洲精品久久久久久久久久久久久 | 精品日本久久 | 日夜夜精品 | 亚洲免费在线视频 | 久久久久无码国产精品一区 | 在线二区 | 日韩欧美国产一区二区 | 国产一区久久 | 狠狠插狠狠操 | 国产精品国产a级 | 97热在线| 国产欧美一区二区视频 | 狠狠狠色丁香婷婷综合久久五月 | 久久国| 日韩国产一区 | 伊人春色网 | 特级淫片女子高清视频在线观看 | 国产视频精品在线观看 | 日韩免费av一区二区 | 国产欧美日韩综合精品一区二区 | 色视频网站在线观看 | 国产成人久久精品77777 | 国产成人av在线 | 免费观看一级毛片 | 亚洲视频在线观看 | 91麻豆精品国产91久久久久久 | 国产精品色在线网站 | av影片在线| 中文字幕一区二区三区在线视频 | 五月天婷婷国产精品 | 一区二区三区免费在线观看 | 国产成人精品电影 | 欧洲美女性开放视频 | 国产一区在线免费 | 91精品视频在线播放 | 欧美区国产| 久久久999精品视频 99国产精品久久久久久久 | 黄色大片观看 | 成人日批视频 | 黄网在线观看 | 成人一区电影 | 精品免费视频 | 日韩福利在线观看 | 国产精品高潮呻吟久久av野狼 | 黄色大片视频 | 日韩中文字幕在线观看 | 欧美国产精品一区 | 亚洲国产二区 | 色婷婷一二三 | 欧美综合在线观看 | 日韩成人在线播放 | 久久伊 | 国产精久久一区二区三区 | 亚洲高清视频在线 | 北条麻妃一区二区三区在线观看 | 中文日韩在线 | 国产乱码精品一品二品 | 嫩草视频免费在线观看 | 亚洲免费婷婷 | 午夜视频在线免费观看 | 国产精品久久九九 | www.日韩视频 | 天堂影院一区二区 | 欧美成人久久 | 在线看片网站 | 中文字幕在线视频精品 | 日本黄色片免费 | 日日干夜夜干 | 久久69精品久久久久久久电影好 | 欧美一二三区在线 | 一级a性色生活片毛片 | 国产精品国产精品国产专区不蜜 | 成人激情视频在线免费观看 | 亚洲国产精品自拍 | 波多野结衣 一区二区三区 精品精品久久 | 91精品国产综合久久久久久丝袜 | 国产精品久久久久久久久晋中 | www久久精品 | 国产精品欧美久久久久一区二区 | 国产精品久久久久久久久久久久久 | 亚洲福利二区 | 99亚洲| 97久久超碰 | 欧美成人免费在线视频 | 久草热8精品视频在线观看 亚洲区在线 | 天堂中文在线视频 | 日韩高清中文字幕 | 亚洲一区二区在线 | 免费黄色网址在线播放 | 麻豆乱码国产一区二区三区 | 免费成人av网| 精久久| 成人精品一区二区三区中文字幕 | 好色视频在线观看 | 国产资源在线观看 | 亚洲一区二区中文字幕 | 九九免费视频 | 久久久久久亚洲精品 | 国产野精品久久久久久久不卡 | 天天射天天干 | 欧美a级成人淫片免费看 | 一区二区免费视频观看 | 亚洲每日更新 | www.久久久 | 国产一区二区三区在线免费观看 | www.男人天堂| 一区二区精品在线 | 成人性视频在线播放 | 一区二区三区影视 | 伊人网站 | 国产精品theporn| 久久久久久成人 | 国产欧美精品一区二区 | 日韩精品一区二区三区中文在线 | 国产在线资源 | 欧美一区二区三区 | 国产欧美日韩在线 | 草久在线视频 | 久久久91精品国产一区二区精品 | 国产精品久久久久久吹潮 | 国产日韩一区 | 亚洲国产二区三区 | 欧美美女黄色网 | 精品一区二区久久久久久久网站 | 国产日韩欧美一区 | 玖玖在线精品 | 成人性视频免费网站 | 国产性猛交xxxx免费看久久 | 久久久精品国产 | 日本一区二区三区四区 | 日韩国产欧美在线观看 | av免费观看网页 | 成人高清在线 | 久久午夜电影 | 国产一区在线视频 | 日本黄色大片免费看 | 久久蜜桃精品一区二区三区综合网 | 天天操综 | 日韩特黄一级欧美毛片特黄 | 国产一区日韩在线 | 激情毛片 | 国产一区二区三区在线免费观看 | 国产二区视频 | 在线免费观看色视频 | 一级色网站 | 91精品久久久久久久久 | 在线视频a | h片免费| 你懂的免费在线观看 | 中文字幕不卡在线 | www.五月天婷婷 | www.福利视频| 中国特级毛片 | 亚洲国产成人精品女人久久久 | 成人国产精品色哟哟 | 97伦理电影网 | 在线观看日韩 | 精品国产乱码久久久久久1区2区 | 在线观看视频一区二区 | 欧美日韩一区二区三区在线电影 | 亚洲国产一区二区在线观看 | 91免费观看 | 欧美日韩在线免费 | av影片在线播放 | 999视频在线免费观看 | 国产成人在线一区二区 | 北条麻妃99精品青青久久主播 | 国产成人精品高清久久 | 欧美三级电影在线播放 | 成人伊人 | www.91av在线| 操操操小说| 国产成人高清精品免费5388 | 国产一区二区视频在线观看 | 久久99精品久久久久久噜噜 | 欧日韩免费视频 | 天堂一区 | 99精品电影 | 日韩视频在线不卡 | 中文字幕在线观看 | 国产精品a免费一区久久电影 | 国产色在线 | 久久久久久国产精品 | 欧美日视频 | 欧美久久成人 | 精品亚洲一区二区三区四区五区 | 亚洲精品一区二区三区精华液 | 久久99深爱久久99精品 | 超碰在线播 | 欧美lesbianxxxxhd视频社区 | 91免费在线 | 久久美女视频 | 国产一区国产二区在线观看 | 欧美一区二区三区黄色 | 亚洲精选免费视频 | 亚洲国产高清视频 | 亚洲免费网址 | 狠狠干av | 日韩激情视频一区二区 | 日韩一二三区在线观看 | 日韩一区二区三区在线观看 | 精品国产31久久久久久 | 国产视频精品自拍 | 久久久网 | 中文字幕亚洲欧美日韩在线不卡 | 久久久美女 | 色综合视频 | 久久欧美视频 | 理论片87福利理论电影 | 亚洲影视一区 | 欧美精品中文字幕久久二区 | 国产一区二区三区四区视频 | 日韩视频在线观看一区二区 | 男人的天堂视频网站 | 奇米av在线 | 久久久精品久久久久久 | 日韩av福利 | 黄色av网站免费 | 中文在线视频 | 日视频 | 羞羞视频在线播放 | 超碰在线人人 | 午夜电影网址 | 成人亚洲 | 99影视 | 精品精品| 久久免费精品 | 91av导航 | 天天干狠狠干 | 亚洲一区二区 | 久久之精品 | 精品av | 欧美日韩久久 | 欧美性v | 亚洲福利一区二区 | 国产精品视频 | 国产探花在线精品一区二区 | 超碰免费在线观看 | 麻豆精品久久 | 亚洲欧美视频 | 成人影院欧美黄色 | 人人干在线 | 国产色黄视频 | 国产成人网 | 99久久电影 | 91久久久久久久久久久久久久久久 | 国产午夜精品一区二区三区免费 | 国产一区二区三区免费在线 | 国产视频1| 国产日韩精品一区二区 | 欧美国产激情 | 在线播放一区二区三区 | 精品欧美日韩 | 国产精品1区 | 一区二区三区精品 | 久久久精彩视频 | 麻豆产精国品免费入口 | 日韩精品一二三 | 国产一区二区三区在线免费观看 | 久久精品亚洲精品国产欧美kt∨ | 国产在线综合视频 | 欧美一级特黄aaaaaa大片在线观看 | 久久精品毛片 | 在线观看视频一区二区三区 | 亚洲精品国产a久久久久久 国产毛片毛片 | 国产精品久久九九 | 福利在线播放 | 99re在线观看 | 久久久久久毛片免费观看 | 日韩一区二区不卡 | 91伊人| 国产精品乱码一区二区三区 | 国产激情午夜 | 日韩国产在线观看 | 国产日本韩国在线 | 久久天天躁狠狠躁夜夜躁2014 | 精品中出| 日韩一区二区三区四区五区 | 草草网| 在线观看三区 | 天堂网中文在线 | 午夜免费视频 | 中文字幕 国产精品 | 午夜免费观看网站 | 午夜精品一区 | 国产欧美日韩 | 精品久久久中文字幕 | 国产伦精品一区二区三区四区视频 | 国产一在线| 婷婷成人在线 | 欧美xxxx色视频在线观看免费 | 在线亚洲欧美 | 国产中文在线 | www一起操| 狠狠艹 | 日日爽| 在线免费观看黄色 | 99视频精品 | 欧美性一级 | 亚洲精品v日韩精品 | 欧洲妇女成人淫片aaa视频 | 毛片网站大全 | 久久久99精品免费观看 | 国产1级片 | 色网网站 | 超碰人人在线 | 国产九九精品视频 | 久久久www | 色天天综合网 | 精品人成 | 免费毛片网站 | 99久久婷婷国产综合精品电影 | 男女视频网站 | 婷婷毛片 | 亚洲国产精品一区二区三区 | 国产偷久久9977 | 青青草免费在线视频 | 日韩精品一区二区三区在线观看 | 狠狠操电影| 中文字幕_第2页_高清免费在线 | 91精品国产一区二区三区蜜臀 | 日韩一二三区在线观看 | 一区二区三区影院 | 成人看片免费 | 亚洲国产成人精品女人久久久 | 精品无人乱码一区二区三区的优势 | 国产精品一区二区久久久久 | 天天天干天天天操 | 成人片免费看 | 午夜影视剧场 | 国产一区 | 中文字幕在线不卡 | av成人在线观看 | 天天干,夜夜操 | 午夜天堂精品久久久久 | 夜夜视频 | 一区二区三区四区在线 | 亚洲午夜成激人情在线影院 | 国产精品美女久久久久aⅴ国产馆 | 精品乱码久久久 | 日日爱视频 | 精品无人乱码一区二区三区 | 欧美高清成人 | 性欧美精品高清 | 精品在线二区 | 国产一区二区视频免费 | 国产亚洲视频在线 | 蜜桃视频网站在线观看 | 日韩精品第一页 | 国产中文在线播放 | 精品中文字幕一区二区三区 | 欧美在线视频一区 | 中文字幕在线免费视频 | 久久久久久网站 | 红桃成人少妇网站 | 99re视频在线播放 | 久久久一 | 中文字幕综合在线 | 亚洲视频成人 | 国产精品成人一区二区三区夜夜夜 |