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

Java 生態圈中的嵌入式數據庫,哪家強?

運維 數據庫運維
嵌入式數據庫一個很陌生的詞匯,以前只是聽說,但是沒有真正使用過,今天小編和大家一起來揭開它的面紗。

 嵌入式數據庫一個很陌生的詞匯,以前只是聽說,但是沒有真正使用過,今天小編和大家一起來揭開它的面紗。

[[325892]]

一、介紹

初次接觸嵌入式數據庫(Embedded Database)可能有點模糊,什么是嵌入式數據庫?為什么要使用嵌入式數據庫?怎么使用嵌入式數據庫?如何選擇?本文將帶大家一起揭曉答案。

從軟件角度來說,數據庫分類為兩種:

  • 第一種:數據庫服務器(Database Server)
  • 第二種:嵌入式數據庫(Embedded Database)

像 Oracle、PostgreSQL、MySQL 和 SQL Server 等這些大家熟知的數據庫,我們一般稱它為數據庫服務器,當然也不排除某些數據庫也提供嵌入式版本,例如 MySQL Embedded 就是一個嵌入式的數據庫。

而像 SQLite、Berkeley DB、Derby、H2、HSQL DB 等數據庫,一本內嵌在應用程序中,與應用程序一起運行,我們稱它為嵌入式數據庫。

嵌入式數據庫跟數據庫服務器最大的區別在于它們運行的地址空間不同。通常,數據庫服務器獨立地運行一個守護進程(daemon),而嵌入式數據庫與應用程序運行在同一個進程。

在實際開發中,平時接觸最多的應該是數據庫服務器,對嵌入式數據庫使用的比較少。

但是為何會出現嵌入式數據庫呢?

在小型的應用程序中,例如小型掌上游戲機,不適合部署高達幾百兆的數據庫服務器,同時也沒有聯網的必要,一種輕量級的數據庫需求由此誕生!

與常見的數據庫相比,嵌入式數據庫具有體積小、功能齊備、可移植性、健壯性等特點,例如我們所熟知的 SVN 版本控制軟件就使用到了 SQLite 作為內置數據庫,SQLite 的安裝包只有不到 350 KB,在微型機中也有著廣泛的應用,例如安卓、IOS 等移動設備操作系統都內置了 SQLite 數據庫!

鑒于嵌入式數據庫的種類比較多,有商業收費的、也有開源免費的!本文主要介紹開源免費版的,例如 Derby、SQLite、H2 等,下面我們就一起來實踐一下各個數據庫的配置和用法。

二、Derby

Derby 可以說是 100% 由 Java 編寫的一款數據庫,而且是開源免費的,非常小巧,核心部分derby.jar只有 2M!

很多人可能覺得 Derby 不是很熱門,但 Derby 已經開發了將近二十年!

1996 年,一個叫做 Cloudscape, Inc 的新公司成立了,公司的目標是構建一個用 Java 語言編寫的數據庫服務器。

公司的第一個發行版在一年之后推出,后來產品的名稱變成 Cloudscape。

1999 年,Cloudscape, Inc. 被大型數據庫廠商 Informix Software, Inc. 收購。

Informix Software 在 2001 年又被 IBM 收購,然后 IBM Cloudscape™ 數據庫系統在許多 IBM 的產品中被用作內嵌的數據庫引擎。

2004 年 4 月,IBM 把 Cloudscape 數據庫軟件贈送給 Apache 軟件基金會,從此 Apache Derby 項目誕生了。

接著 SUN 也為 Derby 捐獻了一個團隊。在JavaSE6.0中,SUN 將其命名為JavaDB。

2.1、項目引入

因為 Derby 是用 java 編寫的,所以集成的時候比較容易,直接通過maven在pom.xml中依賴庫文件,即可進行開發!

  1. <!--derby數據庫--> 
  2. <dependency> 
  3.     <groupId>org.apache.derby</groupId> 
  4.     <artifactId>derby</artifactId> 
  5.     <version>10.14.1.0</version> 
  6.     <scope>runtime</scope> 
  7. </dependency> 

2.2、環境配置

