精品欧美一区二区三区在线观看 _久久久久国色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)

天天干天天干天天| xx欧美撒尿嘘撒尿xx| 天堂网av2014| 日韩中文字幕区一区有砖一区| 亚洲视频欧洲视频| 亚洲精品www.| 1234区中文字幕在线观看| 91天堂素人约啪| 国产欧美精品一区二区| 久久亚洲精品大全| 欧美日韩一二三四| 精品免费视频一区二区| 欧美日韩亚洲一二三| 91精品国产91久久久久久青草| 91亚洲精品久久久蜜桃网站 | 奶水喷射视频一区| 日韩在线免费高清视频| 五月天激情小说| 日日夜夜亚洲| 色妹子一区二区| 蜜臀av色欲a片无码精品一区| 成人精品福利| av亚洲产国偷v产偷v自拍| 成人免费直播live| 无码人妻久久一区二区三区不卡| 欧美日韩亚洲一区三区| 自拍亚洲一区欧美另类| 国产黄色三级网站| 无码国模国产在线观看| 欧美日韩免费观看一区二区三区| 加勒比成人在线| 18+视频在线观看| 国产精品美女一区二区三区| 久久久综合亚洲91久久98| a级片在线免费看| 另类调教123区| 日韩美女视频免费在线观看| 国产午夜视频在线| 91精品久久久久久久蜜月| 国产亚洲精品一区二区| 丰满少妇在线观看资源站| 亚洲一区网址| 日韩精品一区二区在线观看| 手机av在线免费| 久久久久伊人| 欧美日韩一区二区在线观看视频| 久热免费在线观看| 亚洲v.com| 欧美日韩国产综合新一区| 亚洲 欧美 综合 另类 中字| 日本高清在线观看| 亚洲精品国产视频| www婷婷av久久久影片| 国产在线观看av| 亚洲日本在线看| 国产精品久久成人免费观看| 黄色网在线免费观看| 国产精品免费人成网站| 亚洲欧洲免费无码| 在线播放毛片| 国产精品三级av| 一区二区三视频| 免费高清完整在线观看| 日韩一区中文字幕| 操bbb操bbb| 在线观看wwwxxxx| 亚洲最大成人网4388xx| 欧洲精品在线播放| 黄色在线网站噜噜噜| 欧美色xxxx| www.色偷偷.com| 日韩成人综合网站| 日韩一区二区三区观看| 91玉足脚交白嫩脚丫| 一区二区三区日本久久久| 国产一区二区日韩精品欧美精品| 性少妇xx生活| 国产一在线精品一区在线观看| 欧美精品videosex极品1| 中文字幕日韩一级| 日韩精品免费专区| 亚洲xxx自由成熟| 少妇精品高潮欲妇又嫩中文字幕| 久久久久久久久99精品| 一区二区不卡在线| 91av久久| 色综合久久中文字幕| 亚洲36d大奶网| 久久九九精品视频| 亚洲精品日韩欧美| 国产精品视频一区二区在线观看| 国内精品福利| 国产精品高潮粉嫩av| 国产免费av观看| 91亚洲精品久久久蜜桃网站| 一区二区三区av在线| 午夜在线激情影院| 色狠狠一区二区| aaaaaaaa毛片| 免费视频国产一区| 欧美成人免费在线视频| 狠狠人妻久久久久久| 国产自产2019最新不卡| 乱一区二区三区在线播放| 秋霞午夜在线观看| 黑人巨大精品欧美一区免费视频 | 日本在线xxx| 狂野欧美性猛交xxxx| 精品国产91亚洲一区二区三区婷婷 | 国产亚洲精品女人久久久久久| 老牛影视一区二区三区| 99影视tv| 日本欧美在线视频免费观看| 精品二区三区线观看| 一区二区三区国产好的精华液| 五月天亚洲一区| 欧美富婆性猛交| 亚洲字幕av一区二区三区四区| 波多野结衣亚洲一区| 一本久道久久综合| 黑人巨大精品欧美一区二区桃花岛| 欧美一区二区三区不卡| 调教驯服丰满美艳麻麻在线视频| 亚洲日韩成人| 动漫美女被爆操久久久| 麻豆免费在线视频| 在线免费视频一区二区| 国产福利在线观看视频| 国户精品久久久久久久久久久不卡| 国产免费亚洲高清| 国产小视频免费在线网址| 五月开心婷婷久久| 香蕉视频免费网站| 一区二区三区网站| 国产欧美日韩免费| 超碰免费97在线观看| 色哟哟一区二区三区| 国产肉体xxxx裸体784大胆| 国产精品vip| 97人人干人人| 宅男在线观看免费高清网站| 91.成人天堂一区| www.xx日本| 久久精品国产成人一区二区三区 | 99欧美视频| 国产精品视频久久久| 国产大学生校花援交在线播放| 黑人极品videos精品欧美裸| 素人fc2av清纯18岁| 伊人久久成人| 国产美女在线精品免费观看| 国产网红在线观看| 精品国产电影一区二区| 国产小视频在线看| 成人动漫一区二区| 国产在线播放观看| 爽爽窝窝午夜精品一区二区| 91大神福利视频在线| 日本大片在线观看| 日本精品视频一区二区三区| 2019男人天堂| 国内精品免费**视频| 国产欧美自拍视频| 成人性生交大片免费看96| 久久免费视频网| 四虎影视在线播放| 色综合久久天天综合网| 国产18无套直看片| 国产在线不卡一区| 一卡二卡三卡视频| 亚洲欧美tv| 国产在线视频2019最新视频| av片哪里在线观看| 日韩av网址在线| 日本三级一区二区三区| 中文字幕在线不卡一区| 黑人无套内谢中国美女| 亚洲欧美视频| 亚洲国产午夜伦理片大全在线观看网站| 久久精品超碰| 久久人人爽人人爽人人片av高请| 青青草在线视频免费观看| 欧美少妇xxx| 五月婷婷一区二区| 久久伊人蜜桃av一区二区| 日本不卡一区二区在线观看| 激情91久久| 色阁综合av| 99久久香蕉| 国产精品久久久久影院日本| 亚洲h片在线看| 亚洲视频在线免费看| av片免费播放| 一本色道久久加勒比精品| 色欲人妻综合网| 久久久亚洲高清| 91av免费观看| 视频一区二区不卡| 精品久久久无码人妻字幂| 国产欧美日韩免费观看| 亚洲国产女人aaa毛片在线| 欧洲精品视频在线| swag国产精品一区二区| 国产成人精品在线播放| 在线看三级电影| 亚洲性视频网站| 丁香六月色婷婷| 欧美日韩三级一区二区| 日韩精品乱码久久久久久| 一色屋精品亚洲香蕉网站| 亚洲久久久久久| 国产麻豆精品95视频| 亚洲爆乳无码专区| 黄色成人精品网站| 中文字幕久久一区| 欧美猛男男男激情videos| 高清av免费一区中文字幕| 欧美日韩免费电影| 日本午夜精品理论片a级appf发布| 黄av在线免费观看| 在线播放精品一区二区三区| 欧美熟妇另类久久久久久不卡 | 午夜精品在线免费观看| 激情欧美日韩| av影院在线播放| 国产高清欧美| 亚洲 国产 日韩 综合一区| 日韩在线影视| 精品国产免费久久久久久尖叫| 中文成人激情娱乐网| 国产精品免费福利| 粉嫩一区二区三区| 奇米影视亚洲狠狠色| 变态调教一区二区三区| 欧美人与性动交| av片在线观看网站| 欧美xxxx18性欧美| 黄a在线观看| 久久综合免费视频| 免费黄网站在线播放| 日韩在线激情视频| 欧美成人高清在线| 久久精品国亚洲| 国产网友自拍视频导航网站在线观看 | 国产精品久久久久久五月尺| 免费观看成人性生生活片| 日本欧美黄网站| 香蕉成人av| 国产精品69久久| 依依综合在线| 国产成人免费av| 国产精品亚洲d| 国产精品久久综合av爱欲tv| 成人网ww555视频免费看| 国产成人精品在线播放| 欧美三级电影网址| 91日韩在线播放| 免费观看在线一区二区三区| 99久久国产免费免费| 成人搞黄视频| 久久精品国产一区二区三区日韩| 日韩有码一区| 亚洲精品久久久久久一区二区| 91一区二区| 51xx午夜影福利| 亚洲看片免费| 久久精品99国产| 久久99精品一区二区三区三区| 亚洲精品手机在线观看| 国产精品一级片| 一本加勒比波多野结衣| 国产亚洲一本大道中文在线| 欧美福利在线视频| 亚洲一区二区欧美| 亚洲AV无码成人精品区东京热| 欧美少妇一区二区| www黄色网址| 国产视频丨精品|在线观看| 国产大片在线免费观看| 欧美大奶子在线| 亚洲风情在线资源| 国产色婷婷国产综合在线理论片a| 国内精品视频| 久久偷看各类wc女厕嘘嘘偷窃 | 日韩一级性生活片| 日韩福利电影在线| 中文字幕第10页| 91色乱码一区二区三区| 亚洲综合久久av一区二区三区| 亚洲一区二区成人在线观看| 欧美精品一二三四区| 欧美精品xxxxbbbb| 少妇人妻精品一区二区三区| 在线精品91av| 91九色美女在线视频| 国产精品福利小视频| 91成人福利| 水蜜桃亚洲精品| 一区免费视频| 国产精品嫩草影院8vv8| 91在线高清观看| 老熟妇高潮一区二区三区| 精品久久久久久久久久ntr影视| 亚洲一区二区人妻| 亚洲精品在线三区| 黄色av电影在线播放| 国产mv免费观看入口亚洲| 午夜视频在线观看精品中文| 日韩av一区二区三区美女毛片| 欧美不卡高清| 一区二区三区视频网| 91免费看视频| 欧美精品一级片| 欧美丰满美乳xxx高潮www| 你懂得在线网址| 久久久之久亚州精品露出| 伊人久久综合网另类网站| 欧美主播一区二区三区美女 久久精品人| 欧美激情一区| 中文字幕亚洲影院| 国产日本欧洲亚洲| 国产情侣自拍av| 精品久久一二三区| 精品国产白色丝袜高跟鞋| 国产精品久久不能| 竹菊久久久久久久| 国产精品国产亚洲精品看不卡| 国模娜娜一区二区三区| 中国1级黄色片| 欧美在线观看视频一区二区 | 香蕉免费一区二区三区在线观看| 日韩精品国内| 久久亚洲风情| 9.1成人看片免费版| 疯狂做受xxxx高潮欧美日本| 日韩中文字幕影院| 久久久久久久久久久免费| 日韩欧美高清一区二区三区| 性生活免费观看视频| 韩国午夜理伦三级不卡影院| 日日操免费视频| 欧美日韩高清一区二区| 97在线观看免费观看高清| 国产精品美乳一区二区免费| 日韩午夜电影网| 手机免费av片| 亚洲免费成人av| 亚洲国产精品欧美久久| 欧美精品videos性欧美| av综合网页| 免费av观看网址| 91老司机福利 在线| 久久青青草原亚洲av无码麻豆| 日韩精品福利网站| 欧美色网在线| 亚洲国产欧美日韩| 国产一区二区免费看| 久久久久久国产精品免费播放| 精品欧美一区二区久久| 日本在线啊啊| 日韩高清三级| 激情都市一区二区| 久久高清无码视频| 亚洲国模精品一区| 欧美黑人粗大| 亚洲精品国产系列| 国产高清精品在线| 国产成人亚洲精品自产在线| 亚洲欧美日韩爽爽影院| 国产精品久久久久久久久久齐齐| 在线视频亚洲自拍| 国产aⅴ精品一区二区三区色成熟| 免费毛片一区二区三区| 亚洲女人被黑人巨大进入| 国产亚洲人成a在线v网站| 国产精品视频二| 久久久精品综合| 国产乱子伦精品无码码专区| 国内自拍欧美激情| 精品国产乱码久久久久久蜜坠欲下| 性猛交ⅹ×××乱大交| 亚洲第一福利一区| 国产视频精选在线| 97超碰资源| 日本不卡在线视频| 久草国产在线视频| 亚洲人成网站777色婷婷| 国产精品久久久久久久久久辛辛 | 91在线免费播放| 97人妻精品一区二区三区动漫| 久久久噜噜噜久久久| 成人羞羞网站入口免费| 91精品啪在线观看国产| 欧美亚洲综合另类| 俄罗斯一级**毛片在线播放 | 色欧美激情视频在线| 精品不卡一区二区三区| 久久精品噜噜噜成人av农村| 日韩精品国产一区二区| 久久久国产一区二区三区|