精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JDBC數據庫連接池執行DDL和SQLJ存儲過程

開發 后端
如何利用Java的數據庫連接池JDBC執行DDL和SQLJ存儲過程的方法?本文將探討針對執行DDL和SQLJ存儲過程數據庫腳本文件引出的依賴數據庫環境和難以控制輸出的兩大缺點用JDBC執行DDL和SQLJ存儲過程的方法。

我們曾經介紹Java四大連接池中的JDBC(Java Data Base Connectivity,Java 數據庫連接池)是一種用于執行 SQL 語句的 Java API,可以為多種關系數據庫提供統一訪問接口,它由一組用 Java 語言編寫的類和接口組成。JDBC 為數據庫應用開發人員、數據庫前臺工具開發人員提供了一個標準的 API,據此可以構建更高級的工具和接口,使數據庫開發人員能夠用純 Java API 編寫數據庫應用程序。

DDL(Data Definition Language)是指數據定義語句用于定義和管理 SQL 模式、基本表、視圖、索引和存儲過程等數據庫中的對象。

SQLJ 由一系列定義了 SQL 與 Java 之間相互作用的子句和程序擴充組成。SQLJ 是在 Java 編程語言中靜態嵌入式 SQL。本文研究的 SQLJ 存儲過程特指 DB2 數據庫提供的內嵌 SQLJ 存儲過程,例如 SQLJ.DB2_INSTALL_JAR 存儲過程,它用于創建一個新定義的 JAR 文件到特定的數據庫。

本文在系統分析利用數據庫腳本文件執行 DDL 和 SQLJ 存儲過程缺點的基礎上,提出并詳細介紹了利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程的方法。

方法提出的背景

在 Java 與數據庫交互編程過程中,經常遇到這樣的場景:需要執行大量的 DDL 語句和 SQLJ 存儲過程,并且這些語句之間有著較強的依賴關系。下面是一個這樣的例子,SQL 語句中既有多條 DDL 又有對 DB2 內嵌 SQLJ 存儲過程的調用。

清單 1. DDL 和 SQLJ 存儲過程語句示例

  1. -- -- connect to the &database   
  2. connect to &database user &user using &password;   
  3. -- -- install Stored Procedure   
  4. DROP PROCEDURE DB2TOOL.CALLDB2ADVIS;   
  5. CALL SQLJ.REMOVE_JAR ('DB2TOOL.CALLDB2ADVIS');   
  6. CALL SQLJ.REFRESH_CLASSES();   
  7. CALL SQLJ.INSTALL_JAR('file:/home/luwsp.jar', 'DB2TOOL.CALLDB2ADVIS');------------- ①  
  8. CALL SQLJ.REFRESH_CLASSES();   
  9. -- -- create Stored Procedure   
  10. CREATE PROCEDURE DB2TOOL.CALLDB2ADVIS ( INOUT major_version INTEGER,   
  11.          INOUT minor_version INTEGER,   
  12.          IN requested_locale VARCHAR(33),   
  13.          IN xml_input BLOB(32M),   
  14.          IN xml_filter BLOB(4K),   
  15.          OUT xml_output BLOB(4K),   
  16.          OUT xml_message BLOB(64K) )   
  17. DYNAMIC RESULT SETS 3   
  18. NOT DETERMINISTIC   
  19. LANGUAGE Java   
  20. EXTERNAL NAME 'DB2TOOL.CALLDB2ADVIS:com.ibm.datatools.ia.luw.CALLDB2ADVIS.cALLDB2ADVIS'  
  21.  FENCED   
  22.  THREADSAFE   
  23.  PARAMETER STYLE JAVA;      --------------------------------------------------------- ②  
  24. -- -- grant the execution privilege to public       
  25. GRANT EXECUTE ON PROCEDURE DB2TOOL.CALLDB2ADVIS TO PUBLIC WITH GRANT OPTION;   
  26. connect reset;   
  27. terminate;   
  28.  

在上面的 SQL 語句中,語句之間的依賴性很強。例如,如果語句①不能正確執行,直接影響到語句②的執行,因為它們之前存在著引用關系。針對這種情況的 Java 數據庫交互編程,通常采用將這些語句封裝成一個數據庫 SQL 腳本文件去執行,主要執行過程如下:

