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

如何用C語言操作sqlite3,一文搞懂

開發(fā) 后端
sqlite3編程接口非常多,對(duì)于初學(xué)者來說,我們暫時(shí)只需要掌握常用的幾個(gè)函數(shù),其他函數(shù)自然就知道如何使用了。

[[343746]]

 sqlite3編程接口非常多,對(duì)于初學(xué)者來說,我們暫時(shí)只需要掌握常用的幾個(gè)函數(shù),其他函數(shù)自然就知道如何使用了。

數(shù)據(jù)庫

本篇假設(shè)數(shù)據(jù)庫為my.db,有數(shù)據(jù)表student。

no name score
4 一口Linux 89.0

創(chuàng)建表格語句如下:

  1. CREATE TABLE  IF NOT EXISTS student (no integer primary keyname text, score real); 

常用函數(shù)

sqlite3_open

  1. int   sqlite3_open(char  *path,   sqlite3 **db); 

功能:

打開sqlite數(shù)據(jù)庫

參數(shù):

path: 數(shù)據(jù)庫文件路徑

db: 指向sqlite句柄的指針,后面對(duì)數(shù)據(jù)庫所有的操作都要依賴這個(gè)句柄

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼(非零值)

sqlite3_close

  1. int   sqlite3_close(sqlite3 *db); 

功能:

關(guān)閉sqlite數(shù)據(jù)庫

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼

  1. const  char  *sqlite3_errmsg(sqlite3 *db); 

功能:

打印錯(cuò)誤信息

返回值:

 

返回錯(cuò)誤信息

不使用回調(diào)函數(shù)執(zhí)行SQL語句

sqlite3_get_table

  1. int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char  

功能:

執(zhí)行SQL操作

參數(shù):

db:數(shù)據(jù)庫句柄

sql:SQL語句

resultp:用來指向sql執(zhí)行結(jié)果的指針

nrow:滿足條件的記錄的數(shù)目

ncolumn:每條記錄包含的字段數(shù)目

errmsg:錯(cuò)誤信息指針的地址

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼

舉例

下面比如我們要顯示student表中所有的數(shù)據(jù)信息,我們就可以利用sqlite3_get_table()執(zhí)行語句:

  1. select * from student 

實(shí)現(xiàn)代碼如下:

  1. void do_show_sample(sqlite3 *db) 
  2.  { 
  3.   char **result, *errmsg; 
  4.  int nrow, ncolumn, i, j, index
  5.  
  6.  if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn, &errmsg) != 0) 
  7.  { 
  8.   printf("error : %s\n", errmsg); 
  9.   sqlite3_free(errmsg); 
  10.  } 
  11.  index = ncolumn; 
  12.  for (i=0; i<nrow; i++) 
  13.  { 
  14.   for (j=0; j<ncolumn; j++) 
  15.   { 
  16.    printf("%-8s : %-8s\n", result[j], result[index]);    
  17.    index++; 
  18.   } 
  19.   printf("************************\n"); 
  20.  } 
  21.  sqlite3_free_table(result); 
  22.  return
  23.  } 

假定當(dāng)前的表格的數(shù)據(jù)信息如下:

no name score
4 一口Linux 77.0
5 一口peng 88.0
6 一口wang 99.0
7 一口網(wǎng) 66.0

關(guān)于這個(gè)函數(shù)中出現(xiàn)的這些參數(shù)的具體含義,我們可以見下圖:

sqlite3編程接口非常多,對(duì)于初學(xué)者來說,我們暫時(shí)只需要掌握常用的幾個(gè)函數(shù),其他函數(shù)自然就知道如何使用了。

數(shù)據(jù)庫

本篇假設(shè)數(shù)據(jù)庫為my.db,有數(shù)據(jù)表student。

no name score
4 一口Linux 89.0

創(chuàng)建表格語句如下:

  1. CREATE TABLE  IF NOT EXISTS student (no integer primary keyname text, score real); 

常用函數(shù)

sqlite3_open

  1. int   sqlite3_open(char  *path,   sqlite3 **db); 

功能:

打開sqlite數(shù)據(jù)庫

參數(shù):

path: 數(shù)據(jù)庫文件路徑

db: 指向sqlite句柄的指針

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼(非零值)

