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

iOS開發中的sqlite數據庫

移動開發 iOS
本文將詳細介紹一下iOS開發中sqlite數據庫的原理和使用方法,希望通過本文的介紹和講解,各位讀者朋友可以進一步的對iOS中的sqlite數據庫有所了解與掌握。

前面寫了一篇博文講如何在C#中使用ADO訪問各種數據庫,在移動開發和嵌入式領域也有一個輕量級的開源關系型數據庫-sqlite。它的特點是零配置(無需服務器),單磁盤文件存儲數據(就像 fopen一樣),平臺無關性,使用起來簡單又高效。這些特點讓其非常適合移動開發和嵌入式領域。當然,sqlite也因其力求簡單高效,也就限制了它對并發,海量數據的處理。下面,我就再接再厲,來講講如何在iOS開發中使用sqlite數據庫和第三方封裝庫FMDB,以及介紹一個MAC下開源的可視化sqlite瀏覽器。

本文源碼:https://github.com/kesalin/iOSSnippet/tree/master/SQLiteDemo

一,在 iOS 中的使用

在 iOS 中 sqlite3 庫是一套純 C 的接口,因此很方便地就可以在 obj-c 源碼中無痕使用它,而且其使用方式與用 ADO 方式操作數據庫大同小異-少了創建數據庫鏈接一環而已(因為 sqlite 沒有服務器的概念也就無需鏈接了)。

首先,需要引入 libsqlite3.0.dylib:

    然后包含頭文件:

    #import "/usr/include/sqlite3.h"

     

    打開或創建數據庫

    1. SQLITE_API int sqlite3_open( 
    2.   const char *filename,   /* Database filename (UTF-8) */ 
    3.   sqlite3 **ppDb          /* OUT: SQLite db handle */ 
    4. ); 

使用示例:(dbPath 為 NSString *)

  1. // open database 
  2. // 
  3. int state = sqlite3_open([dbPath UTF8String], &database); 
  4. if (state == SQLITE_OK) { 
  5.     DLOG(@" >> Succeed to open database. %@", dbPath); 
  6. else { 
  7.     DLOG(@" >> Failed to open database. %@", dbPath); 

關閉數據庫

  1. SQLITE_API int sqlite3_close(sqlite3 *); 

上面這個接口將關閉數據庫,如果當前還有事務沒有提交,會先執行 rollback 操作,然后再關閉數據庫。

執行 sql 語句

  1. SQLITE_API int sqlite3_exec( 
  2.   sqlite3*,                                  /* An open database */ 
  3.   const char *sql,                           /* SQL to be evaluated */ 
  4.   int (*callback)(void*,int,char**,char**),  /* Callback function */ 
  5.   void *,                                    /* 1st argument to callback */ 
  6.   char **errmsg                              /* Error msg written here */ 
  7. ); 

這個接口是最常用到的,幾乎除了查詢之外的 sql 命令都可以用它來操作,比如創建表,插入/更新/刪除記錄,創建/提交/回滾事務等。注意:如果 errmsg 不為 null,那么當錯誤發生時, sqlite 就會為錯誤消息分配內存,返回給調用者,調用者有責任調用 sqlite3_free 來釋放這部分內存。為了方便使用,我封裝了一個簡單的 obj-c 方法:

  1. - (BOOL)excuteSQLWithCString:(const char *)sqlCmd 
  2.     char * errorMsg; 
  3.     int state = sqlite3_exec(database, sqlCmd, NULL, NULL, &errorMsg); 
  4.     if (state == SQLITE_OK) { 
  5.         DLOG(@" >> Succeed to %@"
  6.              [NSString stringWithCString:sqlCmd encoding:NSUTF8StringEncoding]); 
  7.     } 
  8.     else { 
  9.         DLOG(@" >> Failed to %@. Error: %@"
  10.              [NSString stringWithCString:sqlCmd encoding:NSUTF8StringEncoding], 
  11.              [NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding]); 
  12.          
  13.         sqlite3_free(errorMsg); 
  14.     } 
  15.      
  16.     return (state == SQLITE_OK); 

下面是創建表以及事務操作的使用示例:

  1. - (void)createTable 
  2.     if (database == NULL) { 
  3.         DLOG(@" >> Database does not open yet."); 
  4.         return
  5.     } 
  6.     const char * sqlCmd = "create table if not exists customer (id integer primary key autoincrement, name text not null, address text, age integer)";    
  7.     [self excuteSQLWithCString:sqlCmd]; 
  8. - (BOOL)beginTransaction 
  9.     return [self excuteSQLWithCString:"BEGIN EXCLUSIVE TRANSACTION;"]; 
  10. - (BOOL)commit 
  11.     return [self excuteSQLWithCString:"COMMIT TRANSACTION;"];     
  12. - (BOOL)rollback 
  13.     return [self excuteSQLWithCString:"ROLLBACK TRANSACTION;"]; 

很簡單,不是么?至于插入,更新,刪除示例,請參考如下 sqlCmd:

  1. // insert 
  2.     NSString * sqlCmd = [NSString stringWithFormat:@"insert into customer (name, address, age) values ('%@', '%@', %d)"
  3.                            customer.name, customer.address, customer.age]; 
  4. // update 
  5.     NSString * sqlCmd = [NSString stringWithFormat:@"update customer set address='%@',age=%d where name='%@'"
  6.                          newValue.address, newValue.age, oldValue.name]; 
  7. // delete 
  8.     NSString * sqlCmd = [NSString stringWithFormat:@"delete from customer where name='%@'"
  9.                            customer.name]; 

 

查詢操作

查詢操作稍微負責一點,需要創建查詢描述(sqlite3_stmt),然后調用如下接口編譯成字節程序:

  1. SQLITE_API int sqlite3_prepare_v2( 
  2.   sqlite3 *db,            /* Database handle */ 
  3.   const char *zSql,       /* SQL statement, UTF-8 encoded */ 
  4.   int nByte,              /* Maximum length of zSql in bytes. */ 
  5.   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */ 
  6.   const char **pzTail     /* OUT: Pointer to unused portion of zSql */ 
  7. ); 

注意:這里使用的是 v2 - version 2,這是 sqlite 推薦使用的版本,version 1 僅僅是為了向后兼容而保留著。

然后使用如下接口來評估的查詢結果:

  1. SQLITE_API int sqlite3_step(sqlite3_stmt*); 

如果該接口返回 SQLITE_ROW,表面查詢到了一行記錄,我們就可以以下接口從查詢描述中獲取我們想要的值:

  1. SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); 
  2. SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); 
  3. SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); 
  4. SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); 
  5. SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); 
  6. SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); 
  7. SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); 
  8. SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); 
  9. SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); 
  10. SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); 

