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

淺析DB(BDB)與SQLite對比

數據庫 其他數據庫
嵌入式數據庫無需安裝,體積小巧,速度又很快,在很多場合可以替代目前流行的MySQL, SQLServer等大中型數據庫。本文介紹兩種嵌入式數據庫產品:Berkeley DB和SQLite,并著重討論它們與Java之間的接口。

嵌入式數據庫無需安裝,體積小巧,速度又很快,在很多場合可以替代目前流行的MySQL, SQLServer等大中型數據庫。本文介紹兩種嵌入式數據庫產品:Berkeley DB和SQLite,并著重討論它們與Java之間的接口。

通常我們采用各種數據庫產品來實現對數據的存儲、檢索等功能,例如,Oracle,SQL Server,MySQL等等。這些產品除提供基本的查詢,刪除,添加等功能外,也提供了很多高級特性,如觸發器,存儲過程,數據備份恢復,全文檢索功能 等。但實際上,很多的應用,僅僅利用到了這些數據庫產品的基本特性而已。而且在一些小型應用上,或者某些特殊場合的應用,比如桌面程序,這些數據庫產品就 明顯有一些臃腫。在這些情況下,嵌入式數據庫的優勢就特別明顯了。

嵌入式數據庫無須獨立運行的數據庫引擎,它是由程序直接調用相應的 API去實現對數據的存取操作。更直白的講,嵌入式數據庫是一種具備了基本數據庫特性的數據文件。嵌入式數據庫與其它數據庫產品的區別是,前者是程序驅動 式, 而后者是引擎響應式。嵌入式數據庫的一個很重要的特點是它們的體積非常小,編譯后的產品也不過幾十K。這不但對桌面程序的數據存儲方案是一個很好的選擇, 也使得它們可以應用到一些移動設備上。同時,很多嵌入式數據庫在性能上也優于其它數據庫,所以在高性能的應用上也常見嵌入式數據庫的身影。

 

下面介紹的是兩個開放源代碼的嵌入式數據庫,Berkeley DB和SQLite。同時側重介紹如何應用Java連接這兩種嵌入式數據庫。

#p#

一. Berkeley DB

1. 簡介

Berkeley DB是一款健壯的,高速的工業級嵌入式數據庫產品,你可以在它的官方主頁(見參考鏈接一)上發現很多知名的公司都采用了這款嵌入式數據庫。 Berkeley DB的一個很重要的特點是就是高速存儲。在高流量,高并發的情況下,Berkeley DB要比非嵌入式的數據庫表現得更加出色。所以在一些技術實現上,Berkeley DB被作為大型關系數據庫的中間數據緩沖層,用來快速的保存數據,可能會在適當的時刻再導入到大型數據庫中,進而應用大型數據庫所提供的更為高級的特性。

Berkeley DB雖然是開源的產品,但對某些條件下的商業性應用,卻不是免費的,而且價格頗為昂貴。這些商業條件排除了開源的情況,不發放分布版本的情況,等等。比 如,如果你的程序是開放源代碼的或者僅僅應用到單一的網站上,在這種情況下,Berkeley DB是免費的。

2. 獲得Java與Berkeley DB的接口

Berkeley DB目前的版本是4.1.25,自帶了Java接口。下載的壓縮包中包含C和Java語言的源代碼和編譯配置文件。在Windows平臺,可以用MS Visual C++ 6.0或MS VC.Net編譯。用VC6編譯的操作如下介紹:在源代碼的build_win32路徑下打開VC的工程文件,之后在Build菜單中的Set Active Configuration選擇db_java win32 release編譯選項。在VC的Tools菜單Options選項中指定JNI.H等Java本地化接口編譯時所需要頭文件的位置。你會在JDK的 include路徑下找到這些頭文件, 例如加入的路徑可能會是這樣的:C:\jdk1.4\include和C:\jdk1.4\include\ win32。最后在Tools菜單中Options選項還要設置Javac.exe和Jar.exe的執行路徑,這個設置會使VC開發環境也能調用 Java編譯器,從而在VC環境下直接完成對Java接口類的編譯和打包。在編譯后,在release路徑下的文件中找到db.jar, libdb41.dll, libdb_java41.dll,這三個文件組成了Berkeley DB的Java接口程序包。