和所有的數據庫連接一樣,基本都是配置驅動類、連接地址、賬號、密碼等信息。

 

  1. String DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver"
  2. String JDBC_URL = "jdbc:derby:derbyDB;create=true"
  3. String USER = "root"
  4. String PASSWORD = "root"

說明:

  • org.apache.derby.jdbc.EmbeddedDriver表示使用derby嵌入式數據庫模式。
  • JDBC_URL中的derbyDB表示創建一個名為derbyDB的臨時數據庫,如果沒有會自動創建。
  • USER、PASSWORD主要用于客戶端登錄使用。

2.3、單元測試應用

下面,我們使用JDBC編寫一個測試類,來測試一下derby是否可以正常使用。

 

  1. public class DerbyTest { 
  2.  
  3.     /** 
  4.      * 以嵌入式(本地)連接方式連接數據庫 
  5.      */ 
  6.     private static final String JDBC_URL = "jdbc:derby:derbyDB;create=true"
  7.     private static final String DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver"
  8.     private static final String USER = "root"
  9.     private static final String PASSWORD = "root"
  10.  
  11.  
  12.     public static void main(String[] args) throws Exception { 
  13.         //與數據庫建立連接 
  14.         Class.forName(DRIVER_CLASS); 
  15.         Connection conn = DriverManager.getConnection(JDBC_URL, USERPASSWORD); 
  16.         Statement statement = conn.createStatement(); 
  17.  
  18.         //刪除表 
  19.         statement.execute("DROP TABLE USER_INF"); 
  20.         //創建表 
  21.         statement.execute("CREATE TABLE USER_INF(id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, sex VARCHAR(50) NOT NULL)"); 
  22.  
  23.         //插入數據 
  24.         statement.executeUpdate("INSERT INTO USER_INF VALUES('1', '程咬金', '男') "); 
  25.         statement.executeUpdate("INSERT INTO USER_INF VALUES('2', '孫尚香', '女') "); 
  26.         statement.executeUpdate("INSERT INTO USER_INF VALUES('3', '猴子', '男') "); 
  27.  
  28.         //查詢數據 
  29.         ResultSet resultSet = statement.executeQuery("select * from USER_INF"); 
  30.         while (resultSet.next()) { 
  31.             System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex")); 
  32.         } 
  33.         //關閉連接 
  34.         statement.close(); 
  35.         conn.close(); 
  36.     } 

輸出結果:

 

  1. 1, 程咬金, 男 
  2. 2, 孫尚香, 女 
  3. 3, 猴子, 男 

當程序運行完之后,會在當前項目根目錄生成一個derbyDB文件夾,里面會存放一些持久化的數據,當下次再連接derbyDB數據庫名稱時,可以查詢出之前插入的歷史數據,這個特性可以防止數據丟失!

 

 

 

 

 

值得注意的是:derby 對很多 mysql 的關鍵字并不支持,同時 derby 不支持插入空值。

在之后的版本中,derby 還可以作為一個數據庫服務器,通過jar啟動單獨部署在一臺服務器上,在連接地址上加上 IP 和端口號,例如jdbc://derby://localhost:1527/derbyDB。

如果想使用可視化客戶端工具來訪問和管理derby,可以使用SQuirreL SQL Client客戶端,下載地址http://www.squirrelsql.org/#installation。

在目前絕大多數的關于嵌入式數據庫應用中,derby 的出場次數還是較少。

三、SQLite

SQLite 是 D.RichardHipp 用一個小型的C庫開發的一種強有力的嵌入式關系數據庫,雖然功能較 Berkeley DB(商業數據庫)稍顯遜色,但它簡單易學、速度較快,同時提供了豐富的數據庫接口,提供了對 SQL92 的大多數支持:支持多表和索引、事務、視圖、觸發和一系列的用戶接口及驅動。

SQLite 不僅支持 Windows/Linux/Unix 等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,比起 Mysql、PostgreSQL 這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快,全部源碼大致3萬行C代碼,文件大約 350KB,支持數據庫大小至 2TB!

幾乎常年占居嵌入式數據庫的第一位!

3.1、SQLite安裝

3.1.1、windows安裝

1.訪問 SQLite 下載頁面https://www.sqlite.org/download.html。

2.下載sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip壓縮文件。

3.創建文件夾C:\sqlite,并在此文件夾下解壓上面兩個壓縮文件,將得到 sqlite3.def、sqlite3.dll和sqlite3.exe文件。

4.添加C:\sqlite到PATH環境變量。

最后在命令提示符下,輸入sqlite3命令,顯示如下結果表示安裝成功!

 

  1. C:\>sqlite3 
  2. SQLite version 3.7.15.2 2013-01-09 11:53:05 
  3. Enter ".help" for instructions 
  4. Enter SQL statements terminated with a ";" 

3.1.2、linux安裝

目前,幾乎所有版本的 Linux 操作系統都附帶 SQLite。所以,只需要在命令行輸入輸入sqlite3,即可檢查出機器上是否已經安裝了 SQLite!

 

  1. $ sqlite3 
  2. SQLite version 3.7.15.2 2013-01-09 11:53:05 
  3. Enter ".help" for instructions 
  4. Enter SQL statements terminated with a ";" 

如果沒有看到上面的結果,安裝也很簡單!

1.訪問 SQLite 下載頁面https://www.sqlite.org/download.html。

2.下載sqlite-autoconf-*.tar.gz并上傳到 linux 服務器。

3.執行安裝操作

例如,安裝步驟示例:

 

  1. $ tar xvzf sqlite-autoconf-3071502.tar.gz 
  2. $ cd sqlite-autoconf-3071502 
  3. $ ./configure --prefix=/usr/local 
  4. $ make 
  5. $ make install 

3.1.3、mac安裝

mac安裝操作與linux類似。

3.2、項目引入

sqlite 也可以直接通過maven在pom.xml中依賴庫文件,即可進行開發!

  1. <!--sqlite--> 
  2. <dependency> 
  3.     <groupId>org.xerial</groupId> 
  4.     <artifactId>sqlite-jdbc</artifactId> 
  5.     <version>3.7.2</version> 
  6. </dependency> 

3.3、環境配置

 

  1. String DRIVER_CLASS = "org.sqlite.JDBC"
  2. String JDBC_URL = "jdbc:sqlite:sqliteDB.db"
  3. String USER = "root"
  4. String PASSWORD = "root"

說明:

  • org.sqlite.JDBC表示使用sqlite嵌入式數據庫模式。
  • JDBC_URL中的sqliteDB表示創建一個名為sqliteDB的臨時數據庫,如果沒有會自動創建。
  • USER、PASSWORD主要用于客戶端登錄使用。

3.4、單元測試應用

下面,來測試一下sqlite是否可以正常使用。

 

  1. public class SQLiteTest { 
  2.  
  3.     /** 
  4.      * 以嵌入式(本地)連接方式連接數據庫 
  5.      */ 
  6.     private static final String JDBC_URL = "jdbc:sqlite:sqliteDB.db"
  7.     private static final String DRIVER_CLASS = "org.sqlite.JDBC"
  8.     private static final String USER = "root"
  9.     private static final String PASSWORD = "root"
  10.  
  11.     public static void main(String[] args) throws Exception { 
  12.         //與數據庫建立連接 
  13.         Class.forName(DRIVER_CLASS); 
  14.         Connection conn = DriverManager.getConnection(JDBC_URL, USERPASSWORD); 
  15.         Statement statement = conn.createStatement(); 
  16.  
  17.         //刪除表 
  18.         statement.execute("DROP TABLE IF EXISTS USER_INF"); 
  19.         //創建表 
  20.         statement.execute("CREATE TABLE USER_INF(id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, sex VARCHAR(50) NOT NULL)"); 
  21.  
  22.         //插入數據 
  23.         statement.executeUpdate("INSERT INTO USER_INF VALUES('1', '程咬金', '男') "); 
  24.         statement.executeUpdate("INSERT INTO USER_INF VALUES('2', '孫尚香', '女') "); 
  25.         statement.executeUpdate("INSERT INTO USER_INF VALUES('3', '猴子', '男') "); 
  26.  
  27.         //查詢數據 
  28.         ResultSet resultSet = statement.executeQuery("select * from USER_INF"); 
  29.         while (resultSet.next()) { 
  30.             System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex")); 
  31.         } 
  32.         //關閉連接 
  33.         statement.close(); 
  34.         conn.close(); 
  35.     } 

輸出結果:

 

  1. 1, 程咬金, 男 
  2. 2, 孫尚香, 女 
  3. 3, 猴子, 男 

當程序運行完之后,也會在當前項目的根目錄下生成上文自定義的一個名為sqliteDB的文件。

 

 

 

 

每次操作名為sqliteDB的數據庫時候,數據會持久化到sqliteDB文件中,從而防止數據丟失。

如果想使用可視化客戶端工具來訪問和管理sqliteDB,可以使用navicat來連接,選擇生成的sqliteDB文件,輸入相應的賬號、密碼,便可進行管理維護!

 

 

 

 

 

 

 

 

四、H2

h2 是一款純java編寫的另一款嵌入式數據庫,它本身只是一個類庫,即只有一個 jar 文件,可以直接嵌入到應用項目中,同時還提供了非常友好的基于 web 的數據庫管理界面。

網上有很多開發者拿它與 derby 做對比,稱它與 mysql 數據庫兼容性強,口碑較好。

具體是否真的如此,在后文我們會進行相應的性能測試,下面一起來看看在開發中如何使用。

4.1、項目引入

既然 h2 是純java編寫,可以直接通過maven在pom.xml中依賴庫文件,即可進行開發!

  1. <!--h2數據庫--> 
  2. <dependency> 
  3.     <groupId>com.h2database</groupId> 
  4.     <artifactId>h2</artifactId> 
  5.     <version>1.4.200</version> 
  6.     <scope>runtime</scope> 
  7. </dependency> 

4.2、環境配置

  1. String DRIVER_CLASS = "org.h2.Driver"
  2. String JDBC_URL = "jdbc:h2:mem:h2DB"
  3. String USER = "root"
  4. String PASSWORD = "root"

說明:

  • org.h2.Driver表示使用h2嵌入式數據庫模式。
  • JDBC_URL中的h2DB表示創建一個名為h2DB的臨時數據庫。
  • USER、PASSWORD主要用于客戶端登錄使用。

4.3、單元測試應用

下面,來測試一下h2是否可以正常使用。

 

  1. public class H2Test { 
  2.  
  3.     /** 
  4.      * 以嵌入式(本地)連接方式連接H2數據庫 
  5.      */ 
  6.     private static final String JDBC_URL = "jdbc:h2:mem:h2DB"
  7.     private static final String DRIVER_CLASS = "org.h2.Driver"
  8.     private static final String USER = "root"
  9.     private static final String PASSWORD = "root"
  10.  
  11.     public static void main(String[] args) throws Exception { 
  12.         //與數據庫建立連接 
  13.         Class.forName(DRIVER_CLASS); 
  14.         Connection conn = DriverManager.getConnection(JDBC_URL, USERPASSWORD); 
  15.         Statement statement = conn.createStatement(); 
  16.  
  17.         //刪除表 
  18.         statement.execute("DROP TABLE IF EXISTS USER_INF"); 
  19.         //創建表 
  20.         statement.execute("CREATE TABLE USER_INF(id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, sex VARCHAR(50) NOT NULL)"); 
  21.  
  22.         //插入數據 
  23.         statement.executeUpdate("INSERT INTO USER_INF VALUES('1', '程咬金', '男') "); 
  24.         statement.executeUpdate("INSERT INTO USER_INF VALUES('2', '孫尚香', '女') "); 
  25.         statement.executeUpdate("INSERT INTO USER_INF VALUES('3', '猴子', '男') "); 
  26.  
  27.         //查詢數據 
  28.         ResultSet resultSet = statement.executeQuery("select * from USER_INF"); 
  29.         while (resultSet.next()) { 
  30.             System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex")); 
  31.         } 
  32.         //關閉連接 
  33.         statement.close(); 
  34.         conn.close(); 
  35.     } 

輸出結果:

 

  1. 1, 程咬金, 男 
  2. 2, 孫尚香, 女 
  3. 3, 猴子, 男 

h2 作為嵌入式數據庫應用可以選擇兩種類型的url,第一種是內存模式運行,這種模式將數據臨時放到內存中,程序結束后數據表和數據立即被銷毀,就不存在了;第二種是使用本地文件方式,將數據持久化到文件中,當再次連接數據庫時,可以獲取歷史數據。

 

  1. #第一種,內存模式運行 
  2. jdbc:h2:mem:testDB 
  3.  
  4. #第二種,使用本地文件方式 
  5. jdbc:h2:file:./target/testDB 

h2 還可以作為數據庫服務器使用,單獨部署在服務器上,應用程序通過遠程連接進行操作,連接方式如下:

 

  1. #連接語法 
  2. jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> 
  3.  
  4. #范例: 
  5. jdbc:h2:tcp://localhost:8080/~/test 

如果想使用可視化客戶端工具來訪問和管理h2,可以通過它自帶的 web 頁面進行管理。

下面我們以springboot項目為例,通過配置使用h2自帶的管理頁面來維護。

新建一個WebConfig類,配置h2的 web 控制臺,如下:

 

  1. @Configuration 
  2. public class WebConfig { 
  3.  
  4.     /** 
  5.      * 添加h2控制臺的映射地址 
  6.      * @return 
  7.      */ 
  8.     @Bean 
  9.     ServletRegistrationBean h2servletRegistration(){ 
  10.         ServletRegistrationBean registrationBean = new ServletRegistrationBean(new WebServlet()); 
  11.         registrationBean.addUrlMappings("/h2-console/*"); 
  12.         return registrationBean; 
  13.     } 

啟動springboot項目,打開瀏覽器,輸入http://127.0.0.1:8080/h2-console訪問管理頁面!

 

 

 

 

填寫連接地址、賬號、密碼之后,進行連接!

 

 

 

 

可以在工作臺,編寫 sql 語句進行查詢,同時對查詢結果還可以進行編輯操作。

五、性能測試

上文中我們介紹了三者數據庫的使用,下面,我們以循環插入1000、10000、100000次操作,分別來測試三個數據庫的性能,看看他們的表現如何?

 

 

 

 

從結果上看:

  • derby 與 sqlite 性能方面相差不大,但是隨著插入數量越多,derby 比 sqlite 稍遜一些。
  • 三者相比,h2 性能最好,無論是將數據寫入內存,還是寫入到數據庫,性能都是最好的。

六、總結

  • derby 作為嵌入式數據庫,在性能和易用性都不錯,數據庫是以一個目錄存儲的,但只能用于Java程序中。
  • sqlite 因為支持多種語言,也提供了對 SQL92 的大多數支持,執行效率也不錯,作為嵌入式數據庫應用最廣,但如果想查詢數據只能本地連接不能遠程連接。
  • h2 作為嵌入式數據庫的新秀,主要優勢:超輕量級,可以支持內存模式,高效高速,能支持基本的全文搜索,同時與 mysql 數據庫兼容性最強,一般使用場景最多的就是在開發環境上進行回歸測試使用。

 

責任編輯:華軒 來源: Java極客技術
相關推薦

2020-05-18 19:29:03

技術資訊

2009-12-21 17:22:32

Windows7微軟嵌入式開發

2016-07-14 15:57:06

華為

2011-03-11 11:19:05

嵌入式數據庫

2011-03-07 09:57:24

Perst嵌入式數據庫

2013-09-02 14:41:05

Java嵌入式SQLite

2009-01-18 15:36:04

2012-06-15 10:03:57

2015-03-23 16:57:03

渠道生態圈華為

2019-01-15 08:58:40

Kubernetes生態圈Docker

2013-07-22 17:41:58

2016-11-01 14:30:09

大數據大數據技術

2018-11-13 15:05:33

大數據MapReduce機器

2013-09-22 10:39:00

MeayunDB

2011-07-08 10:45:19

SqlceSqlCeConnec

2015-09-02 13:15:31

Python

2011-06-15 10:18:12

Windows PhoPerst

2010-07-05 13:36:21

SQL Server

2015-03-04 11:19:59

2023-04-04 13:31:18

點贊
收藏

51CTO技術棧公眾號

黑鬼狂亚洲人videos| 中文字幕国内自拍| 欧美一区二区黄片| 一区二区毛片| 亚洲日韩第一页| 亚洲 激情 在线| 国产淫片在线观看| 成人ar影院免费观看视频| 91av在线播放视频| 香蕉久久久久久久| 成人三级av在线| 在线视频欧美精品| 台湾无码一区二区| 国产剧情在线观看| 国产成人午夜视频| 国产精品久久二区| 久久一级黄色片| 在线日韩一区| 日韩视频免费直播| 成年人在线看片| 成人日韩欧美| 久久久亚洲精品一区二区三区| 成人国产精品免费视频| 一级免费在线观看| 婷婷六月综合| 亚洲欧美激情一区| 天堂va欧美va亚洲va老司机| 91看片一区| 亚洲国产日韩a在线播放性色| 亚洲 国产 欧美一区| 日韩在线一区二区三区四区| 久久精品国产一区二区三区免费看 | 亚洲自拍av在线| 天堂中文字幕在线观看| 亚洲精品97| 伊人亚洲福利一区二区三区| 妖精视频一区二区| 一区二区三区无毛| 色94色欧美sute亚洲线路一ni | 91精产国品一二三| 日韩欧国产精品一区综合无码| 精品久久久久久久久中文字幕| 中文字幕中文字幕在线中心一区| 巨骚激情综合| www.亚洲在线| av一区二区三区四区电影| 亚洲一区二区人妻| 日韩中文字幕1| 欧美人在线观看| 国精产品久拍自产在线网站| 国产成人短视频在线观看| 精品国产1区二区| www.51色.com| 日韩久久一区| 欧美日韩国产高清一区二区| 亚洲黄色a v| 欧美freesex| 日韩欧美在线中文字幕| 久久免费视频3| 678在线观看视频| 亚洲图片一区二区| 免费看黄在线看| 秋霞在线视频| 亚洲国产wwwccc36天堂| 国产九色porny| 黄页网站大全在线免费观看| 亚洲综合丁香婷婷六月香| 最近看过的日韩成人| 欧美69xxx| 亚洲私人影院在线观看| 亚洲欧美日韩在线综合| 91在线观看| 国产精品视频免费| 手机在线视频你懂的| 黄a在线观看| 亚洲视频一区二区在线| 青草全福视在线| 2021国产在线| 亚洲永久精品国产| 99爱视频在线| www.26天天久久天堂| 欧美军同video69gay| 日本xxxx黄色| 秋霞影院一区| 亚洲精品www| 婷婷色一区二区三区| 日韩成人精品一区| 久久国产精品久久久久久| 久久中文字幕在线观看| 日韩午夜av| 国产精品成人播放| av网站在线观看免费| 成人avav影音| 日本一区高清不卡| 亚洲无线看天堂av| 欧美丝袜美女中出在线| 依人在线免费视频| 涩爱av色老久久精品偷偷鲁| 亚洲免费小视频| 国产在线免费av| 欧美女人交a| 日本人成精品视频在线| 国产精品爽爽久久久久久| 懂色av一区二区三区免费看| 欧美二区三区在线| a毛片在线播放| 欧美日韩亚洲激情| 亚洲黄色片免费| 婷婷综合电影| 久久成人精品视频| 国产午夜精品久久久久| 国产伦精品一区二区三区免费迷| 精品综合在线| 好了av在线| 色综合久久中文综合久久牛| 中文字幕视频三区| 天天久久夜夜| 精品中文字幕在线| 黄色av一区二区| 不卡的av网站| 日本三日本三级少妇三级66| 综合另类专区| 欧美mv日韩mv国产网站app| 日韩福利在线视频| 一区二区三区国产在线| 91久久在线播放| 青青草视频免费在线观看| 亚洲欧美激情小说另类| 国产18无套直看片| 综合一区av| 国产精品亚洲精品| 手机看片1024国产| 一区二区高清免费观看影视大全| 久久久久免费精品| 精品在线网站观看| 欧美日韩福利电影| 91精品人妻一区二区三区果冻| av在线不卡免费看| 成人手机在线播放| 一区二区三区| 中文字幕亚洲一区在线观看| 亚洲欧美偷拍一区| 99v久久综合狠狠综合久久| 精品视频在线观看一区二区| 日韩成人一区| 伊人av综合网| 免费黄色小视频在线观看| av亚洲精华国产精华精华| 国产aaa免费视频| 99精品女人在线观看免费视频| 国产午夜一区二区| 国产区一区二区三| 97久久精品人人做人人爽50路| 黄色网在线视频| 欧美电影院免费观看| 久久久精品网站| 一区二区不卡视频在线观看| 国产精品午夜在线观看| 亚洲成色www.777999| 欧美伦理在线视频| 国产精品第一第二| 91在线网址| 欧美美女一区二区在线观看| 欧美一级特黄高清视频| 激情欧美一区二区| 国产日韩视频在线播放| 国产精品视频一区二区三区| 久久亚洲电影天堂| 国产99久久九九精品无码免费| 亚洲免费观看高清完整版在线观看| 女同激情久久av久久| 亚洲成人二区| 成人在线视频电影| 涩涩av在线| 亚洲欧美国产精品| 中文字幕在线日亚洲9| 亚洲欧洲日韩av| 男男受被啪到高潮自述| 亚洲黄色视屏| 欧美日本国产精品| 久久精品国产精品亚洲毛片| 久久香蕉国产线看观看av| 黄色美女一级片| 欧美性色视频在线| 99在线视频免费| 国产精品一区一区| 日韩av综合在线观看| 欧美日韩在线播放视频| 91免费看国产| av电影在线地址| 亚洲网址你懂得| 国产视频手机在线| 欧美日韩国产中字| 亚洲人与黑人屁股眼交| 成人精品gif动图一区| 91看片就是不一样| 我不卡伦不卡影院| 国产伦精品一区| 成人在线爆射| 免费不卡在线观看av| 婷婷av一区二区三区| 欧美日韩在线观看一区二区| 久久免费视频6| 久久久久久久久99精品| 伊人成人222| 亚洲清纯自拍| 亚洲综合五月天| 豆花视频一区二区| 国产精品美女免费看| 亚洲区欧洲区| 欲色天天网综合久久| 性猛交xxxx乱大交孕妇印度| 色哟哟国产精品| 私库av在线播放| 国产午夜亚洲精品羞羞网站| 超级砰砰砰97免费观看最新一期 | 在线视频第一页| 国产成人免费网站| 少妇黄色一级片| 国产欧美一级| 男人c女人视频| 97偷自拍亚洲综合二区| 久久亚洲国产精品日日av夜夜| 国产免费av国片精品草莓男男| 欧美中文在线观看国产| 欧美日韩色网| 日韩一区二区av| 黑人与亚洲人色ⅹvideos| 日韩精品一区二区三区中文不卡| 中文人妻熟女乱又乱精品| 天天综合色天天综合色h| 免费无码毛片一区二区app| 国产精品久久午夜夜伦鲁鲁| asian性开放少妇pics| 成人一二三区视频| 丰满人妻一区二区三区53视频| 免费观看在线综合色| 欧美在线观看视频网站| 国产日韩欧美一区在线| 男的插女的下面视频| 亚洲欧美综合| 400部精品国偷自产在线观看| 成人在线免费观看91| 欧洲一区二区日韩在线视频观看免费 | 免费成人在线视频观看| 国产肥臀一区二区福利视频| 国产综合久久| 日韩在线视频在线| 国产一区二区中文| 久久av综合网| 亚洲五月婷婷| 性欧美大战久久久久久久| 国内精品久久久久久久97牛牛| 日本a级片在线观看| 欧美 日韩 国产一区二区在线视频| 中文网丁香综合网| 国产精品99一区二区三区| 亚洲午夜精品国产| 天天综合国产| 国产卡一卡二在线| 欧美在线国产| 国产夫妻自拍一区| 亚洲日韩视频| 久久精品国产精品亚洲色婷婷| 亚洲欧美不卡| 91香蕉视频导航| 全国精品久久少妇| 天天操狠狠操夜夜操| 国产综合久久久久久鬼色| 色偷偷中文字幕| 成人免费视频国产在线观看| 中文字幕一区二区三区乱码不卡| 成a人片国产精品| 日本一区二区三区网站| 久久九九全国免费| 国产精品suv一区二区88| 亚洲人成网站色在线观看 | 午夜精品久久久久久不卡8050| 日韩aaaaaa| 色狠狠av一区二区三区| 亚洲一区二区天堂| 欧美大肚乱孕交hd孕妇| 污视频软件在线观看| 亚洲网在线观看| 91福利国产在线观看菠萝蜜| 国内精品400部情侣激情| 欧美电影免费观看高清完整| 国产欧美在线播放| 96sao在线精品免费视频| 久久精品日韩| 久久在线免费| www.亚洲视频.com| 日产国产欧美视频一区精品| www.国产福利| 99国产精品一区| 99国产精品无码| 亚洲国产精品久久人人爱蜜臀| 9i精品福利一区二区三区| 91.麻豆视频| 天堂网av在线播放| 日韩中文字幕久久| 8x8ⅹ拨牐拨牐拨牐在线观看| 国产精品国模在线| 亚洲小说春色综合另类电影| 蜜桃网站成人| 午夜视频一区| 成人免费毛片播放| 国产成人精品亚洲日本在线桃色| 加勒比一区二区| 亚洲精品国产一区二区精华液| 久久久久久久久久久久久av| 欧美高清激情brazzers| 全部免费毛片在线播放网站| 另类专区欧美制服同性| 日韩成人动漫| 国产欧美日韩亚洲| 五月婷婷亚洲| 成人黄色一区二区| 97se亚洲国产综合在线| www.xxxx日本| 欧美这里有精品| 天堂8在线视频| 欧美激情xxxx性bbbb| 欧美一级做a| 欧美日韩国产精品一区二区| 韩日欧美一区| www.51色.com| 国产精品久久久久一区二区三区共| 毛片基地在线观看| 亚洲国产成人精品久久| 18在线观看的| 91视频免费在线| 日本一二区不卡| 毛片av免费在线观看| 99久久精品国产毛片| 国产一级久久久| 这里只有精品免费| 日本在线观看| 国产男女猛烈无遮挡91| 国产一区二区三区91| 欧美牲交a欧美牲交aⅴ免费下载| 成人国产精品视频| 国产精品16p| 欧美成人午夜电影| 手机在线免费观看av| 亚洲wwwav| 亚洲精品tv久久久久久久久久| 污污动漫在线观看| 国产精品精品国产色婷婷| 色婷婷久久综合中文久久蜜桃av| 亚洲日韩中文字幕在线播放| 日本不卡一二三| 欧美精品亚洲| 日韩黄色在线观看| 日韩女同一区二区三区| 欧洲精品一区二区| 超碰免费在线| 国产专区欧美专区| 亚洲综合激情在线| 不卡的一区二区| 夜夜嗨av一区二区三区网页| 午夜精品一二三区| 午夜精品一区二区三区视频免费看| 大陆精大陆国产国语精品| 免费超爽大片黄| 2017欧美狠狠色| 狠狠狠狠狠狠狠| 综合激情国产一区| 国产精品亚洲综合在线观看 | 国产亚洲欧美日韩在线观看一区二区| 少妇高潮喷水久久久久久久久久| 91网站最新网址| 日日夜夜狠狠操| www.xxxx精品| 亚洲一区电影| 337p粉嫩大胆噜噜噜鲁| 国产亚洲精品aa| 91无套直看片红桃| 色综合久久久888| 日韩av中文字幕一区| 激情综合网俺也去| 1区2区3区国产精品| 亚洲毛片欧洲毛片国产一品色| 97视频在线免费观看| 欧美精选一区二区三区| 韩国三级与黑人| 黑丝美女久久久| 中文字幕在线观看日本| 99国产高清| 校园激情久久| 久久久久久久久久97| 精品国产乱码久久久久久图片| 在线天堂资源| 中文字幕日韩一区二区三区| 东方aⅴ免费观看久久av| 欧美一级做a爰片免费视频| 久久69精品久久久久久久电影好| 日韩高清成人在线| 在线看免费毛片| 欧美日韩另类视频|