sqlite3_close

  1. int   sqlite3_close(sqlite3 *db); 

功能:

關(guān)閉sqlite數(shù)據(jù)庫

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼

  1. const  char  *sqlite3_errmsg(sqlite3 *db); 

功能:

打印錯(cuò)誤信息

返回值:

 

返回錯(cuò)誤信息

不使用回調(diào)函數(shù)執(zhí)行SQL語句

sqlite3_get_table

  1. int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char * 

功能:

執(zhí)行SQL操作

參數(shù):

db:數(shù)據(jù)庫句柄

sql:SQL語句

resultp:用來指向sql執(zhí)行結(jié)果的指針

nrow:滿足條件的記錄的數(shù)目

ncolumn:每條記錄包含的字段數(shù)目

errmsg:錯(cuò)誤信息指針的地址

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼

舉例

下面比如我們要顯示student表中所有的數(shù)據(jù)信息,我們就可以利用sqlite3_get_table()執(zhí)行語句:

  1. select * from student 

實(shí)現(xiàn)代碼如下:

  1. void do_show_sample(sqlite3 *db) 
  2.  { 
  3.   char **result, *errmsg; 
  4.  int nrow, ncolumn, i, j, index
  5.  
  6.  if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn, &errmsg) != 0) 
  7.  { 
  8.   printf("error : %s\n", errmsg); 
  9.   sqlite3_free(errmsg); 
  10.  } 
  11.  index = ncolumn; 
  12.  for (i=0; i<nrow; i++) 
  13.  { 
  14.   for (j=0; j<ncolumn; j++) 
  15.   { 
  16.    printf("%-8s : %-8s\n", result[j], result[index]);    
  17.    index++; 
  18.   } 
  19.   printf("************************\n"); 
  20.  } 
  21.  sqlite3_free_table(result); 
  22.  return
  23.  } 

假定當(dāng)前的表格的數(shù)據(jù)信息如下:

no name score
4 一口Linux 77.0
5 一口peng 88.0
6 一口wang 99.0
7 一口網(wǎng) 66.0

關(guān)于這個(gè)函數(shù)中出現(xiàn)的這些參數(shù)的具體含義,我們可以見下圖:

 


在這里插入圖片描述

 

 

由上圖可知:代碼中:

  1. ncolumn = 3 
  2. nrow    = 5 
  3. result 指向所有的結(jié)果組成的字符串?dāng)?shù)組, 
  4. 各個(gè)具體字符串的下標(biāo),圖上已經(jīng)標(biāo)明。 

結(jié)合此圖再去理解代碼,就很容易理解代碼的實(shí)現(xiàn)原理。

使用回調(diào)函數(shù)執(zhí)行SQL語句

sqlite3_exec

  1. typedef  int (*sqlite3_callback)(void *, intchar **, char **); 
  2.  
  3. int   sqlite3_exec(sqlite3 *db, const  char  *sql,  sqlite3_callback callback, void *,  char **errmsg); 

功能:

執(zhí)行SQL操作

參數(shù):

db:數(shù)據(jù)庫句柄

sql:SQL語句,就是我們前面兩章用于操作表的增刪改查語句

callback:回調(diào)函數(shù)

errmsg:錯(cuò)誤信息指針的地址

返回值:

 

成功返回0,失敗返回錯(cuò)誤碼

回調(diào)函數(shù)

  1. typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name); 

功能:

每找到一條記錄自動(dòng)執(zhí)行一次回調(diào)函數(shù)

參數(shù):

para:傳遞給回調(diào)函數(shù)的參數(shù)

f_num:記錄中包含的字段數(shù)目

f_value:包含每個(gè)字段值的指針數(shù)組

f_name:包含每個(gè)字段名稱的指針數(shù)組

返回值:

 

成功返回0,失敗返回-1

舉例

  1. sqlite3 *db; 
  2. char  *errmsg,**resultp; 
  3.  
  4. int callback(void *para, int f_num, char **f_val, char **f_name) 
  5.  int i; 
  6.  
  7.  for (i=0; i<f_num; i++) 
  8.  { 
  9.   printf("%-8s", f_val[i]); 
  10.  } 
  11.  printf("\n"); 
  12.  
  13.  return 0; 
  14.  
  15. void do_show(sqlite3 *db) 
  16.  char *errmsg; 
  17.  
  18.  printf("no      name    score\n"); 
  19.   
  20.  if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0) 
  21.  { 
  22.   printf("error : %s\n", sqlite3_errmsg(db)); 
  23.  } 
  24.  printf("\n"); 
  25.  
  26.  return