◆準備數據庫腳本文件的執行環境,主要是對一些環境變量的設置;

◆運行數據庫腳本文件,把輸出結果定向到特定的文件;

◆Java 程序系統的分析數據庫腳本文件的輸出結果,得到每一條 SQL 的運行狀況;

◆清除數據庫腳本文件的執行環境,還原到初始狀態。

這種運行 DDL 和 SQLJ 存儲過程的方法,存在著以下幾個缺點:

◆依賴數據庫環境。需要在過程的開始階段,對腳本文件的執行環境進行初始化,在腳本文件運行結束后,必須對環境進行清除;

◆難以對執行過程進行控制。例如在清單 1 中的 SQL 語句執行過程中,如果語句①執行失敗,腳本文件不會終止運行并把錯誤信息發送給 Java 程序,而會繼續執行下一條 SQL 語句,這時可以確定語句②必定執行失敗,但是腳本文件還是強制執行語句②;

◆腳本文件的輸出結果難以處理。由于 SQL 語句在不同的數據庫環境下,輸出結果的格式信息有所變化,這就極大的影響了 Java 程序讀取輸出結果的準確性,難以精確的定位到出現問題的 SQL 語句;

本文針對執行 DDL 和 SQLJ 存儲過程數據庫腳本文件引出的這些缺點,提出了利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程的方法。方法的一些簡單示例代碼如下。

清單 2. 簡單的示例代碼

  1. Driver dbDriver=(Driver)Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();  
  2.         String url="jdbc:db2://"+host+":"+port+"/"+database+"";  
  3.         Properties p = new Properties();  
  4.         p.put("user", username);  
  5.         p.put("password",password);  
  6.         conndbDriver.connect(url,p);  
  7.     try{   
  8.         stat=conn.createStatement();   
  9.         stat.executeUpdate(“DROP PROCEDURE DB2TOOL.CALLDB2ADVIS”);  
  10.         stmt = conn.prepareCall(“CALL SQLJ.REFRESH_CLASSES()”);  
  11.         stmt.execute();                       
  12.     }  
  13.     catch(SQLException e){  
  14.         System.out.println(e.getMessage());  
  15.     }  
  16.         stat.close();  
  17.         stmt.close();  
  18.         conn.close();  
  19.  

通過上面的示例代碼,可以了解到利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程的基本步驟:

◆建立數據庫連接;

◆根據需要創建合適的 Java JDBC Statement 對象;

◆根據 SQL 語句選擇合適的執行方法。

在實際的 Java 與數據庫交互編程的環境中,總結分析這種方法具有下列優點:

◆容易與 Java 程序進行交互??梢垣@取每一條 SQL 語句的執行情況,通知 Java 程序選擇運行對應的處理邏輯;

◆不依賴數據庫環境。完全脫離了數據庫環境的限制,能對本地或遠程的數據庫進行高效的數據操作。

◆能精確的獲取每條 SQL 語句的執行狀態。如果某一條 SQL 語句運行失敗,Java 程序能及時的捕獲到對應的異常信息。

由于 Java JDBC 是通過 Statement 對象來執行 SQL 語句的,所以它是執行 DDL 和 SQLJ 存儲過程的入口,下面將詳細介紹 JDBC 包含的幾種 Statement 對象。

執行 DDL 和 SQLJ 存儲過程的入口:Java JDBC Statement

Java JDBC Statement 對象用于將 SQL 語句發送到數據庫中。實際上有三種 Statement 對象,它們都作為在給定連接上執行 SQL 語句的包容器:Statement、PreparedStatement 和 CallableStatement。它們都專用于發送特定類型的 SQL 語句。三種 Statement 對象的關系如圖 1 所示。

圖 1. 三種 Statement 對象關系 
圖 1. 三種 Statement 對象關系

Statement 對象用于執行不帶參數的靜態 SQL 語句,提供了執行語句和獲取結果的基本方法。它的 execute(String sql) 和 executeUpdate(String sql) 方法支持執行 DDL 語句。示例代碼如下。

清單 3. Statement 對象的示例代碼

  1. Statement stat=conn.createStatement();   
  2. stat.executeUpdate(“DROP PROCEDURE DB2TOOL.CALLDB2ADVIS”);   
  3. stat.execute(“DROP FUNCTION DB2TOOL.DEMO_LIC”);   
  4. stat.close();   
  5.  

