亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > SQLite > 正文

深入SQLite基本操作的總結(jié)詳解

2024-09-07 00:09:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

sqlite提供的是一些C函數(shù)接口,你可以用這些函數(shù)操作數(shù)據(jù)庫(kù)。通過(guò)使用這些接口,傳遞一些標(biāo)準(zhǔn) sql 語(yǔ)句(以 char * 類(lèi)型)給 sqlite 函數(shù),sqlite 就會(huì)為你操作數(shù)據(jù)庫(kù)。sqlite 跟MS的access一樣是文件型數(shù)據(jù)庫(kù),就是說(shuō),一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)文件,此數(shù)據(jù)庫(kù)里可以建立很多的表,可以建立索引、觸發(fā)器等等,但是,它實(shí)際上得到的就是一個(gè)文件。備份這個(gè)文件就備份了整個(gè)數(shù)據(jù)庫(kù)。 sqlite 不需要任何數(shù)據(jù)庫(kù)引擎,這意味著如果你需要 sqlite 來(lái)保存一些用戶(hù)數(shù)據(jù),甚至都不需要安裝數(shù)據(jù)庫(kù)。

下面開(kāi)始介紹數(shù)據(jù)庫(kù)基本操作。
1、基本流程
(1)關(guān)鍵數(shù)據(jù)結(jié)構(gòu):
sqlite 里最常用到的是 sqlite3 * 類(lèi)型。從數(shù)據(jù)庫(kù)打開(kāi)開(kāi)始,sqlite就要為這個(gè)類(lèi)型準(zhǔn)備好內(nèi)存,直到數(shù)據(jù)庫(kù)關(guān)閉,整個(gè)過(guò)程都需要用到這個(gè)類(lèi)型。當(dāng)數(shù)據(jù)庫(kù)打開(kāi)時(shí)開(kāi)始,這個(gè)類(lèi)型的變量就代表了你要操作的數(shù)據(jù)庫(kù)。下面再詳細(xì)介紹。
(2)打開(kāi)數(shù)據(jù)庫(kù):
int sqlite3_open( 文件名, sqlite3 ** ); 用這個(gè)函數(shù)開(kāi)始數(shù)據(jù)庫(kù)操作。需要傳入兩個(gè)參數(shù),一是數(shù)據(jù)庫(kù)文件名,比如:..//test//testDatabase.db。
文件名不需要一定存在,如果此文件不存在,sqlite 會(huì)自動(dòng)建立它。如果它存在,就嘗試把它當(dāng)數(shù)據(jù)庫(kù)文件來(lái)打開(kāi)。 其中sqlite3 ** 參數(shù)即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。這個(gè)結(jié)構(gòu)底層細(xì)節(jié)如何,你不要關(guān)它。
函數(shù)返回值表示操作是否正確,如果是 SQLITE_OK 則表示操作正常。相關(guān)的返回值sqlite定義了一些宏。具體這些宏的含義可以參考 sqlite3.h 文件。里面有詳細(xì)定義。
(3)關(guān)閉數(shù)據(jù)庫(kù):
int sqlite3_close(sqlite3 *); 前面如果用 sqlite3_open 開(kāi)啟了一個(gè)數(shù)據(jù)庫(kù),結(jié)尾時(shí)不要忘了用這個(gè)函數(shù)關(guān)閉數(shù)據(jù)庫(kù)。
sqlite數(shù)據(jù)庫(kù)操作例子

復(fù)制代碼 代碼如下:www.49028c.com

#include "./sqlite3.h"
int main( int , char** )
{
sqlite3 * db = NULL; //聲明sqlite關(guān)鍵結(jié)構(gòu)指針
int result;
//需要傳入 db 這個(gè)指針的指針,
//因?yàn)?sqlite3_open 函數(shù)要為這個(gè)指針?lè)峙鋬?nèi)存,還要讓db指針指向這個(gè)內(nèi)存區(qū)
result = sqlite3_open("..//test//testDatabase.db", &db);//打開(kāi)數(shù)據(jù)庫(kù)
if( result != SQLITE_OK )
{
return -1; //數(shù)據(jù)庫(kù)打開(kāi)失敗
}
//數(shù)據(jù)庫(kù)操作代碼
//…-
//數(shù)據(jù)庫(kù)打開(kāi)成功
sqlite3_close( db ); //關(guān)閉數(shù)據(jù)庫(kù)
return 0;
}