回調(diào)函數(shù)方法實(shí)現(xiàn)的代碼,需要實(shí)現(xiàn)一個(gè)回調(diào)函數(shù):callback。函數(shù)sqlite3_exec()在解析命令"select * from student" ,沒獲取到一行數(shù)據(jù)就會(huì)調(diào)用一次回調(diào)函數(shù), 參考上面的表格student,

  1. callback()總共會(huì)被調(diào)用5次, 
  2. f_num 對(duì)應(yīng)結(jié)果的列數(shù),為3 
  3. f_value 則指向 每一列對(duì)應(yīng)的值組成的字符串?dāng)?shù)組 

假設(shè)現(xiàn)在callback是第四次被調(diào)用,如下圖:

 

運(yùn)行結(jié)果

編譯需要使用第三方庫lsqlite3。

  1. gcc student.c -o run -lsqlite3 

其他函數(shù)

  1. sqlite3 *pdb, 數(shù)據(jù)庫句柄,跟文件句柄FILE很類似 
  2. sqlite3_stmt *stmt, 這個(gè)相當(dāng)于ODBC的Command對(duì)象,用于保存編譯好的SQL語句 
  3.  
  4. sqlite3_exec(), 執(zhí)行非查詢的sql語句 
  5. sqlite3_prepare(), 準(zhǔn)備sql語句,執(zhí)行select語句或者要使用parameter bind時(shí),用這個(gè)函數(shù)(封裝了sqlite3_exec) 
  6. Sqlite3_step(), 在調(diào)用sqlite3_prepare后,使用這個(gè)函數(shù)在記錄集中移動(dòng) 

還有一系列的函數(shù),用于從記錄集字段中獲取數(shù)據(jù),如

  1. sqlite3_column_text(), 取text類型的數(shù)據(jù) 
  2. sqlite3_column_blob(),取blob類型的數(shù)據(jù) 
  3. sqlite3_column_int(), 取int類型的數(shù)據(jù) 