PreparedStatement 對象用于執行帶或不帶 IN 參數的預編譯 SQL 語句,它從 Statement 繼承而來,添加了處理輸入參數的方法,有防止 SQL 注入的功能,還有較好的執行效率。它的 execute() 和 executeUpdate() 方法支持執行 DDL 語句。使用示例代碼如下。

清單 4. PreparedStatement 對象的示例代碼

  1. PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES   
  2. SET SALARY = ? WHERE ID = ?");   
  3.     pstmt.setBigDecimal(1, 153833.00);   
  4.     pstmt.setInt(2, 110592);   
  5.     pstmt.executeUpdate();   
  6.     pstmt.close();   
  7.  

CallableStatement 對象用于執行對數據庫已有存儲過程的調用,它從 PreparedStatement 繼承而來,添加了處理輸出參數的方法。它的 execute() 和 executeUpdate() 方法支持執行 DDL 語句。使用示例代碼如下。

清單 5. CallableStatement 對象的示例代碼

  1. CallableStatement cstm = connection.prepareCall("CALL SQLJ.REMOVE_JAR(?)");  
  2.     cstmt.setString(1, “test”);  
  3.     cstmt.execute();  
  4.     cstmt.close();  
  5.  

Java JDBC 執行 DDL 和 SQLJ 存儲過程:實例演示

上一部分詳細介紹了 Java JDBC 的三種 Statement 對象,了解了它們之間的關系和特定的操作對象,為利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程奠定了理論基礎。下面的兩個程序實例,將充分利用這三種 Statement 對象,展示這種方法的實現過程及其靈活性。

實例 1 演示利用 Java JDBC 執行 DDL 的方法。需要執行的 DDL 語句如下:

清單 6. DDL 語句示例

  1. DROP FUNCTION DB2TOOL.DEMO_LIC;   
  2. CREATE FUNCTION DB2TOOL.DEMO_LIC() RETURNS VARCHAR(8) LANGUAGE SQL CONTAINS SQL   
  3.     NO EXTERNAL ACTION DETERMINISTIC RETURN VARCHAR('DEMO_V10');   
  4. GRANT EXECUTE ON FUNCTION DB2TOOL.DEMO_LIC TO PUBLIC WITH GRANT OPTION;  
  5.  