這就是一次數(shù)據(jù)庫(kù)操作過(guò)程。

2、 SQL語(yǔ)句操作(如何用sqlite 執(zhí)行標(biāo)準(zhǔn) sql 語(yǔ)法)
(1)執(zhí)行sql語(yǔ)句: int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg ); 這就是執(zhí)行一條 sql 語(yǔ)句的函數(shù)。
參數(shù)說(shuō)明:
第1個(gè)參數(shù)不再說(shuō)了,是前面open函數(shù)得到的指針。說(shuō)了是關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
第2個(gè)參數(shù)const char *sql 是一條 sql 語(yǔ)句,以/0結(jié)尾。
第3個(gè)參數(shù)sqlite3_callback 是回調(diào),當(dāng)這條語(yǔ)句執(zhí)行之后,sqlite3會(huì)去調(diào)用你提供的這個(gè)函數(shù)。
第4個(gè)參數(shù)void * 是你所提供的指針,你可以傳遞任何一個(gè)指針參數(shù)到這里,這個(gè)參數(shù)最終會(huì)傳到回調(diào)函數(shù)里面,如果不需要傳遞指針給回調(diào)函數(shù),可以填NULL。等下我們?cè)倏椿卣{(diào)函數(shù)的寫(xiě)法,以及這個(gè)參數(shù)的使用。
第5個(gè)參數(shù)char ** errmsg 是錯(cuò)誤信息。注意是指針的指針。sqlite3里面有很多固定的錯(cuò)誤信息。執(zhí)行 sqlite3_exec 之后,執(zhí)行失敗時(shí)可以查閱這個(gè)指針(直接 printf("%s/n",errmsg))得到一串字符串信息,這串信息告訴你錯(cuò)在什么地方。sqlite3_exec函數(shù)通過(guò)修改你傳入的指針的指針,把你提供的指針指向錯(cuò)誤提示信息,這樣sqlite3_exec函數(shù)外面就可以通過(guò)這個(gè) char*得到具體錯(cuò)誤提示。
說(shuō)明:通常,sqlite3_callback 和它后面的 void * 這兩個(gè)位置都可以填 NULL。填NULL表示你不需要回調(diào)。比如你做 insert 操作,做 delete 操作,就沒(méi)有必要使用回調(diào)。而當(dāng)你做 select 時(shí),就要使用回調(diào),因?yàn)?sqlite3 把數(shù)據(jù)查出來(lái),得通過(guò)回調(diào)告訴你查出了什么數(shù)據(jù)。
(2)exec 的回調(diào) :typedef int (*sqlite3_callback)(void*,int,char**, char**); 你的回調(diào)函數(shù)必須定義成上面這個(gè)函數(shù)的類(lèi)型。

sqlite數(shù)據(jù)庫(kù)操作例子:
復(fù)制代碼 代碼如下:www.49028c.com