最后,需要通過如下接口釋放先前創建的查詢描述。通常,為了提高查詢效率,可以把常用的查詢描述緩存起來。

  1. SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); 

下面就來看一個具體的使用示例:

  1. - (NSArray *)queryAllCustomers 
  2.     NSMutableArray * array = [[NSMutableArray alloc] init]; 
  3.     const char * sqlCmd = "select name, address, age from customer"
  4.     sqlite3_stmt * statement; 
  5.     int state = sqlite3_prepare_v2(database, sqlCmd, -1, &statement, nil); 
  6.     if (state == SQLITE_OK) { 
  7.         DLOG(@" >> Succeed to prepare statement. %@"
  8.              [NSString stringWithCString:sqlCmd encoding:NSUTF8StringEncoding]); 
  9.     } 
  10.     NSInteger index = 0; 
  11.     while (sqlite3_step(statement) == SQLITE_ROW) { 
  12.         // get raw data from statement 
  13.         // 
  14.         char * cstrName = (char *)sqlite3_column_text(statement, 0); 
  15.         char * cstrAddress = (char *)sqlite3_column_text(statement, 1); 
  16.         int age = sqlite3_column_int(statement, 2); 
  17.         NSString * name = [NSString stringWithCString:cstrName encoding:NSUTF8StringEncoding]; 
  18.         NSString * address = [NSString stringWithCString:cstrAddress encoding:NSUTF8StringEncoding]; 
  19.         KSCustomer * customer = [[KSCustomer alloc] 
  20.                                  initWith:name 
  21.                                  address:address 
  22.                                  age:age]; 
  23.         [array addObject:customer]; 
  24.         DLOG(@"   >> Record %d : %@ %@ %d", index++, name, address, age); 
  25.     } 
  26.     sqlite3_finalize(statement); 
  27.     DLOG(@" >> Query %d records.", [array count]); 
  28.     return array; 

二,MAC 下查看 sqlite db 文件的工具