3. 應用Java與Berkeley DB的接口

Berkeley DB并不是一個關系型的數據庫。不能應用標準的SQL語句對數據庫操作,對它的操作要調用專用的API實現。這些API提供了查詢、插入、刪除等功能。比 如com.sleepycat.db.Db類代表數據庫對象。Db類的put()方法完成的是插入功能,get()方法完成的是讀出數據的功能。 com.sleepycat.db.Dbc是Berkeley DB的游標類,提供了遍歷數據庫記錄的功能。

Berkeley DB每一個記錄都有一個鍵值和對應的數據值,而鍵值和數據必須是類com.sleepycat.db.Dbt的對象或其子類的對象。Dbt提供了一些方法 可以將byte數組或Object對象保存到Dbt的對象中去。比如,Dbt類中的set_data(byte[])或set_object (Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名規范,比如set_data()方法應該命名為setData()方法。Berkeley DB許諾在下一個版本中會提供符合命名規范的Java API。

Berkeley DB對任何存入的數據都是直接原樣存儲到數據文件中去,無論其是二進制數據還是ASCII或Unicode等編碼的文本。通常可以利用這一特性和Java串行化的概念方便的進行數據的存取。例如聲明一個類

  1. public class AccountInfo implements Serializable{  
  2. //帳戶信息  
  3. public String loginName;  
  4. public String password;  
  5. public boolean auotLogin;  
  6. }  

在 這個 AccountInfo類中僅僅包含了數據項的定義。我們完全可以將這個類看作數據庫的表中字段定義。可以用Berkeley DB保存AccountInfo對象的串行化二進制數據,以此來保存這個對象中的變量值。在操作中,先對Dbt的對象調用set_object (AccountInfo)方法,而后把這個Dbt對象作為一條紀錄保存到表中。當然,我們也可以應用繼承Dbt類的方法來完成對數據的保存。

下面這段簡單代碼演示如何將數據存入到數據庫中,然后再用游標對象瀏覽全部數據。

  1. //注意,下面的程序的忽略了對異常處理,寫入數據初始化等等一些代碼,請在適當修改后再編  
  2. //譯運行它  
  3. Db dbFile = null;  
  4. //生成Db對象  
  5. dbFile = new Db(null, 0);  
  6. //用BTree方式打開數據庫,庫文件是在c:/temp下的mydata.db文件,表名是employee  
  7. //如果數據庫不存在,則自動生成一個新的數據庫。  
  8. dbFile.open(null,"c:\\temp\\mydata.db","employee",Db.DB_BTREE,  
  9. Db.DB_CREATE,0);  
  10. Dbt key = new Dbt();  
  11. Dbt data = new Dbt();  
  12. //向庫文件中插入一條數據,如果已經存在,打印出錯信息  
  13. if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) {  
  14. System.out.println("Key already exists.");  
  15. }  
  16. //關閉數據文件  
  17. dbFile.close(0);  
  18. //重新打開數據文件  
  19. dbFile = new Db(null, 0);  
  20. dbFile.open(null, "c:\\temp\\mydata.db", "employee", Db.DB_UNKNOWN,   
  21. 0, 0644);  
  22. // 聲明一個數據庫游標Dbc對象iterator  
  23. Dbc iterator = dbFile.cursor(null, 0);  
  24. // 遍歷整個表  
  25. Dbt key = new Dbt();  
  26. while (iterator.get(key, data, Db.DB_NEXT) == 0)  
  27. {  
  28. System.out.println("reading");  
  29. }  
  30. //關閉游標和數據文件  
  31. iterator.close();  
  32. dbFile.close(0);  

在運行Berkeley DB的程序時勿必在系統環境變量PATH中設置libdb41.dll和 libdb_java41.dll所在的路徑。

4. Berkeley DB的存儲模式