//sqlite3的回調(diào)函數(shù)
// sqlite 每查到一條記錄,就調(diào)用一次這個(gè)回調(diào)
//para是你在 sqlite3_exec 里傳入的 void * 參數(shù)
//通過(guò)para參數(shù),你可以傳入一些特殊的指針(比如類(lèi)指針、結(jié)構(gòu)指針),然后在這里面強(qiáng)制轉(zhuǎn)換成對(duì)應(yīng)的類(lèi)型
//(這里面是void*類(lèi)型,必須強(qiáng)制轉(zhuǎn)換成你的類(lèi)型才可用)。然后操作這些數(shù)據(jù)
//n_column是這一條記錄有多少個(gè)字段 (即這條記錄有多少列)
//char ** column_value 是關(guān)鍵值,查出來(lái)的數(shù)據(jù)都保存在這里,實(shí)際上是個(gè)1維數(shù)組(不要以為是2維數(shù)組),
//每一個(gè)元素都是一個(gè) char * 值,是一個(gè)字段內(nèi)容(用字符串來(lái)表示,以/0結(jié)尾)
//char ** column_name 跟 column_value是對(duì)應(yīng)的,表示這個(gè)字段的字段名稱(chēng)
int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
{
//這里,我不使用 para 參數(shù)。忽略它的存在.
int i;
printf( "記錄包含 %d 個(gè)字段/n", n_column );
for( i = 0 ; i < n_column; i ++ )
{
printf( "字段名:%s ?> 字段值:%s/n", column_name[i], column_value[i] );
}
printf( "/n" );
return 0;
}

int main( int , char ** )
{
sqlite3 * db;
int result;
char * errmsg = NULL;
result = sqlite3_open("..//test//testDatabase.db", &db );
if( result != SQLITE_OK )
{
return -1; //數(shù)據(jù)庫(kù)打開(kāi)失敗
}
//數(shù)據(jù)庫(kù)操作代碼
//創(chuàng)建測(cè)試表,表名叫 MyTable_1,有2個(gè)字段: ID 和 name。其中ID是一個(gè)自動(dòng)增加的類(lèi)型,
//以后insert時(shí)可以不去指定這個(gè)字段,它會(huì)自己從0開(kāi)始增加
result = sqlite3_exec( db, "create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) ))", NULL, NULL, errmsg );
if(result != SQLITE_OK )
{
printf("創(chuàng)建表失敗,錯(cuò)誤碼:%d,錯(cuò)誤原因:%s/n", result, errmsg );
}
//插入一些記錄
result = sqlite3_exec( db, "insert into MyTable_1( name) values ('走路')", 0, 0, errmsg);
if(result != SQLITE_OK )
{
printf( “插入記錄失敗,錯(cuò)誤碼:%d,錯(cuò)誤原因:%s/n”, result, errmsg );
}

result = sqlite3_exec( db,"insert into MyTable_1( name ) values ('騎單車(chē)')", 0, 0, errmsg);
if(result != SQLITE_OK )
{
printf("插入記錄失敗,錯(cuò)誤碼:%d,錯(cuò)誤原因:%s/n", result, errmsg );
}

result = sqlite3_exec( db, "insert into MyTable_1( name ) values ( '坐汽車(chē)')", 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( "插入記錄失敗,錯(cuò)誤碼:%d,錯(cuò)誤原因:%s/n", result, errmsg );
}
result = sqlite3_exec( db, "select * from MyTable_1", LoadMyInfo, NULL, errmsg );//開(kāi)始查詢(xún)數(shù)據(jù)庫(kù) sqlite3_close( db ); //關(guān)閉數(shù)據(jù)庫(kù)
return 0;
}