MAC 下有一款不錯的開源可視化 sqlite db 瀏覽器:SQLite Database Browser,你可以從以下鏈接獲取:

http://sourceforge.net/projects/sqlitebrowser/

該軟件運行界面如下:

三,封裝 sqlite 的第三方庫 FMDB

在 iOS 中直接使用 sqlite 原生 C 接口還是不那么方便,因此催生了第三方的 iOS 版封裝庫,其中使用比較廣泛又輕量級的就是 FMDB(https://github.com/ccgus/fmdb),目前該庫只有六個文件,不超過2000行代碼。

使用也是非常簡單,在工程中包含這六個文件:

然后包含頭文件:

  1. #import "FMDatabase.h" 
  2. #import "FMResultSet.h" 
  3. #import "FMDatabaseAdditions.h" 

就可以使用該庫了:

  1.  // Create database 
  2.     // 
  3.     NSString * path  = [UIHUtilities configPathFor:kDatabaseFile]; 
  4.     FMDatabase db  = [[FMDatabase databaseWithPath:path] retain]; 
  5.     if (![db open]) 
  6.     {   
  7.         DLog(@" >> Error: Failed to open database at %@", path); 
  8.     } 
  9. #if DEBUG 
  10.     db.traceExecution = TRUE; 
  11. #endif 
  12.     // Create tables 
  13.     // 
  14.     [db executeUpdate:@"CREATE TABLE Image (studyUid text, patientId text, seriesUid text, SOPUid text, contentDate text, modality text, patientPosition text, filepath text, thumbnailPath text)"]; 
  15.     // insert 
  16.     // 
  17.     BOOL retValue = [db executeUpdate:@"INSERT INTO Image (studyUid, patientId, seriesUid, SOPUid, contentDate, patientPosition, modality, filepath, thumbnailPath) VALUES (?,?,?,?,?,?,?,?,?)", image.studyUid, image.patientId, image.seriesUid, image.SOPUid, image.contentDate, image.patientPosition, image.modality, image.filepath, image.thumbnailPath];    
  18.     if (!retValue) 
  19.         DLog(@" >> Error: Database failed to insert image %@", image); 
  20.     // query 
  21.     // 
  22.     FMResultSet *rs = [db executeQuery:@"SELECT * FROM Image WHERE SOPUid = ?", SOPUid]; 
  23.     if ([rs next]) 
  24.     { 
  25.          .... 
  26.     } 
  27.     // query count 
  28.     // 
  29.     NSInteger count = 0; 
  30.     FMResultSet *rs = [db executeQuery:@"SELECT COUNT(*) FROM Image WHERE seriesUid = ?", seriesUid]; 
  31.     if ([rs next]) { 
  32.         count = [rs intForColumnIndex:0]; 
  33.     } 
  34.     // delete 
  35.     // 
  36.     retValue = [db executeUpdate:@"DELETE FROM Image WHERE seriesUid = ?", seriesUid]; 
  37.     if (!retValue) 
  38.         DLog(@" >> Error: Database failed to delete image by seriesUid %@", seriesUid); 
  39.     // release database 
  40.     // 
  41.     [db release];

怎么樣,經過本文的介紹您是否對iOS開發中的sqlite數據庫有了一定的理解和掌握?

責任編輯:閆佳明 來源: cnblogs
相關推薦

2013-03-27 09:47:01

Android開發SQAndroid SDK

2011-08-02 16:16:08

iPhone開發 SQLite 數據庫

2011-08-30 14:15:34

QTSQLite數據庫

2013-04-09 16:04:06

iOS開發SQLite知識總結

2013-01-06 09:52:43

SQLite

2011-07-27 10:16:41

iPhone SQLite 數據庫

2024-09-20 18:02:42

C#數據庫SQLite

2011-07-20 12:34:49

SQLite數據庫約束

2019-08-15 07:00:54

SQLite數據庫內存數據庫

2017-07-12 09:20:42

SQLite數據庫移植

2011-08-22 16:08:46

IOS開發數據庫

2011-08-24 13:49:45

Access數據庫轉化

2011-08-22 15:43:08

IOS開發數據庫

2009-09-14 13:57:37

SQLite數據庫開發

2011-07-07 16:42:38

iPhone Sqlite3 數據庫

2011-08-04 18:00:47

SQLite數據庫批量數據

2024-10-28 16:31:03

2011-03-25 13:34:20

SQLite數據庫

2011-07-12 15:22:04

SQLite數據庫

2011-08-22 16:26:25

IOS開發Sqlite數據庫
點贊
收藏

51CTO技術棧公眾號

最近中文字幕免费mv| 国产精品成久久久久三级 | 国产黄a三级三级三级av在线看 | 成人一区二区三区仙踪林| 欧美人与牲禽动交com| 99精品视频中文字幕| 国产精品久久激情| 国产一级片网址| 国产成人影院| 日韩欧美视频在线| 国产精品免费一区二区三区都可以| 欧美激情视频二区| 91午夜精品| 91豆麻精品91久久久久久| 日本特级黄色大片| 欧美精品a∨在线观看不卡| 精品一区二区三区在线观看 | 黑人精品欧美一区二区蜜桃| 97国产真实伦对白精彩视频8| 国产又黄又粗视频| 国产精品极品| 制服丝袜中文字幕一区| 国产超级av在线| 污视频网站免费在线观看| 久久久午夜精品理论片中文字幕| 7777精品伊久久久大香线蕉语言| 日日摸天天添天天添破| 国产精品啊啊啊| 色妞久久福利网| www.av欧美| 国产精品色在线网站| 91精品黄色片免费大全| 日韩中文字幕组| 成年男女免费视频网站不卡| 亚洲欧美经典视频| 亚洲成人av动漫| 青青色在线视频| zzijzzij亚洲日本少妇熟睡| 91福利视频导航| 97caocao| 美国一区二区三区在线播放 | 91成人短视频在线观看| 欧美在线观看一二区| www.玖玖玖| 爱搞国产精品| 亚洲mv在线观看| 亚洲精品无码国产| 金瓶狂野欧美性猛交xxxx| 综合久久综合久久| 天堂av免费看| 国产黄a三级三级三级av在线看| 国产精品久久二区二区| 亚洲高清123| 番号集在线观看| 久久精品人人做| 日韩福利影院| 成全电影播放在线观看国语| 国产日韩三级在线| 日韩精品一区二区三区色偷偷| 色就是色亚洲色图| 久久久国产一区二区三区四区小说 | 成人深夜在线观看| 成人资源av| 亚洲精选一区二区三区| 成人综合婷婷国产精品久久| 国产精品国模大尺度私拍| 国产第100页| 精品动漫3d一区二区三区免费| 欧美黄色成人网| 奇米影视第四色777| 国产精品久久777777毛茸茸| 欧美一区第一页| 久久久久在线视频| 蜜桃av噜噜一区二区三区小说| 国产精品天天狠天天看 | 欧美一区二区黄| 丰满饥渴老女人hd| 免费萌白酱国产一区二区三区| 精品一区精品二区| 国产不卡的av| 97久久综合精品久久久综合| 亚洲国语精品自产拍在线观看| 艳妇乳肉豪妇荡乳xxx| 亚洲日本三级| 日韩有码在线播放| 久久黄色免费视频| 久久大逼视频| 成人美女av在线直播| 亚洲伦理在线观看| 久久久噜噜噜久久人人看| 亚洲高清在线播放| av在线理伦电影| 在线观看日韩av先锋影音电影院| 五月六月丁香婷婷| 欧美激情99| xvideos国产精品| 日韩av一区二区在线播放| 国产大片一区| 欧美精品videosex牲欧美| 日韩欧美成人一区二区三区| 美女一区二区久久| 国产区欧美区日韩区| 福利成人在线观看| 亚洲国产成人av网| 色噜噜狠狠永久免费| 中文字幕视频精品一区二区三区| 亚洲精品之草原avav久久| 天堂av免费在线| 亚洲少妇在线| 91理论片午午论夜理片久久| 无码国产精品一区二区色情男同 | 日韩欧美国产综合在线一区二区三区 | 伊人久久大香线蕉成人综合网| 国产蜜臀在线| 91精品国产综合久久婷婷香蕉 | 久久久久久久久久婷婷| 中文字幕免费观看视频| 91丨porny丨中文| 亚洲色图都市激情| 国产精品久久久久久吹潮| 亚洲高清不卡av| 小泽玛利亚一区二区免费| 欧美亚洲视频| 国产精品一区二区在线观看| 欧美一区二区三区在线观看免费| 欧美色播在线播放| 漂亮人妻被黑人久久精品| 天天做天天爱天天爽综合网| 国产成人精品一区二区| 日韩专区第一页| 一区二区三区四区不卡视频| 一个色综合久久| 成久久久网站| 国产91热爆ts人妖在线| 无码国产精品96久久久久| 亚洲影视在线播放| 性生交大片免费看l| 亚洲精品在线观看91| 国产精品视频99| 国产高清一区在线观看| 色综合久久综合网| 国产三级视频网站| 国产情侣久久| 精品国产_亚洲人成在线| xxxcom在线观看| 精品日韩在线一区| 久久久久久国产精品免费播放| 国产综合久久久久久久久久久久| 亚洲国产日韩美| 97人人做人人爽香蕉精品| 亚洲美女久久久| 精品国产午夜福利| 久久精品一二三| 欧美牲交a欧美牲交aⅴ免费真| 欧美美女啪啪| 日本高清视频精品| 丰满人妻一区二区三区免费视频 | 风流少妇一区二区| 性高湖久久久久久久久aaaaa| 一区视频网站| 久久久久久久影院| 少妇又色又爽又黄的视频| 亚洲va欧美va人人爽午夜 | 精品国产乱子伦一区二区| 欧美大片在线影院| 污视频在线免费| 欧美日韩亚洲一区二区三区| 亚洲天堂网一区二区| 天堂一区二区在线免费观看| 日本一区视频在线播放| 成人在线免费av| 免费91在线视频| 狠狠躁夜夜躁av无码中文幕| 偷拍日韩校园综合在线| 国产亚洲精品熟女国产成人| 日本中文一区二区三区| 一本久道久久综合狠狠爱亚洲精品| 高清久久精品| 久久久人成影片一区二区三区观看| 粉嫩av一区二区夜夜嗨| 欧美视频免费在线| 午夜激情福利电影| 国产成人av福利| 国产精品亚洲a| 亚洲成人av| 麻豆传媒一区| 亚洲18在线| 久久久久久久久网站| 免费在线黄色网址| 欧美一区二区三区免费大片| 日本三级片在线观看| 国产欧美中文在线| 亚洲黄色小说在线观看| 久久久水蜜桃av免费网站| 国产精品美女在线播放| 卡通动漫精品一区二区三区| 国产精品久久久久久久久久ktv| av超碰免费在线| 亚洲欧美在线x视频| 国产又粗又长又黄| 都市激情亚洲色图| 538精品在线视频| 久久先锋影音av鲁色资源网| 国产精品熟女一区二区不卡| 免费永久网站黄欧美| 国产av第一区| 成人影院在线| 精品一区二区久久久久久久网站| 青草综合视频| 欧美诱惑福利视频| 欧洲一区二区三区| 日韩在线视频免费观看| 日本免费一区二区三区最新| 欧美一级二级三级乱码| 国产美女www| 天天色天天操综合| 妺妺窝人体色www在线下载| 国产精品久久久久aaaa樱花| 瑟瑟视频在线观看| 成人app下载| 国产又粗又猛又爽又黄| 蜜臀a∨国产成人精品| 免费观看精品视频| 一区福利视频| 青青草综合视频| 国产精品福利在线观看播放| 欧美日韩亚洲在线| 女仆av观看一区| 国产日韩欧美一区二区| 综合久久成人| 91精品黄色| 99精品女人在线观看免费视频| 国产精品高精视频免费| 欧美片第1页| 日韩av手机在线看| 自拍在线观看| 欧美亚洲成人网| 国产高清视频色在线www| 欧美贵妇videos办公室| h片在线观看网站| 久久久精品国产网站| 欧美成年黄网站色视频| 日韩在线视频观看正片免费网站| 2017亚洲天堂1024| 在线观看免费高清视频97| 美女做暖暖视频免费在线观看全部网址91| 亚洲韩国日本中文字幕| 天天摸天天碰天天爽天天弄| 亚洲精品国产精品国自产观看浪潮| 蜜桃视频在线观看www| 欧美xfplay| 色哟哟中文字幕| 亚洲精品国精品久久99热一| 无码国产精品高潮久久99| 精品在线小视频| 毛片网站在线| 中文字幕亚洲欧美一区二区三区| 国产精品视频一区二区久久| 深夜福利亚洲导航| 国产成人午夜| 欧美日韩国产123| 24小时免费看片在线观看| 97精品国产97久久久久久春色| 岛国av在线播放| 欧洲亚洲在线视频| 成人a在线观看高清电影| 国产综合视频在线观看| 欧美成人精品一级| 国产综合色一区二区三区| 一区二区导航| 天堂资源在线亚洲资源| 我不卡影院28| www.射射射| 日韩国产在线一| 天天看片天天操| 不卡的看片网站| 日韩一区二区a片免费观看| 国产精品久线在线观看| 久久久久亚洲av成人片| 狠狠躁天天躁日日躁欧美| 国产成人麻豆免费观看| 91精品综合久久久久久| 欧日韩在线视频| 中文字幕久热精品视频在线| 成人黄视频在线观看| 98精品在线视频| 青青青国产精品| 精品国产_亚洲人成在线| 91日韩欧美| 可以在线看的av网站| 另类小说视频一区二区| 成人区人妻精品一区二| 国产欧美va欧美不卡在线| 久久网免费视频| 欧美在线啊v一区| 欧美 日韩 国产 成人 在线| 在线观看日韩欧美| heyzo中文字幕在线| 国产精品亚洲美女av网站| 动漫av一区| 自拍偷拍一区二区三区| 国产日韩欧美一区在线| www.国产福利| 国产午夜精品一区二区三区嫩草 | 欧美成人免费| 欧美高清视频一区二区| yiren22亚洲综合| 国产综合欧美在线看| 女主播福利一区| 一区二区三区网址| 91在线观看视频| 九九热精彩视频| 欧美精品一卡二卡| 国产精品无码2021在线观看| 97香蕉超级碰碰久久免费软件| 精品一区二区三区在线观看视频| 日本精品免费| 国产欧美午夜| 精品人妻二区中文字幕| 亚洲欧美自拍偷拍色图| 国产99免费视频| 亚洲精品久久久久中文字幕欢迎你| 免费大片在线观看www| 2019亚洲日韩新视频| 97久久综合精品久久久综合| 潘金莲一级淫片aaaaa免费看| 日本亚洲视频在线| 丰满少妇高潮一区二区| 午夜av电影一区| 免费观看成年人视频| 九九热精品视频国产| 欧美激情三级| 99热都是精品| 国产最新精品免费| 娇小11一12╳yⅹ╳毛片| 欧美视频中文字幕| 高清美女视频一区| 国产精品视频午夜| 欧美色就是色| 国产 porn| 中文字幕欧美激情一区| 久久久精品毛片| 国产亚洲日本欧美韩国| 亚洲日本在线观看视频| 秋霞毛片久久久久久久久| 欧美亚洲三级| 精品无码国产污污污免费网站| 色综合久久88色综合天天免费| 嫩草研究院在线观看| 国产成人一区二区| 成人免费在线观看av| 999在线观看| 综合分类小说区另类春色亚洲小说欧美| 中文在线免费观看| 日韩在线免费视频| 欧美男女视频| 国产一二三四区在线观看| 国产精品12区| 日本天堂在线视频| 国产丝袜精品视频| 国产成人精品亚洲日本在线观看| 视频在线99| 韩国三级中文字幕hd久久精品| 欧美特级一级片| 精品成人佐山爱一区二区| 精品三级久久| 日韩高清av电影| 久久国产福利国产秒拍| 国产精品久久久精品四季影院| 欧美mv日韩mv国产网站| 亚洲啊v在线| 一区二区三区不卡在线| 国产成人在线免费观看| 日韩精品――中文字幕| 亚洲午夜国产成人av电影男同| 精品福利在线| 91黄色在线看| 国产女主播视频一区二区| 国产一区二区三区中文字幕| 欧美日韩爱爱视频| 天天久久夜夜| 精品综合久久久久| 五月天亚洲精品| 91xxx在线观看| 高清不卡一区二区三区| 久久综合网络一区二区| 好吊日在线视频| 日韩激情在线视频| 电影91久久久| 欧美日韩一区二区在线免费观看| 国产精品国模大尺度视频| 肥臀熟女一区二区三区| 国产精品入口日韩视频大尺度| 亚洲区综合中文字幕日日| 黄色录像a级片| 欧美情侣在线播放| 松下纱荣子在线观看| 天堂av免费看| 国产校园另类小说区| 囯产精品久久久久久|