Berkeley DB提供了四種存儲數據的模式:Btree,Hash,Queue和Recno。在打開數據庫的時候要指定一種存儲模式,比如上例中open()方法中的參數Db.DB_BTREE就是指定以Btree模式打開數據庫。

Btree 模式是以排序的二叉樹的方式存儲,Hash是以線性哈希表的方式存儲。Queue用邏輯記錄號做為鍵值,以定長的數據為記錄值。Recno方式也以邏輯記 錄號做為鍵值,但可以保存定長或變長的記錄值。這里提到的邏輯記錄號有兩種,可變的和固定的。可變邏輯記錄號會根據數據記錄的增加與刪除做相應的變化。比 如在數據庫中共有100條記錄,如果刪除第80條記錄,那么第81條記錄的邏輯記錄號會自動變成80,以此類推,第100條記錄邏輯記錄號會變成99。固 定的邏輯記錄號則無論數據庫如何操作都不會有變化。Queue模式下,邏輯記錄號只能是固定方式。 Recno模式則可通過配置來選擇是采用那種類型的記錄號作為鍵值。Btree模式也可以通過設置,將可變的邏輯記錄號做為鍵值。

這幾種 存儲模式各有優缺點,要根據具體的需求來選擇。當鍵值不想用邏輯記錄號時Btree或Hash是必須的選擇。 Btree方式比較適合連續的順序讀取,比如,當鍵值是時間值,如果經常有從某一時間點開始連續讀取后繼的記錄的操作,Btree是一種很好的選擇。對隨 機的跳躍式讀取,Hash模式則更為恰當。Queue和Recno都以記錄號為鍵值,但前者適合先進先出的讀取方式。Recno則通常是存取變長文本記錄 的理想存儲模式。

5. Berkeley DB Environment的概念

Berkeley DB Environment為一組數據庫同時提供參數設置。更為重要的是,如果要應用更高級的特性,必須要使用Environment功能,比如在想要對保存的數據進行加密存儲時。

6. 更多特點

除了最基本的插入、查詢、刪除功能以外,Berkeley DB還提供了一些特性,比如Transaction,數據加密,同步加鎖控制,錯誤日志等功能。下面的圖片是Berkeley DB功能示意圖。

#p#

二. SQLite

1. 簡介

相信PHP的開發人員一定不會對SQLite感到陌生,因為在PHP5中已經集成了這個輕巧的內嵌式數據庫產品。SQLite與Berkeley DB相比,在操作語句上更類似關系型數據庫的產品。絕大多數標準的SQL92語句SQLite都能支持。

SQLite 的版權允許無任何限制的應用,包括商業性的產品。在參考鏈接二上提供的SQLite官方主站上可以下載到編譯后的SQLite程序。但推薦應用CVS工具 下載最新版本的SQLite源代碼。如果在*nux平臺下,可直接用make編譯。如果在Windows 平臺,常用的有兩種方法,一是應用在Windows平臺下的Linux仿真程序,如MingW或Cygwin提供的make來編譯。二是應用MS VC平臺編譯。后者設置略有麻煩,但可仿照參考鏈接五上提供的MS VC6工程文件的樣例。應用到這個樣例的時候,要注意的是由于SQLite源代碼在不斷更新,如果直接應用樣例所提供的VC6工程文件編譯會出現一些問 題,讀者要根據具體的情況稍微調整一下編譯的設置。

2. 編譯第三方Java接口

SQLite 源代碼是C,而且官方網站上只提供了C和Tcl語言的接口。為了應用Java接口,要采用第三方的接口驅程,可在參考鏈接三中找到這個Java接口程序。 這個接口提供了兩種連接SQLite的方式:一是直接用JNI技術調用SQLite的C語言接口,這種方式要求開發人員要對SQLite本身的API也有 一定的了解。在第二種方式中,接口程序實現了Java標準規范的JDBC接口,這樣開發人員只要對JDBC有了解就可以了。

下面介紹在Windows系統MS VC6環境中編譯SQLite Java接口(同時包括JNI和JDBC兩個接口)的過程。如果你對C語言編譯的設置很熟悉,可以跳這這段介紹。