通過(guò)上面的例子,應(yīng)該可以知道如何打開(kāi)一個(gè)數(shù)據(jù)庫(kù),如何做數(shù)據(jù)庫(kù)基本操作。
(3)不使用回調(diào)查詢(xún)數(shù)據(jù)庫(kù)
sqlite3_exec 是使用回調(diào)來(lái)執(zhí)行 select 操作。還有一個(gè)方法可以直接查詢(xún)而不需要回調(diào)。但是,我個(gè)人感覺(jué)還是回調(diào)好,因?yàn)榇a可以更加整齊,只不過(guò)用回調(diào)很麻煩,你得聲明一個(gè)函數(shù),如果這個(gè)函數(shù)是類(lèi)成員函數(shù),你還不得不把它聲明成 static 的(C++成員函數(shù)實(shí)際上隱藏了一個(gè)參數(shù):this,C++調(diào)用類(lèi)的成員函數(shù)的時(shí)候,隱含把類(lèi)指針當(dāng)成函數(shù)的第一個(gè)參數(shù)傳遞進(jìn)去。結(jié)果,這造成跟前面說(shuō)的 sqlite 回調(diào)函數(shù)的參數(shù)不相符。只有當(dāng)把成員函數(shù)聲明成 static 時(shí),它才沒(méi)有多余的隱含的this參數(shù))。雖然回調(diào)顯得代碼整齊,但有時(shí)候你還是想要非回調(diào)的 select 查詢(xún)。這可以通過(guò) sqlite3_get_table 函數(shù)做到。
int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg );
參數(shù)說(shuō)明:
第1個(gè)參數(shù)不再多說(shuō),看前面的例子。
第2個(gè)參數(shù)是 sql 語(yǔ)句,跟 sqlite3_exec 里的 sql 是一樣的。是一個(gè)很普通的以/0結(jié)尾的char *字符串。
第3個(gè)參數(shù)是查詢(xún)結(jié)果,它依然一維數(shù)組(不要以為是二維數(shù)組,更不要以為是三維數(shù)組)。它內(nèi)存布局是:第一行是字段名稱(chēng),后面是緊接著是每個(gè)字段的值。下面用例子來(lái)說(shuō)事。
第4個(gè)參數(shù)是查詢(xún)出多少條記錄(即查出多少行)。
第5個(gè)參數(shù)是多少個(gè)字段(多少列)。
第6個(gè)參數(shù)是錯(cuò)誤信息,跟前面一樣,這里不多說(shuō)了。
sqlite數(shù)據(jù)庫(kù)操作例子:
復(fù)制代碼 代碼如下:www.49028c.com

int main( int , char ** )
{
sqlite3* db;
int result;
char* errmsg = NULL;
char **dbResult; //是 char ** 類(lèi)型,兩個(gè)*號(hào)
int nRow, nColumn;
int i , j;
int index;
result = sqlite3_open("..//test//testDatabase.db", &db );
if( result != SQLITE_OK )
{
return -1; //數(shù)據(jù)庫(kù)打開(kāi)失敗
}
//數(shù)據(jù)庫(kù)操作代碼
//假設(shè)前面已經(jīng)創(chuàng)建了 MyTable_1 表
//開(kāi)始查詢(xún),傳入的 dbResult 已經(jīng)是 char **,這里又加了一個(gè) & 取地址符,傳遞進(jìn)去的就成了 char ***
result = sqlite3_get_table( db, "select * from MyTable_1", &dbResult, &nRow, &nColumn, &errmsg );
if( SQLITE_OK == result ) //查詢(xún)成功
{
index = nColumn; //前面說(shuō)過(guò) dbResult 前面第一行數(shù)據(jù)是字段名稱(chēng),從 nColumn 索引開(kāi)始才是真正的數(shù)據(jù)
printf("查到%d條記錄/n", nRow );
for( i = 0; i < nRow ; i++ )
{
printf( "第 %d 條記錄/n", i+1 );
for( j = 0 ; j < nColumn; j++ )
{
printf("字段名:%s ß> 字段值:%s/n", dbResult[j], dbResult [index]);
// dbResult 的字段值是連續(xù)的,從第0索引到第 nColumn - 1索引都是字段名稱(chēng)
// 從第 nColumn 索引開(kāi)始,后面都是字段值,
//它把一個(gè)二維的表(傳統(tǒng)的行列表示法)用一個(gè)扁平的形式來(lái)表示
++index;
}
printf( "/n" );
}
}
//到這里,不論數(shù)據(jù)庫(kù)查詢(xún)是否成功,都釋放 char** 查詢(xún)結(jié)果,使用 sqlite 提供的功能來(lái)釋放
sqlite3_free_table( dbResult );
sqlite3_close( db );//關(guān)閉數(shù)據(jù)庫(kù)
return 0;
}

到這個(gè)例子為止,sqlite3 的常用用法都介紹完了。 用以上的方法,完全可以應(yīng)付絕大多數(shù)數(shù)據(jù)庫(kù)需求。