國際慣例,上完整代碼:

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. #include <unistd.h> 
  4. #include <sqlite3.h> 
  5.  
  6. void do_insert(sqlite3 *db) 
  7.  int no
  8.  char name[16]; 
  9.  float score; 
  10.  char sqlstr[128], *errmsg; 
  11.  
  12.  printf("input no : "); 
  13.  scanf("%d", &no); 
  14.  printf("input name : "); 
  15.  scanf("%s"name); 
  16.  printf("input score : "); 
  17.  scanf("%f", &score); 
  18.  sprintf(sqlstr, "insert into student values (%d, '%s', %.1f)",  
  19.  noname, score); 
  20.  #if __DEBUG 
  21.  printf("cmd:%s\n",sqlstr); 
  22.  #endif 
  23.  if (sqlite3_exec(db, sqlstr, NULLNULL, &errmsg) != 0) 
  24.  { 
  25.   printf("error : %s\n", sqlite3_errmsg(db)); 
  26.  } 
  27.  else 
  28.  { 
  29.   printf("insert is done\n"); 
  30.  } 
  31.  printf("\n"); 
  32.  
  33.  return
  34.  
  35. void do_delete(sqlite3 *db) 
  36.  char *errmsg; 
  37.  char sqlstr[128], expression[64]; 
  38.  
  39.  printf("input expression : "); 
  40.  scanf("%s", expression);//name='ma' 
  41.  sprintf(sqlstr, "delete from student where %s", expression); 
  42. #if __DEBUG 
  43.  printf("cmd:%s\n",sqlstr); 
  44. #endif 
  45.  if (sqlite3_exec(db, sqlstr, NULLNULL, &errmsg) != 0) 
  46.  { 
  47.   printf("error : %s\n", sqlite3_errmsg(db)); 
  48.  } 
  49.  else 
  50.  { 
  51.   printf("deletet is done\n"); 
  52.  } 
  53.  printf("\n"); 
  54.  
  55.  return
  56.   
  57. int callback(void *para, int f_num, char **f_val, char **f_name) 
  58.  int i; 
  59.  
  60.  for (i=0; i<f_num; i++) 
  61.  { 
  62.   printf("%-8s", f_val[i]); 
  63.  } 
  64.  printf("\n"); 
  65.  
  66.  return 0; 
  67.  
  68. void do_show(sqlite3 *db) 
  69.  char *errmsg; 
  70.  
  71.  printf("no      name    score\n"); 
  72.  
  73.  if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0) 
  74.  { 
  75.   printf("error : %s\n", sqlite3_errmsg(db)); 
  76.  } 
  77.  printf("\n"); 
  78.  
  79.  return
  80.  
  81.  void do_show_sample(sqlite3 *db) 
  82.  { 
  83.   char **result, *errmsg; 
  84.  int nrow, ncolumn, i, j, index
  85.  
  86.  if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn, &errmsg) != 0) 
  87.  { 
  88.   printf("error : %s\n", errmsg); 
  89.   sqlite3_free(errmsg); 
  90.  } 
  91.   
  92.  index = ncolumn; 
  93.  
  94.  for (i=0; i<nrow; i++) 
  95.  { 
  96.   for (j=0; j<ncolumn; j++) 
  97.   { 
  98.    printf("%-8s : %-8s\n", result[j], result[index]); 
  99.     
  100.      
  101.    index++; 
  102.   } 
  103.   printf("************************\n"); 
  104.  } 
  105.  sqlite3_free_table(result); 
  106.  
  107.  return
  108.  } 
  109.   
  110.  
  111. int main() 
  112.  sqlite3 *db; 
  113.  int n; 
  114.  char clean[64]; 
  115.  
  116.  if (sqlite3_open("my.db", &db) < 0) 
  117.  { 
  118.   printf("fail to sqlite3_open : %s\n", sqlite3_errmsg(db)); 
  119.   return -1; 
  120.  } 
  121.  
  122.  while ( 1 ) 
  123.  { 
  124.   printf("*********************************************\n"); 
  125.   printf("1: insert record   \n2: delete record  \n3: show record  \n4: quit\n"); 
  126.   printf("*********************************************\n"); 
  127.   printf("please select : ");  
  128.    
  129.   if (scanf("%d", &n) != 1) 
  130.   { 
  131.    fgets(clean, 64, stdin); 
  132.    printf("\n"); 
  133.    continue
  134.   } 
  135.   switch ( n ) 
  136.   { 
  137.    case 1 : 
  138.     do_insert(db); 
  139.     break; 
  140.    case 2 : 
  141.     do_delete(db); 
  142.     break; 
  143.    case 3 : 
  144.     do_show_sample(db); 
  145.     break; 
  146.    case 4 : 
  147.     sqlite3_close(db); 
  148.     exit(0); 
  149.   } 
  150.  } 
  151.  return 0; 

運(yùn)行主頁面:

 

插入記錄:

顯示記錄:


刪除記錄:

本文轉(zhuǎn)載自微信公眾號(hào)「一口Linux」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系一口Linux公眾號(hào)。

 

 

責(zé)任編輯:武曉燕 來源: 一口Linux
相關(guān)推薦

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2023-12-21 08:02:21

CPUJava8列表

2024-03-25 08:18:31

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-09-15 12:00:01

API應(yīng)用程序接口

2021-05-06 05:38:48

Python文件操作異常模塊

2021-02-22 09:44:03

KubernetesDNSLinux

2021-02-15 15:40:28

SQLite3數(shù)據(jù)庫

2023-08-24 16:50:45

2024-06-05 11:43:10

2023-04-03 15:04:00

RPCPHP語言

2019-11-19 08:00:00

神經(jīng)網(wǎng)絡(luò)AI人工智能

2020-03-18 14:00:47

MySQL分區(qū)數(shù)據(jù)庫

2022-06-07 10:13:22

前端沙箱對(duì)象

2021-06-30 08:45:02

內(nèi)存管理面試

2022-08-15 15:39:23

JavaScript面向?qū)ο?/a>數(shù)據(jù)

2021-01-13 05:21:59

參數(shù)

2023-10-16 08:16:31

Bean接口類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