第 一步先把SQLite源代碼編譯成Lib靜態庫文件。具體的步驟可以直接應用下面參考鏈接中提供的MS VC6工作區文件,其中有一個編譯SQLite到靜態庫的設置。編譯成功后得到SQLite.lib文件。

第二步要建立一個新的VC DLL項目,然后和上面介紹的Berkeley DB在編譯Java本地化接口的設置一樣,在VC的Tools菜單Options選項中指定JNI.H等JNI編譯所要的頭文件位置。同時還要指定 sqlite.h頭文件位置,這個文件是在生成SQLite靜態庫的時候自動生成的,可以在SQLite.lib文件所在的工作區目錄下面找到它,例如加 入的路徑為C:\sqlite\msvc6。然后在Project菜單的setting選項設置Link到SQLite.lib庫文件,并再次在 Tools菜單中Options指定SQLite.lib的查找路徑。注意有些情況下可能要設置予編譯選項HAVE_SQLITE_COMPILE以便使 用SQLite中VM的一些功能。編譯成功后可得到Sqlite_jni.dll文件。

第三方接口庫中的Java代碼包含JNI接口和多個版本的JDBC接口程序,可根據你的JRE的版本選擇相應的JDBC程序。編譯這些Java代碼的過程這里就不做敘述了。

編譯后的Java類包加上前面得到的Sqlite_jni.dll文件,組成了SQLite的Java接口庫,在應用Java語言調用JDBC或JNI接口時,都是通過應用Java的本地化技術調用Sqlite_jni.dll文件,完成對SQLite數據庫的操作。

3. 應用JNI直接調用SQLite功能

下面這段代碼演示如何應用JNI接口操作SQLite。可以看到Database類的exec()方法是執行SQL語句的關鍵:

  1. Database db = new Database();  
  2. try {  
  3. //打開數據庫  
  4. db.open("c:\\temp\\mydata.slt", 0666);  
  5. db.interrupt();  
  6. db.busy_timeout(1000);  
  7. db.busy_handler(null);  
  8. db.exec("create table account (name varchar(10),gale boolean)" 
  9. ,result);  
  10. db.exec("insert into account values('steve','m')", result);  
  11. db.exec("select * from account",result);  
  12. //關閉數據庫  
  13. db.close();  
  14. } catch (Exception e) {  
  15. e.printStackTrace();  
  16. }  

4. 應用JDBC連接SQLite

用"SQLite.JDBCDriver"作為JDBC的驅動程序類名。連接JDBC的URL格式為jdbc:sqlite:/path。這里的path為指定到SQLite數據庫文件的路徑,例如:

jdbc:sqlite://dirA/dirB/dbfile
jdbc:sqlite://DRIVE:/dirA/dirB/dbfile
jdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfile

參考下面的應用JDBC連接SQLite的例程:

  1. //聲明JDBC驅動程序  
  2. Class clz = Class.forName("SQLite.JDBCDriver");  
  3. //連接數據庫  
  4. Connection conn = DriverManager.getConnection("jdbc:sqlite:/c:/temp/e2.db");  
  5. Statement stmt = conn.createStatement();  
  6. //生成person表,包含名子和年齡字段  
  7. stmt.execute("create table person (name varchar(100),age int)");  
  8. //插入數據  
  9. stmt.execute("insert into person values('steve',25)");  
  10. //用SQL語句讀出數據  
  11. result = stmt.executeQuery("select * from person");  
  12. while(result.next()){  
  13. System.out.println(result.getString(1));  
  14. System.out.println(result.getInt(2));  

運 行程序時要在 Java.exe命令行加入選項java.library.path指定到Sqlite_jni.dll所在的路徑。例如,如果 Sqlite_jni.dll放在c:\sqliteNative 路徑下面,運行類com.e2one.MyClass 的命令行將會是這樣:java -Djava.library.path=c:\sqliteNative com.e2one.MyClass。

5. SQLite的特點

SQLite 是無數據類型的數據庫。雖然在生成表結構的時候,要聲明每個域的數據類型,但SQLite并不做任何檢查。開發人員要靠自己的程序控制輸入與讀出數據的類 型是正確的。這里有一個例外,就是當主鍵為整型值時,如果要插入一個非整型值時會產生異常。另外,雖然在插入或讀出數據的時候是不區分類型的,但在比較的 時候,不同數據類型是有區別的。比如:

  1. CREATE TABLE MyTable(a INTEGER, b TEXT);  
  2. INSERT INTO MyTable VALUES(0,0);  

當執行下面的查詢:

  1. SELECT count(*) FROM MyTable WHERE a=='00';  

會返回一條記錄,因為字段a的類型是整型,而數字00與0是相等的。

而執行下面的查詢則不會返回記錄:

  1. SELECT count(*) FROM MyTable WHERE b=='00';  

因為字段b是字符類型,字符"00"與"0"是不相等的。

SQLite提供了對Transaction的支持。應用Transaction即保證了數據的完整性,也會提高運行速度,因為多條語句一起提交給數據庫的速度會比一條一條的提交方式更快。

對 二進制數據,SQLite不能直接保存。但可以先將二進制的數據轉換成ASCII編碼,然后再保存。Base64編碼機制是最常見的把二進制數據轉換成 ASCII編碼的手段。在SQLite的C語言代碼encode.c中提供了Base64編碼的功能。對Java而言,在參考鏈接六中提供的Apache 的XML RPC項目中可以找到一個Base64編碼的例子。

上面介紹了兩個比較常見的嵌入式數據庫,Berkeley DB速度極快,可靠性高,但學習起來有一定難度。SQLite則簡單易用,速度也很快,又可以應用標準的JDBC連接,但它功能卻照Berkeley略有遜色,比如二進制數據的處理等 

原文鏈接:http://www.cnblogs.com/Skyzi/archive/2011/04/15/2017349.html

 

 

 

【編輯推薦】

  1. SQLite數據庫簡介及資源下載
  2. 11月第2周系統升級錄:歷史悠久的嵌入式數據庫系統-Berkeley DB
  3. Delphi純代碼連SQLite數據庫,同時支持數據庫的加密解密
  4. SQLite做為本地緩存應注意的幾大方面
  5. 淺析SQLite數據庫開發常用管理工具
責任編輯:艾婧 來源: 博客園
相關推薦

2025-03-10 05:00:00

2019-07-10 10:00:42

PHPPython語法

2009-10-23 12:53:25

VB.NET語言

2018-01-02 20:35:00

數據庫MySQLDB2

2011-05-17 09:40:18

SQL Server IBM DB2

2020-10-20 18:42:17

Vue 3.0vue2.x數據

2009-07-20 09:44:31

DB2外部文件格式

2010-08-18 10:59:20

IBM DB2 Cat

2022-07-26 14:05:58

人工智能人機交互心智

2009-09-14 13:57:37

SQLite數據庫開發

2023-11-02 08:52:52

數據庫實踐

2009-07-14 14:28:31

MyEclipse E

2009-06-25 17:13:51

jBPM與Spring

2022-08-28 20:50:29

算法模型機器學習

2023-05-30 14:56:18

Docker開發容器

2009-07-14 14:41:33

Webwork與Spr

2009-07-16 14:58:03

WebWork安裝WebWork配置

2019-02-11 09:48:02

2010-04-09 12:20:11

Oracle SQL

2010-09-07 17:12:46

DB2故障處理
點贊
收藏

51CTO技術棧公眾號

日本一区二区久久精品| 久久久视频精品| 中文字幕亚洲乱码| 午夜成年人在线免费视频| 成人免费的视频| 国产福利视频一区| 粉嫩av性色av蜜臀av网站| 国产一区二区三区亚洲| 色婷婷av一区二区三区gif| 亚洲区一区二区三区| 亚洲av无码一区二区乱子伦| 亚洲一区亚洲| 久久国产精品久久久久久| 久久人人妻人人人人妻性色av| 日韩不卡在线| 亚洲成人手机在线| 伊人久久大香线蕉综合75| 男人天堂一区二区| 久久国内精品视频| 91超碰caoporn97人人| 日本一级片免费| 窝窝社区一区二区| 精品少妇一区二区三区在线播放| 成人免费毛片播放| av影片在线| 亚洲天堂av一区| 热舞福利精品大尺度视频| 亚洲精品一区二区三区四区| 日韩经典中文字幕一区| 91高清视频在线免费观看| av最新在线观看| 国产伦精品一区二区三区视频| 日韩午夜激情av| 国产又大又黄又猛| 日韩成人影音| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 美国三级日本三级久久99| 97香蕉超级碰碰久久免费的优势| 国产精品成人69xxx免费视频| 蜜桃精品噜噜噜成人av| 日韩精品欧美国产精品忘忧草| 中文字幕在线视频一区二区| 欧洲一级精品| 色8久久人人97超碰香蕉987| 日韩a∨精品日韩在线观看| 在线h片观看| 亚洲日本在线观看| 亚洲免费av网| 日韩大片在线永久免费观看网站| 久久久久久毛片| 精品久久一区二区三区蜜桃| 三级小视频在线观看| 成人午夜伦理影院| 动漫一区二区在线| 二区三区在线视频| 9人人澡人人爽人人精品| 国产精品免费一区二区三区| 亚洲国产精品欧美久久| 粉嫩绯色av一区二区在线观看| 91精品久久久久久蜜桃| 国产ts人妖调教重口男| 国产99一区视频免费| aaa级精品久久久国产片| 99热这里只有精品9| 国产不卡一区视频| 国产亚洲自拍偷拍| 亚洲av成人无码久久精品老人| 99精品国产热久久91蜜凸| 久久精品日韩| 美女做暖暖视频免费在线观看全部网址91 | 日本一区高清| 91丨九色porny丨蝌蚪| 欧美极品一区| av在线电影观看| 中文字幕亚洲区| 激情五月五月婷婷| 蜜臀av国内免费精品久久久夜夜| 亚洲制服丝袜一区| 久久久久久久久久久视频| 亚洲伊人av| 欧美亚洲国产一区二区三区| 日韩av卡一卡二| 中文在线综合| 亚洲美女中文字幕| 色婷婷粉嫩av| 亚洲午夜极品| 国产va免费精品高清在线| 亚洲一级片免费看| 国产精品18久久久久久久久久久久 | 一区二区三区免费在线| 国产福利91精品一区二区三区| 国产精品区一区二区三含羞草| 日本韩国精品一区二区| 中文字幕不卡在线播放| 日本福利视频网站| 在线高清av| 91精品在线麻豆| 韩国无码一区二区三区精品| 久久中文视频| 97在线观看视频| 91中文字幕在线视频| 成人精品视频.| 亚洲免费久久| aa国产成人| 欧美区一区二区三区| www.17c.com喷水少妇| 日本黄色精品| 51色欧美片视频在线观看| 一本色道久久综合精品婷婷| 99视频在线精品| 中文字幕久久一区| 另类专区亚洲| 精品动漫一区二区三区在线观看| 国产sm调教视频| 亚洲激情网站| 亚洲www在线观看| 国产免费a∨片在线观看不卡| 一区二区激情小说| wwwwwxxxx日本| 一区二区三区视频免费观看| 欧美美最猛性xxxxxx| 中文字幕 视频一区| 94色蜜桃网一区二区三区| 天天爱天天做天天操| 日韩高清不卡| 亚洲欧美日韩国产成人| 日本少妇做爰全过程毛片| 国产一区二区精品在线观看| 日韩精品久久久免费观看| 福利影院在线看| 精品国产精品网麻豆系列 | 九色网友自拍视频手机在线| 亚洲综合成人在线视频| 免费av不卡在线| 欧美日韩激情在线一区二区三区| 97色在线观看| 刘亦菲毛片一区二区三区| 亚洲视频在线观看三级| 日本在线一二三区| 欧美日韩久久精品| 国产不卡av在线| 国产最新视频在线| 色综合久久中文综合久久97| 久久久久亚洲AV成人无码国产| 欧美日韩爆操| 91精品啪在线观看麻豆免费| 亚洲乱亚洲乱妇| 欧美午夜片在线观看| 中字幕一区二区三区乱码| 久久精品盗摄| 日本在线视频不卡| 成人在线视频播放| 色av中文字幕一区| 一区二区国产欧美| 亚洲欧美视频在线观看| 国产999免费视频| 综合日韩在线| 91手机在线观看| av电影在线免费| 亚洲精品美女在线| 久久久精品福利| 欧美国产激情一区二区三区蜜月| 午夜免费一区二区| 国产精品福利在线观看播放| 91网站在线免费观看| 在线观看男女av免费网址| 日韩欧美电影在线| 亚洲男人第一av| 久久久久国产精品麻豆ai换脸 | 91精品国产一区二区在线观看| 啊v视频在线一区二区三区 | 国产午夜精品一区二区三区 | 九九精品在线观看视频| 成人avav影音| 情侣黄网站免费看| 日韩亚洲一区在线| 51精品国产人成在线观看| 丰乳肥臀在线| 日韩精品在线电影| 中文字幕在线视频第一页| 亚洲精品菠萝久久久久久久| 国产二级一片内射视频播放| 久久亚洲精选| 400部精品国偷自产在线观看| 911亚洲精品| 国产99视频精品免视看7| 最新真实国产在线视频| 日韩一区二区三区视频在线 | 国产精品普通话对白| 日韩三级电影| 日韩在线视频一区二区三区| 51视频国产精品一区二区| 秋霞午夜理伦电影在线观看| 亚洲丁香久久久| 国产天堂第一区| 夜夜操天天操亚洲| 欧美午夜激情影院| 成人一区在线观看| 99久久激情视频| 欧美日韩国产精品一区二区亚洲| 免费日韩av电影| 精品中文在线| 国产精品激情自拍| av成人 com a| 久久久极品av| 黄色影院在线播放| 欧美mv日韩mv国产网站app| 精品黑人一区二区三区| 亚洲国产精品久久人人爱蜜臀| 四虎国产精品成人免费入口| 国产精品99久| 尤物国产在线观看| 亚洲免费影视| 国产免费裸体视频| 国产精品久久久久久久免费观看| 国严精品久久久久久亚洲影视| 色综合一区二区日本韩国亚洲| 91禁国产网站| 日本三级韩国三级欧美三级| 一区二区三区国产视频| 天天色综合av| 日韩视频永久免费| 中文字幕视频在线播放| 色综合久久久久| 日本高清www免费视频| 亚洲日本电影在线| 日韩精品电影一区二区三区| 99re热这里只有精品免费视频| 美女被艹视频网站| 美女精品自拍一二三四| 麻豆av免费在线| 国产精品美女久久久浪潮软件| 日韩一级免费看| 一区二区电影| 自拍视频一区二区三区| 日韩国产欧美| 台湾成人av| 国产探花一区| 日韩国产在线一区| 欧美三级伦理在线| 欧洲一区二区在线观看| 婷婷综合一区| 久久久精品动漫| 欧洲亚洲成人| 麻豆成人av| 欧美日韩爱爱| 欧洲精品一区色| 国产免费av一区二区三区| 蜜桃传媒视频第一区入口在线看| 天天久久夜夜| 奇米888一区二区三区| 久操成人av| 日韩精品不卡| 999久久久国产精品| 椎名由奈jux491在线播放| 亚洲精品一区二区妖精| 日韩第一页在线观看| 午夜精品偷拍| 你懂的av在线| 日韩精品一二区| 亚洲一级免费在线观看| 国内久久精品视频| 国产免费无码一区二区| 99久久婷婷国产精品综合| 搡老熟女老女人一区二区| 久久亚洲欧美国产精品乐播| 夫妇露脸对白88av| 亚洲欧美一区二区三区久本道91| 欧美成人一二三区| 亚洲国产三级在线| 亚洲黄网在线观看| 欧美乱熟臀69xxxxxx| www.蜜臀av| 精品调教chinesegay| 成年人视频在线免费观看| www.亚洲免费视频| 金瓶狂野欧美性猛交xxxx| 97**国产露脸精品国产| 777午夜精品电影免费看| 成人xvideos免费视频| 成人av影音| 欧美主播一区二区三区美女 久久精品人| 精品国产乱码久久久久久蜜坠欲下| 亚洲日本欧美在线| 在线国产日韩| 看欧美ab黄色大片视频免费| 国产一区 二区 三区一级| 免费a v网站| 中文字幕中文在线不卡住| 精品视频久久久久| 在线亚洲+欧美+日本专区| 精品乱子伦一区二区| 亚洲美女福利视频网站| 大地资源网3页在线观看| 18久久久久久| 国产精品久久久久久久久久辛辛 | 婷婷国产在线综合| 亚洲性生活大片| 亚洲激情小视频| 麻豆视频在线观看免费网站| 91av视频导航| 免费看日产一区二区三区| 欧美一级日本a级v片| 国产精品九九| 天天干天天色天天干| www精品美女久久久tv| 麻豆精品一区二区三区视频| 欧美最猛性xxxxx直播| 婷婷五月综合久久中文字幕| 久久九九精品99国产精品| 波多野结衣久久精品| 97se在线视频| 99精品一区| 中文字幕第21页| 91蜜桃免费观看视频| 黄色一级视频免费| 欧美精选一区二区| 六十路在线观看| 97在线视频国产| 日韩在线观看中文字幕| 中文有码久久| 美美哒免费高清在线观看视频一区二区| 三叶草欧洲码在线| 亚洲成人第一页| 精品人妻一区二区三区蜜桃| 中文综合在线观看| 成人在线免费av| 国产在线精品一区| 亚洲人成人一区二区三区| 污视频在线观看免费网站| 国产精品久久久久久久久快鸭| 中文字幕免费在线观看视频| 亚洲电影第1页| www.8ⅹ8ⅹ羞羞漫画在线看| 亚洲自拍欧美另类| 99热国内精品| 日韩va在线观看| 国产精品乱人伦| 在线观看视频二区| 在线播放精品一区二区三区 | 国产激情一区二区三区在线观看| 亚洲v在线看| 亚洲一区二区福利视频| 18成人在线观看| 国产日韩在线观看一区| 久久精品久久久久电影| 精品99re| 日本中文字幕一级片| 国产99一区视频免费| 精品人妻在线播放| 精品成人在线观看| 国产精选在线| 欧美二区三区| 久久一区国产| 久久久免费看片| 在线不卡a资源高清| 好操啊在线观看免费视频| 3d动漫啪啪精品一区二区免费| 欧美高清一区| 午夜男人的天堂| 日韩欧美黄色动漫| 国产在线观看免费| 成人亚洲欧美一区二区三区| 在线中文字幕第一区| 日本一区二区免费视频| 精品成人久久av| 国产精品一二三区视频| 国产一区深夜福利| 欧美一区高清| 激情综合丁香五月| 欧美午夜影院一区| wwwav在线| 久久精品人成| 男女视频一区二区| 免费网站观看www在线观| 亚洲精品国产综合区久久久久久久| 欧美极度另类| 熟女视频一区二区三区| 成人激情综合网站| 69视频免费看| 久久91亚洲精品中文字幕奶水 | 国产成人在线网站| 久久不卡免费视频| 色噜噜久久综合伊人一本| 亚洲精品一区二区三区中文字幕| 精品无码一区二区三区在线| 日本一区二区三区国色天香| 国产精品嫩草影院桃色| 欧美激情手机在线视频 | 91久久青草| xxxx18hd亚洲hd捆绑| 中文字幕va一区二区三区| 性一交一乱一色一视频麻豆| 欧美在线一级va免费观看| 亚洲欧美综合久久久| 大又大又粗又硬又爽少妇毛片| 日韩一区二区在线看| 国产另类xxxxhd高清| 亚洲熟妇无码av在线播放| 国产日韩一级二级三级|