3、事務(wù)處理
sqlite 是支持事務(wù)處理的。如果你知道你要同步刪除很多數(shù)據(jù),不仿把它們做成一個(gè)統(tǒng)一的事務(wù)。通常一次 sqlite3_exec 就是一次事務(wù),如果你要?jiǎng)h除1萬(wàn)條數(shù)據(jù),sqlite就做了1萬(wàn)次:開(kāi)始新事務(wù)->刪除一條數(shù)據(jù)->提交事務(wù)->開(kāi)始新事務(wù)->… 的過(guò)程。這個(gè)操作是很慢的。因?yàn)闀r(shí)間都花在了開(kāi)始事務(wù)、提交事務(wù)上。你可以把這些同類(lèi)操作做成一個(gè)事務(wù),這樣如果操作錯(cuò)誤,還能夠回滾事務(wù)。事務(wù)的操作沒(méi)有特別的接口函數(shù),它就是一個(gè)普通的 sql 語(yǔ)句而已:
分別如下:
復(fù)制代碼 代碼如下:www.49028c.com

int result;
result = sqlite3_exec( db, "begin transaction", 0, 0, &zErrorMsg ); //開(kāi)始一個(gè)事務(wù)
result = sqlite3_exec( db, "commit transaction", 0, 0, &zErrorMsg ); //提交事務(wù)
result = sqlite3_exec( db, "rollback transaction", 0, 0, &zErrorMsg ); //回滾事務(wù)

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
在线免费视频一区二区| 美女被黑人爆操网站| 黑巨茎大战欧洲金发美女| 熟女av一区二区| 图片区亚洲欧美小说区| 久草在线免费资源站| av网页在线| 欧美国产精品va在线观看| 亚洲精选在线视频| 国产一区不卡| 人妻精油按摩bd高清中文字幕| 国产区一区二区三| 精品国产髙清在线看国产毛片| 久久免费视频这里只有精品| 国产亚洲欧美一区二区| 日本老熟俱乐部h0930| 国产精品一区二区久久| 日韩中文字幕av电影| 在线免费看视频| 欧美日本国产| 精品人妻一区二区三区浪潮在线| 朝桐光av一区二区三区| 日本a级不卡| 欧美做受高潮1| 岛国视频午夜一区免费在线观看| 亚洲成人一区在线观看| 国产不卡一二三| 欧美亚洲成人免费| 99re精彩视频| 亚洲少妇一区二区三区| 美女航空一级毛片在线播放| 草草影院第一页| 国内国产区免费视频| wwwwxxxxx欧美| 国产一区二区中文字幕免费看| 在线观看国产高清视频| 四虎国产精品永久在线国在线| 午夜av电影一区| 欧美日韩在线不卡一区| 动漫av一区| 羞羞的网站在线观看| 蜜桃久久av一区| 亚洲综合色在线| zzijzzij亚洲日本少妇熟睡| 99久久久国产精品| 中文字幕在线视频一区| 激情欧美日韩一区二区| 欧美一级视频在线| 亚洲男女自偷自拍| 91福利国产在线观看菠萝蜜| 五月婷婷在线观看| 欧美xxx在线| 无码日韩人妻精品久久蜜桃| 91精品国产欧美一区二区| 亚洲第一男人天堂| 美女不穿衣服的网站| 亚洲精品电影| 亚洲网站啪啪| 美女免费视频网站| 妺妺窝人体色www聚色窝仙踪| 国产欧美一区二区三区在线看| 久久视频这里有精品| 狠狠干综合网| 91玉足脚交嫩脚丫在线播放| 久久不射2019中文字幕| 香蕉免费一区二区三区在线观看| 亚洲精华国产精华精华液网站| 亚洲成人黄色影院| 无限国产资源| 国产精品久久一区主播| 国产精品欧美激情在线观看| 玖草视频在线观看| 精品国产91乱高清在线观看| 91超薄丝袜肉丝一区二区| 久久久久99人妻一区二区三区| 538国产视频| 亚洲做受高潮无遮挡| 国产成人在线视频网站| 午夜激情视频在线播放| 日本色护士高潮视频在线观看| 久久综合88| 国产精品伦一区二区三区| 国产第一页精品| 一区二区电影网| 精品成a人在线观看| 成人免费a视频| 一本色道久久亚洲综合精品蜜桃| 欧美1区2区视频| av一区二区在线播放| 精品毛片网大全| 欧亚乱熟女一区二区在线| 91福利视频久久久久| 91国产精品电影| 欧美激情视频一区二区三区免费| 青青久久av北条麻妃海外网| 精品国产第一区二区三区观看体验| 91精品啪在线观看国产爱臀| 人人妻人人澡人人爽欧美一区| 黄色大片网站在线观看| 久久精品一区二区三区不卡牛牛| 欧美精品欧美极品欧美激情| 久久精品国产清高在天天线| 五月综合久久| 美女被黑人40厘米进入| 姑娘第5集在线观看免费好剧| 视频国产在线观看| 国产呦系列欧美呦日韩呦| 精品众筹模特私拍视频| 国精品人妻无码一区二区三区喝尿| 亚洲一区二区三区久久久| 亚洲福利视频在线| 精品午夜福利在线观看| eeuss影院www在线观看免费| 成人三级小说| 欧美资源在线| a级毛片免费高清视频| 亚洲色图久久久| 欧美日韩有码| 日本福利小视频| 久久久久久久久久网| 91精品久久久久久久| 日本一区二区免费在线观看视频| 国产盗摄精品一区二区三区在线| 九色在线观看| 国产日本欧美在线| 日产国产欧美视频一区精品| jizz日本大全| 偷拍25位美女撒尿视频在线观看| 欧美在线视频一区二区| 免费黄色在线视频| 亚洲高清一二三区| 欧美人成在线观看网站高清| 99国产精品一区二区三区| 中国丰满人妻videoshd| 交视频在线观看国产| 日韩一区二区三区观看| 日本三级韩国三级久久| 女尊高h男高潮呻吟| 国产乱子夫妻xx黑人xyx真爽| 91久久嫩草影院一区二区| 国产精品每日更新| 亚洲一卡二卡三卡四卡无卡久久| 俺去啦最新地址| 国产一在线精品一区在线观看| 91精品免费观看| 亚洲午夜精品在线观看| 久久久久久久久久久免费精品| 黄瓜视频成人app免费| 国产精品国产三级国产aⅴ原创| 丝袜诱惑亚洲看片| aa片在线观看视频在线播放| 日韩成人午夜电影| 精华区一区二区三区| 久久久久99人妻一区二区三区| 欧美日韩一区二区三区电影| 亚洲av人无码激艳猛片服务器| 国内成人自拍视频| 日韩av电影资源网| 97人人做人人爱| 1769免费视频在线观看| av磁力番号网| 在线播放一区| 精品国产乱子伦一区二区| 韩国三级电影一区二区| 欧洲av一区二区| 伊人在线视频| 波多野结衣视频免费观看| 国产精品老熟女视频一区二区| 久久久福利视频| 亚洲激情六月丁香| 国产极品美女高潮无套嗷嗷叫酒店| 亚洲国产成人私人影院tom| 亚洲精品电影在线| 岛国毛片在线播放| 天天噜天天色| 亚洲福利在线视频| 国产亚洲精品激情久久| 亚洲无中文字幕| 欧美二区在线看| 日韩脚交footjobhd| 亚洲色婷婷一区二区三区| 欧美一区二区免费在线观看| 久久精品夜色噜噜亚洲a∨| 97国产精品久久久| 欧美最顶级的aⅴ艳星| 亚洲精品国产一区二区三区四区在线| 99re8精品视频在线观看| 羞羞免费视频网站| 久草在线视频网站| 欧美在线精品免播放器视频| 久久综合九色综合欧美就去吻| 久久亚洲国产| 天堂一区在线观看| 九九九九精品九九九九| 在线观看黄网站免费继续| 国产视频高清免费| 免费黄色片视频| 日韩国产激情| 18禁免费无码无遮挡不卡网站| 日韩欧美一二三四区| 日韩欧美国产综合在线| 182tv在线播放| 99亚偷拍自图区亚洲| 亚洲精品字幕| 日韩欧美小视频| 少妇丰满尤物大尺度写真| 亚洲综合电影一区二区三区| 国产精品盗摄久久久| 亚洲成人va| 国产日韩欧美二区| 成人伊人222| 日韩三级久久| 欧美一级淫片免费视频| 日韩一级特黄| 欧美一级二级三级区| 国产精品九九久久久久久久| 欧美天堂一区| 日韩美女天天操| 黄色一级片免费的| 亚洲精品午夜久久久久久久| 99re视频精品| 番号集在线观看| 欧美激情国产在线| 日本少妇裸体做爰| 午夜视频福利在线观看| av激情在线观看| 69成人精品免费视频| 影音先锋亚洲一区| 久久久久亚洲av无码网站| 韩国精品一区二区三区六区色诱| 国产一级在线观看www色| 欧美性猛交久久久乱大交小说| 日韩高清不卡一区| 久久久久久18| 久久人人爽人人爽人人片av高清| aa在线视频| 人与牲动交xxxxbbbb高清| 99精品在线观看| 欧美视频久久久| 欧美激情乱人伦一区| 欧美hdxxxxx| 国产在线综合视频| 欧美一区二区三区四区五区| 免费中文字幕日韩欧美| 免费三级网站| 丰满人妻一区二区三区免费| 你懂的国产精品| 欧美性生活大片免费观看网址| 亚洲影院免费| 日本欧美一区二区| 99久久久久久久久| 久久综合九色欧美综合狠狠| 日韩中文字幕1| 国产自产在线视频一区| 久久99蜜桃精品久久久久小说| 在线观看日本一区| 一区二区三区欧美在线观看| 成人三级高清视频在线看| 亚洲蜜桃精久久久久久久| 满满都是荷尔蒙韩剧在线观看| 2020国产在线视频| 97国产超碰| 婷婷综合在线观看| 一区二区三区日韩欧美精品| 黄一区二区三区| 免费黄频在线观看| 亚洲午夜精品一区二区| 国语产色综合| 国产伦精品一区二区三区在线观看| 日韩电影免费观看在| 亚洲高清视频免费观看| asian性开放少妇pics| 免费毛片一区二区三区| 蜜桃传媒麻豆第一区在线观看| 日漫免费在线观看网站| 欧美α欧美αv大片| 欧美a一片xxxx片| 黄色大片在线免费观看| bt7086福利一区国产| 亚洲人123区| 欧美激情另类| 99re在线视频| 在线一区亚洲| 先锋av资源网| 国产一区二区三区四区五区传媒| 日本一本中文字幕| wwwwww在线观看| 欧美网色网址| 爽爽爽在线观看| 污黄视频在线观看| 国产亚洲色婷婷久久99精品| 久久久全国免费视频| 亚洲人线精品午夜| 国产一级又黄| 国产清纯白嫩初高中在线观看性色| 香蕉久久夜色精品| a4yy在线播放免费观看视频| 一本大道香蕉久在线播放29| www.51色.com| 日本不卡免费高清视频在线| 久久66热re国产毛片基地| 日韩视频在线观看一区二区| 老司机在线视频二区| www.com国产| 日本理论中文字幕| 亚欧精品在线| 亚洲一区三区在线观看| 日韩美女视频免费在线观看| 欧美成人午夜电影| 老司机免费视频久久| 精品国产18久久久久久| 91在线观看免费观看| 高清一区二区三区视频| 日韩专区中文字幕| 欧美性生交xxxxx久久久| 精人妻一区二区三区| 黑巨人与欧美精品一区| 午夜福利123| 在线观看欧美www| 国产精品一色哟哟哟| 国产精品天干天干在线综合| 香蕉视频国产精品| 丰满女人性猛交| 欧美激情免费观看| 国产视频中文字幕在线观看| 无码人妻一区二区三区免费| 精品高清一区二区三区| 99蜜桃在线观看免费视频网站|