床上的激情91.| 国产精品一区二区三区av麻| 亚洲乱码国产乱码精品精可以看| 亚洲va欧美va国产综合剧情| 免费一级特黄特色大片| 中文有码一区| 欧美一区2区视频在线观看| 高清无码视频直接看| 精品一二三区视频| 精品一区二区免费| 午夜精品一区二区三区在线视| 好吊视频在线观看| 精品国产一区二| 一本色道亚洲精品aⅴ| 一区二区三区四区免费视频| 免费国产羞羞网站视频| 日本欧美一区二区三区乱码| 欧美韩日一区二区| 中文字幕第二区| 欧美日韩一本| 3d动漫精品啪啪一区二区竹菊 | 三级网站在线看| 日本欧美久久久久免费播放网| 欧美激情网友自拍| 成人免费视频入口| 日韩啪啪网站| 亚洲第一免费网站| 加勒比av中文字幕| 成人免费一区| 一本大道久久a久久综合婷婷| 国产 国语对白 露脸| 国产高清美女一级毛片久久| 成人av网在线| 91精品久久久久久蜜桃| 中文字幕日韩国产| 亚洲欧美日韩国产综合精品二区| 欧美大片免费看| 制服丨自拍丨欧美丨动漫丨| 精品久久久久久久久久久aⅴ| 日韩高清免费观看| 超碰人人cao| 国产精品777777在线播放| 色屁屁一区二区| 国产精品秘入口18禁麻豆免会员| 国产www视频在线观看| 国产精品电影一区二区| 视频一区国产精品| 韩国中文字幕2020精品| 91亚洲精品乱码久久久久久蜜桃| 国产精品久久久久av福利动漫| jizz中国少妇| 国产一区二区三区黄视频 | 欧美一级bbbbb性bbbb喷潮片| 欧美精品videos极品| 夜间精品视频| 久久综合五月天| 最新一区二区三区| 欧美在线资源| 欧美黄色性视频| 日本少妇久久久| 亚洲激情网址| 欧美一级在线亚洲天堂| www五月天com| 日本成人中文字幕| 国产日韩在线看片| 国产伦子伦对白视频| 国产精品综合视频| 动漫精品视频| 亚洲欧美色视频| 国产农村妇女精品| 中文字幕欧美人与畜| a级网站在线播放| 亚洲无人区一区| 男人天堂网视频| 青青热久免费精品视频在线18| 欧美午夜电影在线播放| 国产一区二区在线观看免费视频| 欧美二区观看| 日韩精品免费在线观看| 88久久精品无码一区二区毛片| 精品国产一区二区三区四区 | 国产一线二线在线观看| 精品人伦一区二区三区蜜桃免费 | 久久精品国产免费看久久精品| 国产在线精品播放| 欧美一区二区三区成人片在线| 99re在线精品| 在线观看欧美亚洲| 激情av在线播放| 91久久人澡人人添人人爽欧美 | **欧美日韩在线| 精品99久久久久久| 久久中文字幕精品| 欧美在线二区| 国产aaa精品| 国产偷拍一区二区| 91一区在线观看| 三年中文高清在线观看第6集| √8天堂资源地址中文在线| 在线精品亚洲一区二区不卡| 在线观看一区二区三区视频| 久久91精品| 久久视频在线播放| 三级视频在线观看| 国产乱理伦片在线观看夜一区| 久久资源亚洲| 神马午夜伦理不卡| 欧美午夜片在线看| 在线免费看黄色片| 91精品在线观看国产| 欧美亚洲视频在线观看| 国产欧美综合视频| 久久九九全国免费| 可以看毛片的网址| 一区二区三区日本视频| 亚洲精品视频久久| www.youjizz.com亚洲| 久久av老司机精品网站导航| 久久视频在线观看中文字幕| 色噜噜狠狠狠综合欧洲色8| 欧美视频精品在线观看| 成人性生活免费看| 亚洲最新色图| 国产日韩在线亚洲字幕中文| 狠狠狠综合7777久夜色撩人| 五月婷婷综合激情| 欧美一区二区三区影院| 亚洲成av人片乱码色午夜| 国产成人激情视频| 青青草av免费在线观看| 黄色一区二区在线| 久久久久久久久久久久国产精品| 欧美gayvideo| 国产精品久久久久久久av大片| 无码h黄肉3d动漫在线观看| 亚洲综合一区二区精品导航| 在线成人免费av| 亚洲电影影音先锋| 成人av在线网址| 91大神在线网站| 欧美性大战久久| 婷婷色一区二区三区| 久久久久国产精品一区二区| 免费看国产精品一二区视频| 天堂av在线网| 国产视频亚洲精品| 日本视频免费观看| 国产日韩欧美一区二区三区综合| 99福利在线观看| 亚洲精品国模| 国产精品69久久| 国产亚洲依依| 欧美性色黄大片| 日韩欧美在线视频播放| 卡一卡二国产精品| 免费观看黄色的网站| 日韩毛片免费看| 久久视频中文字幕| www.久久精品.com| 亚洲电影第三页| 国产又爽又黄无码无遮挡在线观看| 99在线精品视频在线观看| 久久精品久久精品国产大片| 亚洲十八**毛片| 亚洲人永久免费| 中文字幕欧美人妻精品| 日韩一区在线播放| 一级全黄裸体片| 很黄很黄激情成人| 久久久久久久久久久久久9999| 午夜伦理福利在线| 国产亚洲欧美一区| 国产三级在线观看视频| 亚洲一区在线观看免费观看电影高清| av av在线| 久久中文字幕一区二区三区| 亚洲一区不卡在线| 日本精品国产| 欧美一区二区视频97| 1769视频在线播放免费观看| 欧美一级夜夜爽| 久久狠狠高潮亚洲精品| 久久久久久黄色| 亚洲精品第三页| 影音先锋亚洲电影| 日本视频一区二区不卡| 成人在线视频国产| 国产69精品久久久久久| av资源在线观看免费高清| 欧美一区二区三区视频在线 | 欧美日韩综合色| 久久久久久久久久网站| 久久伊99综合婷婷久久伊| 日韩欧美国产片| 亚洲国产二区| 亚洲日本精品| 欧美大胆视频| 成人黄色生活片| 亚洲精品**中文毛片| 久久亚洲精品网站| 欧美孕妇孕交| 日韩久久久精品| 国产无遮挡又黄又爽又色视频| 亚洲激情第一区| xxxxx99| 成人免费视频一区二区| 国产九九在线观看| 亚洲精品男同| 黄色一级视频播放| 欧美日韩国产在线观看网站 | 久久久久国产精品| 精品人伦一区二区三区| 国产精品亚洲欧美日韩一区在线| 欧美最猛性xxxx| 久久香蕉一区| 麻豆国产精品va在线观看不卡| 韩国三级在线观看久| 亚洲二区中文字幕| 国产丝袜在线视频| 欧美日韩成人综合在线一区二区| 国产婷婷色一区二区在线观看| 一区二区三区不卡在线观看| 国产成人av免费在线观看| 国产午夜精品久久久久久免费视 | 日本中文字幕在线一区| 91精品黄色| 国产视频网站一区二区三区| 国产精品99久久99久久久二8| 九九色在线视频| 久久精品久久久久久国产 免费| 国产在线观看高清视频| 亚洲开心激情网| 亚洲人午夜射精精品日韩| 日韩女优电影在线观看| 精品国产九九九| 欧美一区二视频| 97超碰人人草| 在线播放亚洲一区| 国产精品欧美亚洲| 欧美人xxxx| 国产又黄又粗又猛又爽| 欧美日韩国产经典色站一区二区三区 | 天堂а√在线8种子蜜桃视频| 精品国产一二三区| 亚洲国产精彩视频| 欧美草草影院在线视频| 性一交一乱一透一a级| 欧美一区二区三区白人| 91麻豆视频在线观看| 欧美精品xxxxbbbb| 97人妻精品一区二区三区视频| 欧美精品123区| 国产一区二区在线播放视频| 555www色欧美视频| av无码精品一区二区三区宅噜噜| 日韩一级精品视频在线观看| 精品国产区一区二| 精品88久久久久88久久久| 亚洲男女视频在线观看| 亚洲精品98久久久久久中文字幕| 天堂网av2014| 国产亚洲精品美女| 欧美尤物美女在线| 欧美乱妇40p| av中文字幕在线看| 欧洲中文字幕国产精品| 成人在线免费电影网站| 91夜夜未满十八勿入爽爽影院| 在线观看视频一区二区三区| 精品国产一区二区三| 美日韩中文字幕| 中文精品视频一区二区在线观看| 亚洲成av人片乱码色午夜| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品美女| 国内外成人免费在线视频| 国产黄色精品网站| 欧美一区二区三区成人精品| 国产精品五月天| 九九在线观看视频| 色综合天天天天做夜夜夜夜做| 在线免费观看日韩视频| 精品美女被调教视频大全网站| 日本在线视频1区| 色偷偷亚洲男人天堂| 日本孕妇大胆孕交无码| 欧美在线影院在线视频| 青青国产精品| 久久99九九| 91精品国产乱码久久久久久| 欧美一级视频免费看| 美腿丝袜一区二区三区| 最新日本中文字幕| 欧美激情在线一区二区| 国产精品第56页| 欧美日韩一级二级三级| 国产18精品乱码免费看| 国产亚洲欧美一区| 国产精品xx| 91亚洲精品一区二区| 一区二区三区日本久久久| 伊人久久青草| 日韩精品亚洲专区| 国产精品成人无码专区| 亚洲欧洲av在线| 国产伦精品一区二区三区视频我| 欧美成人vr18sexvr| 日本高清中文字幕在线| 5252色成人免费视频| 欧美中文高清| 影音先锋在线亚洲| 丝袜美腿一区二区三区| 国产午夜在线一区二区三区| 亚洲人成网站精品片在线观看| 91精品国产综合久久久蜜臀九色 | 亚洲一区和二区| 国产精品国模大尺度视频| av网站中文字幕| 精品福利一二区| av在线网址观看| 国产欧美精品久久久| 免费精品国产| 日韩在线综合网| 成熟亚洲日本毛茸茸凸凹| 乱h高h女3p含苞待放| 欧美在线视频你懂得| 日本一区二区三区在线观看视频| 欧美国产日韩二区| 欧美一区一区| 黑人巨茎大战欧美白妇| 精品夜夜嗨av一区二区三区| 亚洲色图27p| 欧美精品一二三四| av在线播放网| 国产精品福利网| 欧美午夜精彩| 男人插女人下面免费视频| 久久久天堂av| 成人a v视频| 国产亚洲精品va在线观看| 亚洲电影有码| 日韩国产在线一区| 丝袜诱惑亚洲看片| 免费看裸体网站| 欧美天天综合网| 在线激情小视频| 成人网页在线免费观看| **女人18毛片一区二区| 黄色片免费网址| 一区二区三区四区乱视频| 精品人妻无码一区二区三区蜜桃一| 久久99亚洲热视| 99精品国产高清一区二区麻豆| 免费人成自慰网站| 北条麻妃一区二区三区| 国产又大又黑又粗免费视频| 日韩高清欧美高清| 日本精品在线中文字幕| 亚洲欧洲中文| 国产在线精品视频| 国产亚洲精久久久久久无码77777| 精品日韩一区二区三区| 成人一级福利| 欧美亚洲国产免费| 美女视频黄免费的久久| 朝桐光av在线| 亚洲第一网中文字幕| 美女100%一区| 国产高清免费在线| 不卡一区在线观看| 久久精品视频1| 久久激情五月丁香伊人| 凹凸成人在线| 麻豆传传媒久久久爱| 亚洲视频中文字幕| 日韩在线视频第一页| 国产成人欧美在线观看| 91精品电影| 91精品人妻一区二区| 欧美精品自拍偷拍| 欧美aaaaaaa| 日本一区二区不卡高清更新| 精久久久久久久久久久| 国产精品99精品| 中文字幕日韩欧美在线 | 麻豆精品视频在线观看视频| 国产高潮国产高潮久久久91 | 国产日韩一区二区三区在线| 日韩影视一区二区三区| 欧美成人vr18sexvr| 天天综合网站| 国产精品视频一二三四区| 久久久亚洲午夜电影| 国产区精品在线| 清纯唯美亚洲综合| 欧美不卡高清| 亚洲毛片亚洲毛片亚洲毛片| 精品88久久久久88久久久| 看片一区二区| 久久国产成人精品国产成人亚洲 |