清單 7. JDBC 執行 DDL 代碼示例

  1. Driver dbDriver=(Driver)Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();  
  2.     String url="jdbc:db2://"+host+":"+port+"/"+database+"";  
  3.     Properties p = new Properties();  
  4.     p.put("user", username);  
  5.     p.put("password",password);  
  6.     conndbDriver.connect(url,p);  
  7.     try{  
  8.         Statement stat=conn.createStatement();  
  9.         stat.executeUpdate(“DROP FUNCTION DB2TOOL.DEMO_LIC”);  
  10.         PreparedStatement pstmt = conn.prepareStatement(  
  11.             "CREATE FUNCTION DB2TOOL.DEMO_LIC() RETURNS VARCHAR(8) LANGUAGE SQL   
  12.             CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC RETURN VARCHAR(?)");  
  13.         pstmt.setString(1,”DEMO_V10”);  
  14.         pstmt.execute();  
  15.         stat.execute(“GRANT EXECUTE ON FUNCTION DB2TOOL.DEMO_LIC TO   
  16.             PUBLIC WITH GRANT OPTION”);  
  17.     } catch(SQLException e){  
  18.         System.out.println(e.getMessage());  
  19.     }  
  20.     stat.close();  
  21.     pstmt.close();  
  22.     conn.close();  
  23.  

實例 2 演示利用 Java JDBC 執行 SQLJ 存儲過程的方法。需要執行的 SQLJ 語句如下:

清單 8. SQLJ 存儲過程語句示例

  1. CALL SQLJ.REMOVE_JAR ('DB2TOOL.CALLDB2ADVIS');   
  2. CALL SQLJ.REFRESH_CLASSES();   
  3. CALL SQLJ.INSTALL_JAR('file:/home/luwsp.jar', 'DB2TOOL.CALLDB2ADVIS');   
  4. CALL SQLJ.REFRESH_CLASSES();   
  5.  

由于 SQLJ.INSTALL_JAR 存儲過程僅支持在本地數據庫創建一個新定義的 JAR 文件,所以在下面的 JDBC 執行代碼中使用 SQLJ.DB2_INSTALL_JAR 代替它,擴大它的使用范圍。

清單 9. JDBC 執行 SQLJ 存儲過程代碼示例

  1. Driver dbDriver=(Driver)Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();  
  2. String url="jdbc:db2://"+host+":"+port+"/"+database+"";   
  3. Properties p = new Properties();   
  4. p.put("user", username);   
  5. p.put("password",password);   
  6. conndbDriver.connect(url,p);   
  7. CallableStatement cstmt = null;       
  8. try{   
  9.     cstmt = conn.prepareCall(“CALL SQLJ.REMOVE_JAR (?)”);   
  10.     cstmt.setString(1,”DB2TOOL.CALLDB2ADVIS”);   
  11.     cstmt.execute();       
  12.     cstmt = conn.prepareCall(“CALL SQLJ.REFRESH_CLASSES()”);   
  13.     cstmt.execute();   
  14.     File aFile = new File(“/home/luwsp.jar”);   
  15.     FileInputStream inputStream = new FileInputStream(aFile);  
  16.     cstmt = conn.prepareCall(“Call SQLJ.DB2_INSTALL_JAR(?,?,?)”);  
  17.     cstmt.setBinaryStream(1, inputStream, (int)aFile.length());  
  18.     cstmt.setString(2,”DB2TOOL.CALLDB2ADVIS”);   
  19.     cstmt.setInt(3, 0);   
  20.     cstmt.execute();                   
  21.     cstmt = conn.prepareCall(“CALL SQLJ.REFRESH_CLASSES()”);   
  22.     cstmt.execute();   
  23. } catch(SQLException e){   
  24.     System.out.println(e.getMessage());   
  25. }   
  26. cstmt.close();       
  27. conn.close();   
  28.  

上面的兩個實例詳細的展示了利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程的方法,在執行的過程中可以確定每一條 SQL 語句的執行狀態,例如三種 Statement 對應的 execute(String sql) 和 execute() 方法能返回 boolean 類型的值,executeUpdate(String sql) 和 executeUpdate() 方法能返回 int 類型的值,可以根據這些返回值精確的確定每條 SQL 的執行狀態,另外也可以通過捕獲 SQLException 獲得執行情況。這兩個實例充分體現了本文提出的方法具有靈活性、易于控制執行過程、易于獲得 SQL 執行狀態等優點。

總結

本文主要介紹了利用 Java JDBC 執行 DDL 和 SQLJ 存儲過程的方法,描述了方法提出的背景,詳細學習了 Java JDBC 中的三種 Statement 對象,最后通過兩個實例展現了方法實現的過程,進一步證明了使用這種方法,可以使 Java 程序和 DDL,SQLJ 的交互操作變得非常靈活,提高 Java 編程的效率。
 

【編輯推薦】

  1. 幾個主流的Java連接池
  2. Java的JDBC數據庫連接池實現方法
  3. Tomcat5+MySQL JDBC連接池配置
  4. 基于JMX監控下的JBoss數據庫連接池
  5. JBoss配置mysql數據庫連接池
責任編輯:佚名 來源: developerworks
相關推薦

2009-07-17 13:32:49

JDBC數據庫

2009-06-24 07:53:47

Hibernate數據

2010-10-26 16:15:33

連接Oracle數據庫

2010-03-18 15:09:15

python數據庫連接

2017-06-22 14:13:07

PythonMySQLpymysqlpool

2019-11-27 10:31:51

數據庫連接池內存

2025-11-03 09:26:21

2009-06-16 09:25:31

JBoss配置

2021-08-12 06:52:01

.NET數據庫連接池

2020-04-30 14:38:51

數據庫連接池線程

2018-10-10 14:27:34

數據庫連接池MySQL

2018-01-03 14:32:32

2009-07-29 09:33:14

ASP.NET數據庫連

2011-05-19 09:53:33

數據庫連接池

2025-01-16 10:30:49

2011-07-29 15:11:42

WeblogicOracle數據庫連接

2010-03-18 14:55:17

Python數據庫連接

2009-07-09 17:36:44

JDBC連接池配置

2009-07-22 11:45:43

2009-01-15 09:02:27

JMXJBossJMX監控
點贊
收藏

51CTO技術棧公眾號

一区二区三区网站| 欧美黑人一区| 岛国av在线一区| 5566日本婷婷色中文字幕97| 波多野吉衣中文字幕| 成人国产精品| 亚洲综合一二区| 欧美日韩视频在线一区二区观看视频 | 国产真实乱人偷精品视频| 欧美一性一交| 欧美日韩视频在线观看一区二区三区 | 日本免费久久高清视频| 香蕉成人在线视频| 美女扒开腿让男人桶爽久久动漫| 色视频成人在线观看免| 超碰97在线看| 色欧美激情视频在线| 顶级嫩模精品视频在线看| 国产精品久久久久久av| 久久精品国产亚洲AV无码麻豆| 视频一区中文| 日韩免费性生活视频播放| 最近免费中文字幕中文高清百度| 在线免费观看的av| 欧美激情一区二区三区四区| av色综合网| 97超碰人人草| 久久深夜福利| 久久久久久网站| 黑人操日本美女| 欧美日韩中文字幕一区二区三区 | 免费看男男www网站入口在线| 国产一区视频网站| 国产精品久久久久久久久久ktv| 国产无码精品在线观看| 91精品国产福利在线观看麻豆| 日韩精品免费综合视频在线播放| 成年人看片网站| 国产精品视频一区视频二区| 欧美丝袜丝交足nylons| 男女午夜激情视频| 2021中文字幕在线| 亚洲一二三四在线| 国产香蕉一区二区三区| 免费网站黄在线观看| 国产欧美精品日韩区二区麻豆天美| 国内一区二区三区在线视频| 亚洲奶汁xxxx哺乳期| 精品一区二区三区在线播放| 国产一区红桃视频| 亚洲视频一区二区三区四区| 日韩av午夜在线观看| 日本午夜精品理论片a级appf发布| 亚洲天堂日韩av| av成人黄色| 97国产在线观看| 日韩手机在线观看| 亚洲精品1区| 久久久亚洲国产天美传媒修理工| 美女福利视频在线观看| 午夜欧美精品久久久久久久| 欧美超级乱淫片喷水| 成年人av电影| 雨宫琴音一区二区在线| 国自产精品手机在线观看视频| 国产 日韩 欧美 成人| 亚洲久久视频| 国产成人91久久精品| 91在线视频免费播放| 人妖欧美一区二区| 成人国产精品日本在线| 国产成人免费看一级大黄| 国产精品主播直播| 国产成人免费观看| 亚洲人成色777777老人头| 91尤物视频在线观看| 欧洲一区二区日韩在线视频观看免费| 番号集在线观看| 亚洲三级小视频| 国产美女在线一区| 性欧美freehd18| 欧美精品一二三| 蜜臀aⅴ国产精品久久久国产老师| 激情av综合| 亚洲网站视频福利| 疯狂试爱三2浴室激情视频| 国产精品地址| 日韩av观看网址| 国产一区二区女内射| 国产白丝精品91爽爽久久| 国产呦系列欧美呦日韩呦| 国产精品一区二区婷婷| 怡红院av一区二区三区| 国产午夜伦鲁鲁| 亚洲欧美专区| 亚洲精品理论电影| 日韩在线观看免| 狠狠综合久久av一区二区老牛| 欧美在线亚洲一区| 国产又黄又粗又硬| 91片在线免费观看| 一区二区三区四区久久| 韩国成人二区| 欧美一区二区三区爱爱| 女女互磨互喷水高潮les呻吟| 亚洲va在线| 日本久久久久久久| 亚洲国产剧情在线观看| 久久一区二区三区四区| 青少年xxxxx性开放hg| 美女扒开腿让男人桶爽久久软| 欧美日韩一级二级三级| 捆绑裸体绳奴bdsm亚洲| 久久久久久久久久久9不雅视频| 81精品国产乱码久久久久久| 国产欧美第一页| 国产亚洲精品久| 亚洲不卡中文字幕无码| 免费看一区二区三区| 国产一区二区三区高清在线观看| 欧美亚洲天堂网| 国产在线精品免费av| 精品免费二区三区三区高中清不卡 | 亚洲一区二区av| 亚洲欧美另类自拍| 日本在线视频免费| 国产高清成人在线| 日本xxx免费| 欧美韩国日本| 中文字幕精品久久| 亚洲av中文无码乱人伦在线视色| 丁香另类激情小说| 一本色道久久88亚洲精品综合| 成人国产精品一区二区免费麻豆| 亚洲深夜福利视频| 影音先锋在线国产| 99re这里只有精品6| 99色这里只有精品| 国产一级成人av| 国内久久久精品| 天天操天天干天天爱| 亚洲二区在线观看| 在线中文字日产幕| 亚洲激情专区| 精品日韩欧美| 涩涩视频在线播放| 亚洲欧美日韩直播| 亚洲第一网站在线观看| 久久精品欧美一区二区三区麻豆| 六月丁香婷婷激情| 欧洲激情综合| 国产精品亚发布| 免费网站黄在线观看| 欧美巨大另类极品videosbest| 天天摸日日摸狠狠添| 美国欧美日韩国产在线播放| 一区二区三区四区免费视频| av在线成人| 欧美成人午夜激情| 蜜臀av午夜精品| 欧美日韩一区二区在线| 亚洲精品国产熟女久久久| 日韩精品国产欧美| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲人xxxx| 亚洲少妇一区二区| 亚洲精品护士| 日韩免费av一区二区三区| 91亚洲视频| 美女视频黄免费的亚洲男人天堂| 亚洲精品久久久蜜桃动漫| 香蕉成人啪国产精品视频综合网| 国产精品一级黄片| 免费视频一区二区| 成人国产在线看| 亚洲高清极品| 成人av在线亚洲| 成入视频在线观看| 国产一区二区黄| www.久久伊人| 色呦呦日韩精品| 天天色影综合网| 91在线视频网址| 污污网站免费观看| 亚洲黄色视屏| 亚洲欧美日产图| 国内精品免费| 国产伊人精品在线| 狼人综合视频| 色婷婷综合成人| 午夜视频在线播放| 欧美伦理视频网站| www.国产高清| 中文字幕综合网| 国产精品1000部啪视频| 久久精品国内一区二区三区| 男女超爽视频免费播放| 99精品电影| 免费在线成人av| 日本一区二区乱| 国产精品成人av性教育| 国产蜜臀一区二区打屁股调教| 一本久久综合亚洲鲁鲁| 亚洲h视频在线观看| 欧美偷拍一区二区| 99热国产在线观看| 成人免费视频在线观看| 无码国产69精品久久久久同性| 国产精品一二二区| 日本肉体xxxx裸体xxx免费| 中国女人久久久| 欧美日韩中文字幕在线播放| 欧美在线免费看视频| 国产在线精品一区二区三区》| 日韩三区四区| 国产国语videosex另类| 久热在线观看视频| 欧美激情免费在线| 免费不卡视频| 中文字幕日韩av电影| 亚洲人妻一区二区三区| 精品少妇一区二区三区在线播放| 夜夜嗨aⅴ一区二区三区| 欧美性猛交xxxx乱大交3| 久久久久久免费观看| 亚洲欧洲美洲综合色网| 99久久99久久精品免费| 久久久久久久综合| 亚洲自拍偷拍一区二区| 99久久久久久99| 中文字幕第九页| 国产高清不卡一区| 黄色片子免费看| 国产在线精品免费| 午夜xxxxx| 国产在线精品一区二区| 国产三级精品三级在线| 久久av中文字幕片| 一级做a免费视频| 久久精品国产99国产精品| 国内自拍视频网| 日韩中文字幕一区二区三区| 国产成人无码一二三区视频| 亚洲一区国产| 红桃av在线播放| 久久午夜视频| 国产三级日本三级在线播放| 老司机精品久久| 国产aaaaa毛片| 麻豆成人免费电影| 中文字幕一区二区在线观看视频 | 国产成人亚洲欧美| 另类在线视频| 久中文字幕一区| 精品国产一区探花在线观看| 水蜜桃一区二区三区| 日韩啪啪电影网| 国产系列第一页| 午夜国产精品视频| 欧美 日韩 亚洲 一区| 西西裸体人体做爰大胆久久久| 女人喷潮完整视频| 日韩国产在线观看一区| 三上悠亚av一区二区三区| 免费高清在线视频一区·| 亚洲男人天堂2021| 成人免费电影视频| av中文字幕免费观看| 国产精品乱码妇女bbbb| 欧美卡一卡二卡三| 同产精品九九九| 中国女人真人一级毛片| 日韩一区二区三区免费看| 天天射天天操天天干| 一区二区亚洲欧洲国产日韩| 国产在线看片| 69视频在线播放| 欧美videos粗暴| 国产精品二区在线观看| 一本久久青青| 亚洲小说欧美另类激情| 99在线精品免费视频九九视| 麻豆一区二区三区视频| 成人午夜免费视频| 女人十八毛片嫩草av| 亚洲精品五月天| 97久久久久久久| 91精品国产综合久久久久| 头脑特工队2在线播放| 色偷偷偷亚洲综合网另类 | 欧美国产高潮xxxx1819| 日韩欧美亚洲天堂| 韩国av一区二区三区四区 | 视频一区在线观看| 久久久久久av无码免费网站下载| 久久精品道一区二区三区| 日韩av自拍偷拍| 久久久久久久免费视频了| 日韩福利小视频| 色婷婷激情一区二区三区| 国产极品久久久| 这里只有视频精品| 色综合桃花网| wwwxx欧美| 99久久夜色精品国产亚洲狼| 99精品在线免费视频| 国产一区福利在线| 亚洲AV无码成人精品区明星换面| 亚洲一区二区综合| 国产又粗又黄又爽的视频| 亚洲欧美精品一区二区| sm久久捆绑调教精品一区| 91九色精品视频| 欧美一级精品片在线看| 国产在线观看欧美| 国内久久精品视频| 18啪啪污污免费网站| 欧美视频在线视频| 手机在线观看毛片| 欧美日韩国产二区| 美女精品视频在线| 欧美 另类 交| 久久精品二区亚洲w码| 波多野结衣一二三四区| 一本一道波多野结衣一区二区| 黄频网站在线观看| 精品中文字幕在线2019| 亚洲精品自拍| 亚洲一区二区在线看| 老牛影视一区二区三区| 精品无码人妻一区| 欧美视频二区36p| 欧洲亚洲在线| 青青在线视频一区二区三区| 清纯唯美亚洲经典中文字幕| 午夜免费福利小电影| youjizz国产精品| 亚洲精品www久久久久久| 亚洲国产成人爱av在线播放| 丁香花在线电影| 国产精品国产三级欧美二区| 在线日韩中文| 国产精品久久久免费观看| 亚洲成av人片观看| 亚欧洲精品视频| 欧美在线播放视频| 久久99视频| 99sesese| 亚洲女同一区二区| 午夜精品一区二区三| 久久久久久国产精品久久| 国产精品玖玖玖在线资源| 欧美精品久久久久久久免费| 91在线观看一区二区| 无码无套少妇毛多18pxxxx| 亚洲香蕉伊综合在人在线视看| 97成人超碰| 男女爱爱视频网站| 成人精品电影在线观看| 影音先锋亚洲天堂| 亚洲视频欧美视频| 成人免费在线观看视频| 免费在线观看污污视频| 成人免费视频视频| 日韩精品在线免费视频| 一区二区三区亚洲| 日韩一级淫片| 日韩在线综合网| 中文字幕第一区二区| 国产超碰人人模人人爽人人添| 欧美黑人xxxx| 啪啪亚洲精品| 亚洲精品免费一区亚洲精品免费精品一区 | 国产一级一片免费播放放a| 精品视频在线播放| 狠狠久久伊人中文字幕| 国产一级大片免费看| 91免费看片在线观看| 中文字幕视频免费观看| 美女国内精品自产拍在线播放| 久久a爱视频| www.亚洲高清| 红桃视频成人在线观看| av电影在线网| 懂色av一区二区三区在线播放| 欧美亚洲自偷自偷| 国产人与禽zoz0性伦| 亚洲精品二三区| 欧美黄色a视频| 国产人妻777人伦精品hd| 欧美激情在线观看视频免费| 亚洲精品久久久狠狠狠爱| 国产黑人绿帽在线第一区| 欧美日韩成人| 国产1区2区在线观看| 精品毛片乱码1区2区3区| 成人亚洲网站| 一女被多男玩喷潮视频| 亚洲精品自拍动漫在线| 黄色小视频在线观看|