黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

SQLite3數據庫的介紹和使用教程(面向業務編程-數據庫)

瀏覽:475日期:2023-05-02 10:03:15
目錄
  • SQLite3數據庫的介紹和使用(面向業務編程-數據庫)
    • SQLite3介紹
    • 獲取SQLite3源碼
    • 編寫CMake工程
    • main.cpp
    • 編譯
    • 使用SQL
    • 安裝一個SQLite3
    • 建表
    • 插入行
    • 查找數據
    • 刪除一項數據
    • 更新字段
    • SQL總結
    • C語言編程
    • 打開和關閉一個數據庫文件
    • 打開一個數據庫文件
    • 關閉一個數據庫句柄
    • 執行SQLite語句
    • 不帶回調
    • 帶回調
    • sqlite3_get_table
    • SQLitecpp
    • 源文件
    • 編寫CMake工程
    • 總結

SQLite3數據庫的介紹和使用(面向業務編程-數據庫)

SQLite3介紹

SQLite是一種用C語言實現的的SQL數據庫

它的特點有:輕量級、快速、獨立、高可靠性、跨平臺

它廣泛應用在全世界范圍內的手機電腦應用的內建數據庫

官網地址:https://www.sqlite.org/index.html

SQLite因為其采用文件存儲,且容易移植。在嵌入式中應用非常廣泛,可以說是嵌入式業務開發的必學庫

這次先講一下怎么獲取源碼和使用

獲取SQLite3源碼

SQLite3的官網是https://www.sqlite.org/download.html

在官網找到sqlite-autoconf-3410200.tar.gz文件下載,如下

wget https://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz
tar -zxvf sqlite-autoconf-3410200

下載后解壓,會發現里面很多其他的文件。其中,tea目錄是(Tcl Extension Architecture)可以不用管

主要看里面的c文件和h文件,所以我們把源代碼放到另一個目錄

在工程目錄創建一個目錄lib/sqlite3,然后刪除解壓后的源碼目錄

cp sqlite-autoconf-3410200/*.c lib/sqlite3/
cp sqlite-autoconf-3410200/*.h lib/sqlite3/
rm -r sqlite-autoconf-3410200

將需要的頭文件和源文件拷貝進去

有點強的是sqlite3.c文件的大小居然有8.3M

完成后目錄樹大概應該是這個樣子的

├── build
├── CMakeLists.txt
├── main.cpp
└── lib
    └── sqlite3
├── shell.c
├── sqlite3.c
├── sqlite3ext.h
├── sqlite3.h
└── sqlite3rc.h

編寫CMake工程

其中shell.c是對應的命令行文件,我們可以不用添加。仔細研讀官網的文檔

所以CMakeLists.txt我們可以這么寫

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(useSQLite LANGUAGES C CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
add_executable(useSQLite main.cpp)
# lib sqlite3
include_directories(lib/sqlite3)
add_library(sqlite3
    STATIC
    lib/sqlite3/sqlite3.c)
target_link_libraries(sqlite3 dl)
#
target_link_libraries(useSQLite sqlite3)
# sqlite3-cli
add_executable(SQLite3-cli lib/sqlite3/shell.c)
target_link_libraries(SQLite3-cli sqlite3)

其中關于添加-ldl選項的步驟參考回答:https://stackoverflow.com/questions/20131138/cmake-add-ldl-at-end-of-link-stage-of-add-library

main.cpp

添加main.cpp文件如下

#include <iostream>
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    int i;
    for (i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
}
int main(int argc, char **argv) {
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
    if (argc != 3) {
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
return(1);
    }
    rc = sqlite3_open(argv[1], &db);
    if (rc) {
fprintf(stderr, "Can"t open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return(1);
    }
    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    if (rc!=SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
    }
    sqlite3_close(db);
    return 0;
}

簡單講一下這個源碼,其實就是打開一個數據庫文件執行一條指令

看上面的Usage: %s DATABASE SQL-STATEMENT\n就知道,參數是帶引號的SQL語句

里面調用了三個庫函數sqlite3_open()、sqlite3_exec()sqlite3_close()

分別是打開SQLite數據庫文件,執行第二個參數給的命令,關閉SQLite數據庫文件

因為SQLite是本地文件存儲和讀寫的,所以使用起來還是比較簡單的,不用考慮太多網絡的問題。

編譯

mkdir build && cd build
cmake .. && make

編譯出來有兩個可執行文件,一個是useSQLite一個是SQLite3-cli。

useSQLite就是我們上面說的main.cpp的內容。

SQLite3-cli是官方給的一個命令行執行SQL的程序,可以用它去查一些數據什么的

但是不是很建議用這個,建議用Ubuntu安裝的SQLite3去做查表操作,回退(刪除)比這個方便些(下面一節介紹怎么安裝)

使用SQL

本文為作者原創文章,轉載請注明出處:https://www.cnblogs.com/nbtech/p/use_sqlite_library.html

那么都叫SQLite了,肯定是支持SQL語句的,所以使用SQLite,肯定要懂一些SQL。

這里需要注意的是SQLite中的SQL和其他數據庫的SQL有所區別,使用的時候需要小心。本文只講SQLite的SQL

不過也并不用太擔心,差異不是很大

那么這里簡單講兩個SQL語句

因為只是簡單的介紹文,所以不會說的很詳細

安裝一個SQLite3

我們為了方便練習,可以直接在Ubuntu下安裝一個SQLite3程序

sudo apt install sqlite3

那么簡單創建一個數據庫可以這樣

sqlite3 mydatabase.db

mydatabase.db是數據庫的名字,這樣打開之后,就可以執行后面的SQL語句了

不過也可以拿到shell.c編譯出來的SQLite3-cli(這個比較難用,不過也夠用)

建表

首先,數據庫,數據庫有關系型數據庫(SQL)和非關系型(NoSQL),那么SQLite是屬于 關系型的數據庫

關系型的數據庫呢,一個特點就是它比較的結構化。結構化存儲,就是里面存放東西都是相同結構的,那么相同結構的東西呢就放在一個表里面。

類似于書架上的書籍,整理的時候會將同一類型的書籍放到一個書架上面

那么先建立一個書架,咳咳,建表

CREATE TABLE IF NOT EXISTS mytable (id integer primary key,name text);

上面語句可以建表,建表前會判斷表是不是已經存在,也可以不去判斷,如下

CREATE TABLE yourtable (id integer primary key, name text, age integer);

primary key表示將該字段設置成主鍵

注意:語句結束需要由;(分號)進行結尾,表示這一句SQL結束了,SQLite可以執行了

那么新建的這張表有兩個字段,一個是id,一個是name。id字段的類型是integer整形,就是整數類型,就是0、1、2這些

name字段是text類型,就是文本類型,例如,"zhangsan"或者 "張三"就是文字類型

除了設置主鍵約束,還可以設置唯一約束。SQLite里面設置唯一只需要在字段后面加上一個unique即可

例如在上面name text 改成name text unique

插入行

類比我們往書架上放一本書

數據庫,就是存放數據的一個地方。數據倉庫。

現在庫已經有了(已經建好表了),那么就可以存入結構化的數據了。

在一張表中插入一行數據的操作很簡單,只需要

INSERT INTO mytable (id,name) values (1000, "zhangsan");

注意上面這個zhangsan要用引號括起來,表示這是一個字符串(前面的1000因為是數字所以不用括號)

INSERT INTO表示插入到,mytable指定對應的表,所以上面語句表示向mytable這張表插入一行數據,數據內容就是

id是1000,name是"zhangsan"的一行數據

非常容易理解

重復值:如果我們想嘗試往里面插入相同的id的行,就是報錯,因為id是主鍵,主鍵是不允許重復的。但是插入相同的非主鍵的值是被允許的。

INSERT INTO mytable (id, name) values (1000, "lisi");
Runtime error: UNIQUE constraint failed: mytable.id (19)

查找數據

可以類比我們從書架上挑選感興趣的書,例如找兩本比較厚的書

如果我們想查找一張表里面的所有數據,如下

SELECT * FROM mytable;

*表示匹配所有項,FROM表示從mytable中,SELECT表示選擇

所以就是:從mytable表中選擇所有項

過濾結果

但是如果我們想從表中獲取特定的項呢,我們可以搭配WHERE,例如,我們想提取id大于1000的數據,可以這么寫

SELECT * FROM mytable WHERE id > 1000;

例如我們的表數據內容如下

1000|zhangsan
1001|lisi
1002|wangwu

可以獲取這樣的結果

1001|lisi
1002|wangwu

刪除一項數據

可以類比我們從書架上拿下一本書,這本書不存放到這個書架了

DELETE就是刪除,那么刪除一條數據就是要指定是哪個表的那條數據,可以這么寫

DELETE FROM mytable WHERE id=1001; 

就可以刪除id為1001的數據了,WHERE就是用來指定條件的,一般我們DELETE都是需要搭配WHERE使用,因為通常是要刪除一條或幾條數據。

那么如果不加WHERE,就是刪除表上的所有數據(注意,只是刪除表里面的所有記錄,表還是在的)

DELETE FROM mytable;

多條件

有時候我們需要刪除符合多個條件的數據,我們可以用AND將兩個語句連接起來

例如說,需要刪除age字段大于35的并且id字段小于1000的,可以這么寫

DELETE FROM yourtable WHERE id<1000 AND age>35;

如果我們想修改一項數據,例如想將id為1000的"zhangsan"修改成"zhansang"

我們可以刪除id為1000的數據然后插入id為1000但是name字段為"zhansang"的數據,但是我們可以不必這么做,我們可以更新值

更新字段

這個不好類比書架了,可以類比于拿下一本書換了一本上去吧

更新字段的值,首先要知道是那個字段,所以一定有WHERE語句,然后更新是UPDATE,所以更新字段的語句就是

UPDATE mytable SET name="zhansang" WHERE name="zhangsan";

當然條件的字段和SET的字段不一定要同一個字段,例如條件可以是id<1000,SET后面可以name="zhansang"類似這樣,就可以將所有id小于1000的name都更新成"zhansang"了

SQL總結

SQL數據庫的應用非常廣泛,包括數據采集、數據分析、單純的存取數據。

SQL是非常好用的數據庫查詢語言,并且它不復雜,比較容易懂。而且專業做SQL的人工資也不低(前提是就是靠這個吃飯的哈)。

學好SQL無論是對實用性還是經濟性來說都是非常好的,寫SQL有點像搭積木,想要什么就搭建成什么樣。

C語言編程

在前面編譯CMake工程中其實就有編譯出使用SQLite進行C語言編程的源碼

里面main.cpp里面主要用到3個Sqlite3里面的函數,分別是sqlite3_open、sqlite3_exec和sqlite3_close

非常簡單,三個函數分別是

sqlite3_open表示打開一個數據庫文件,一般為xxx.db

sqlite3_exec表示執行一條SQL語句

sqlite3_close表示關閉數據庫文件

打開和關閉一個數據庫文件

打開一個數據庫文件

首先,先編寫如下代碼

int opendatabase(sqlite3** db, const char* dbfilename) {
    char *zErrMsg = 0;
    int rc;
    rc = sqlite3_open(dbfilename, db);
    if(SQLITE_OK != rc) {
fprintf(stderr, "Can"t open database: %s\n", sqlite3_errmsg(*db));
sqlite3_close(*db);
return -1;
    }
    return 0;
}

上面打開一個名為mydatabase.db的數據庫,db為該數據庫的句柄

然后判斷有沒有錯誤(一般在指定文件不是一個數據庫文件會報錯),如果沒有指定的數據庫文件會自動創建。

關閉一個數據庫句柄

關閉一個數據庫文件可以直接調用sqlite3_close(sqlite3* db);也可以自己封裝一個函數,如下

int clsoedb(sqlite3** db) {
    if(NULL != *db) {
sqlite3_close(*db);
return 0;
    }
    return -1;
}

執行SQLite語句

本文為作者原創文章,轉載請注明出處:https://www.cnblogs.com/nbtech/p/use_sqlite_library.html

因為可以執行的語句特別多,而且上面章節也講過有關SQLite語句的一些介紹,所以這里主要講sqlite3_exec這個C語言接口

先看一下源碼實現

SQLITE_API int sqlite3_exec(
  sqlite3 *db,/* The database on which the SQL executes */
  const char *zSql,   /* The SQL to be executed */
  sqlite3_callback xCallback, /* Invoke this callback routine */
  void *pArg, /* First argument to xCallback() */
  char **pzErrMsg     /* Write error messages here */
){

第一個參數是數據庫的句柄,用于操作數據庫用的。

第二個參數是傳遞給SQLite執行的SQL語句

第三個參數是執行后的回調函數

第四個參數是回調函數的第一個參

第五個參數是如果執行語句錯誤,用于返回錯誤信息的字符串指針

那么第三個參數和第四個參數可以根據需要置為空或者給一個函數指針和一片內存(通常第四個參數用來返回執行后的結果)

不帶回調

不需要回調的示例,參考如下代碼

//創建表
int create_table(sqlite3 *pdb) {
    char *sql = NULL;
    char *errmsg = NULL;
    int ret;
    sql = (char*)"create table if not exists mytable (id integer primary key,name text);";
    ret = sqlite3_exec(pdb, sql, NULL, NULL, &errmsg);
    if(SQLITE_OK != ret) {
printf("create table error! %s\n", errmsg);
return -1;
    } else {
return 0;
    }
}

上面的sql的值就是建表的一個操作,可以參考上面SQL語句的相關介紹。因為建表操作我們只需要知道建表成功了還是失敗了,所以我們不需要填充xCallback和pArg參數,自然填NULL的時候不會調用到回調

帶回調

需要調用回調的示例,參考如下代碼

// callback
int show_row(void *return_, int column, char* result[], char** column_name) {
    for(int i = 0; i < column; i++) {
printf("%s\t", result[i]);
    }
    printf("\n");
    return 0;
}
// 查詢和顯示所有mytable的數據
int query_all_and_show(sqlite3* pdb) {
    char sql[24] = {0};
    char *errmsg = NULL;
    int ret;
    strncpy(sql, "select * from mytable;", 22);
    // 數據庫,語句字符串,回調函數,用戶輸入的參數,最終傳給回調函數使用,錯誤信息
    ret = sqlite3_exec(pdb, sql, show_row, NULL, &errmsg);
    if(SQLITE_OK != ret) {
printf("select exec error: %s\n", errmsg);
return -1;
    }
    return 0;
}

上述代碼查詢了當前mytable表里面的所有行的數據,上面的會調函數當有多行的時候會調用多次。每一次都可以將一行的數據打印出來

如果需要將表返回到主函數,可以在pArg參數那里填充一個結構體鏈表指針(或者vector),然后每次創建一項就可以返回整張表的內容。

sqlite3_get_table

除了sqlite3_exec()函數,SQLite3還提供了一個函數可以執行語句,并且可以在同一個函數中處理返回的數據,像上述的查表的操作其實用這個函數會更好一點

SQLITE_API int sqlite3_get_table(
  sqlite3 *db,/* The database on which the SQL executes */
  const char *zSql,   /* The SQL to be executed */
  char ***pazResult,  /* Write the result table here */
  int *pnRow, /* Write the number of rows in the result here */
  int *pnColumn,      /* Write the number of columns of result here */
  char **pzErrMsg     /* Write error messages here */
){

同樣的,我們看下參數,第一個參數是數據庫句柄,第二個參數是需要執行的SQL語句

第三個參數是返回的結果的表

第四個參數是一共有多少行

第五個參數是一共有多少列

第六個參數是產生錯誤時的錯誤信息返回

這里不講具體的寫法了,輸出行列值可以參考以下寫法

for(int i = 0; i < Col; i++) {
    for(int j = 0; j < Row; j++) {
       printf("%s\t", azResult[i*Row+j]);
    }
    printf("\n");
}

SQLitecpp

SQLiteC++是一個簡潔易用的C++封裝庫

正常我們用C語言去編程,可以像上面章節說的,自己去封裝相關的操作。如果你的項目用上了C++,那么我推薦用C++封裝的庫去寫,會比較方便一點。

源文件

上面C語言編程的章節,介紹了相關操作數據庫的流程,這里不再重復介紹

我們看下使用SQLiteC++最簡單的示例是怎么樣的,首先SQLiteC++的源碼在:https://github.com/SRombauts/SQLiteCpp

我們可以創建一個工程,然后獲取SQLiteC++的源碼

mkdir useSQLiteCpp && cd useSQLiteCpp
git clone https://github.com/SRombauts/SQLiteCpp.git
cd SQLiteCpp
git submodule init
git submodule update

在examples/example2/src路徑下有一個示例的main.cpp,我們可以通過觀察這個文件學習SQLiteC++庫的相關操作,在useSQLiteCpp目錄創建main.cpp,內容如下

#include <iostream>
#include "SQLiteCpp/SQLiteCpp.h"
// https://www.cnblogs.com/nbtech/p/use_sqlite_library.html
int main() {
    try
    {
// Open a database file in create/write mode(用寫模式打開一個數據庫文件)
SQLite::Database    db("test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
std::cout << "SQLite database file "" << db.getFilename().c_str() << "" opened successfully\n";
// Create a new table with an explicit "id" column aliasing the underlying rowid(創建一個表,id設置為主鍵)
db.exec("DROP TABLE IF EXISTS test");
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");
// first row(插入一行,id是NULL就是不指定,不指定會從1開始分配,value是test)
int nb = db.exec("INSERT INTO test VALUES (NULL, \"test\")");
std::cout << "INSERT INTO test VALUES (NULL, \"test\")\", returned " << nb << std::endl;
// second row(插入第二行,id是2,根據上一條記錄加一,value是second)
nb = db.exec("INSERT INTO test VALUES (NULL, \"second\")");
std::cout << "INSERT INTO test VALUES (NULL, \"second\")\", returned " << nb << std::endl;
// update the second row(將id為2的行的value值更新為second-updated)
nb = db.exec("UPDATE test SET value=\"second-updated\" WHERE id="2"");
std::cout << "UPDATE test SET value=\"second-updated\" WHERE id="2", returned " << nb << std::endl;
// Check the results : expect two row of result(讀取結果,應該會有兩行數據。其實就是查表)
SQLite::Statement   query(db, "SELECT * FROM test");
std::cout << "SELECT * FROM test :\n";
while (query.executeStep())
{
    std::cout << "row (" << query.getColumn(0) << ", \"" << query.getColumn(1) << "\")\n";
}
db.exec("DROP TABLE test"); // 刪除test這個表
    }
    catch (std::exception& e)
    { // 異常處理
std::cout << "SQLite exception: " << e.what() << std::endl;
return EXIT_FAILURE; // unexpected error : exit the example program
    }
    // remove("test.db3"); // 刪除文件
    return 0;
}

上面的幾個操作總結就是:

1、聲明一個db文件,以什么形式打開SQLite::Database db("test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);

2、通過exec方法執行各種SQL語句,db.exec(const char* );

3、定義查詢語句,并獲取結果SQLite::Statement query(db, "SELECT * FROM test");

4、異常處理

根據上面的注釋內容可以知道這個main.cpp做了哪些事情

編寫CMake工程

編寫CMake工程也比較簡單,SQLiteC++是通過CMake管理的,所以添加為子項目即可

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(useSQLiteCpp LANGUAGES CXX)
add_executable(useSQLiteCpp main.cpp)
# SQLiteCpp
include_directories(SQLiteCpp/include)
option(SQLITECPP_RUN_CPPLINT "Not Run cpplint.py tool for Google C++ StyleGuide." OFF)
add_subdirectory(SQLiteCpp lib)
target_link_libraries(useSQLiteCpp SQLiteCpp)

編譯就不描述了

總結

數據庫在業務開發中是非常常見的,而SQLite3被廣泛應用在各個領域。并且由于它的小型無服務器結構并且依靠文件存儲,也被廣泛應用在各種嵌入式系統中

所以說,了解SQLite3幾乎是從事嵌入式業務開發的必選項

本文從SQLite3的庫的獲取、工程管理、SQL語句介紹、C語言編程四個角度闡述了SQLite3數據庫的實際應用。希望對你的數據收集、數據管理有一定的啟蒙作用。

but, not yet

相信這對你只是一個開始,當前時代是信息的時代,我們需要的數據越來越龐大,大數據在生活的各個角落起著越來越重要的作用。

在各種高并發、大流量的場景下,SQLite3還是不夠用。我們不能停下腳步,我們的目標是星辰大海。

到此這篇關于SQLite3數據庫的介紹和使用(面向業務編程-數據庫)的文章就介紹到這了,更多相關SQLite3介紹和使用內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MsSQL
主站蜘蛛池模板: wwwav在线| 日本美女日批视频 | 午夜黄色影院 | 最新日韩精品中文字幕 | 麻豆一区二区三区四区 | 人人鲁人人莫一区二区三区 | xvideos成人免费视频 | 色5月婷婷 | 亚洲性色av私人影院无码 | 亚洲精品欧美一区二区三区 | 中文字幕人妻熟女在线 | 自拍偷拍视频在线观看 | 狠狠色伊人亚洲综合网站l 狠狠色依依成人婷婷九月 狠狠色综合久久婷婷色天使 | a天堂中文在线观看 | 少妇做爰免费视频了 | 欧美日韩一本 | 18资源在线www免费 | 国产麻豆午夜三级精品 | 欧美激情精品久久久久久蜜臀 | 91官网在线 | а√天堂8资源在线官网 | 九九热免费 | 国产精品无码一区二区桃花视频 | 亚洲人成人一区二区在线观看 | 欧美精品一级片 | 亚洲精品久久久久久 | 国产精品一品二区三区的使用体验 | 亚洲自拍偷拍一区二区 | 夜夜高潮夜夜爽精品欧美做爰 | 少妇的性事hd | 久久资源总站 | 中文成人无码精品久久久不卡 | 日韩精品xxx | 国产免费a视频 | 国产精品久久久久久久久久 | 亚洲欧美综合区自拍另类 | 久久精品国产亚洲精品 | 色婷婷久 | 欧美xxxx精品 | 国产精品福利影院 | 国产一级淫片a视频免费观看 | 成人h动漫精品一区二区器材 | 国产在线麻豆 | 日本高清视频wwww色 | 国产av国片偷人妻麻豆 | 人人做| 丰满岳妇伦在线播放 | 四虎网站免费观看视频 | 欧美一级夜夜爽 | 黑人粗一硬一长一进一爽一a级 | 希岛婚前侵犯中文字幕在线 | 精品国产乱码久久久久久影片 | av一区二区在线播放 | 葵司有码中文字幕二三区 | 性欧美videos另类hd | 黑人大荫蒂高潮视频 | 色人阁视频 | 精品国产一 | 探花精品 | 阿娇全套94张未删图久久 | 国产h视频在线观看 | 国内一区二区三区 | 在线看黄网址 | 久久久一区二区三区捆绑sm调教 | 国产成人无码av | 国产黄色一级片 | 校园春色亚洲激情 | 伊人久久久久久久久久 | 中文在线字幕免费观看电 | 97视频在线看 | 呦交小u女精品视频 | 国产又色又爽又刺激在线观看 | 日韩一卡2卡3卡4卡新区亚洲 | 日韩av高清在线看片 | 国产精品二区在线 | 女人一级大片 | 人妻体内射精一区二区三四 | 久久久久亚洲精品中文字幕 | 粉嫩av一区二区三区四区在线观看 | 亚洲成人久久精品 | 国产女高清在线看免费观看 | 亚洲我不卡 | 青青伊人精品 | 久久国产福利 | 日韩精品无码不卡无码 | wwwcom捏胸挤出奶 | 国产情侣草莓视频在线 | 熟女人妻水多爽中文字幕 | 午夜精品久久久久久久99热浪潮 | 中文毛片无遮挡高潮免费 | 在线免费精品视频 | 国产麻豆网| 成人性生交大片免费看r视频 | 97免费视频观看 | 免费国精产品自偷自偷免费看 | 天天干天天操天天舔 | 亚洲精品综合欧美二区变态 | 欧美一级片 | av黄色一级片 | 久久久久人妻精品一区三寸 | 国产精品99精品久久免费 | 精品中文字幕一区二区 | 久草综合网 | 天堂а√8在线最新版在线 天堂а√在线地址 | 国产又黄又爽又色的免费视频白丝 | 国产精品888 | 国产午夜一区二区 | 992tv又爽又黄的免费视频 | 婷婷中文在线 | jizz4 在线观看 | 色综合激情 | 18视频在线观看娇喘 | 五月丁香啪啪 | 久久久国产99久久国产久灭火器 | 国产一级免费av | 深夜在线网站 | 丰满少妇人妻无码 | 婷婷开心深爱五月天播播 | 自拍新婚之夜初交视频1 | 91麻豆国产精品 | 不卡中文字幕在线 | 欧美成人免费 | 韩国精品视频在线观看 | 国产日韩欧美视频免费看 | 国产亚洲精品岁国产微拍精品 | 国产猛男猛女超爽免费视频 | 亚洲国产精品成人无码区 | 久久人人爽人人爽人人片av卡 | 人人干在线视频 | 美国成人免费视频 | 蜜桃av无码免费看永久 | 亚洲激情五月 | 亚洲啪啪网址 | 亚洲自拍偷拍一区二区 | 国产熟妇搡bbbb搡bbbb搡 | 国产欧美日韩免费 | а天堂中文最新一区二区三区 | 亚洲国产欧美另类 | 日韩不卡一区 | 内射少妇一区27p | 性做久久久久久免费观看 | 少妇下蹲露大唇无遮挡图片 | 日本道精品一区二区三区 | 黑人做爰xxxⅹ性欧美有限公司 | 久久禁 | 国产原创视频 | 98精品国产高清在线xxxx天堂 | 中文国产日韩精品av片 | 精品一区二区三区久久久 | 久久综合狠狠综合五十路 | 91爱爱网站| 日本无遮羞肉体啪啪大全 | 国产一级做a爰片久久毛片男 | 奇米影视7777狠狠狠狠色 | 中文一级片 | 欧美日韩国产在线 | 欧美日韩一区二区三区在线播放 | 免费在线观看av网站 | 性猛交ⅹxxx富婆video | 理论av | 综合黄色 | 久久强奷乱码老熟女网站 | 午夜黄色一级片 | 香蕉网站视频 | 中国女人做爰视频 | 无码精品人妻一区二区三区影院 | 三级第一页 | 性色av一区二区咪爱 | 国产 欧美 日韩 一区 | av在线进入| 综合国产在线 | 国产日产精品一区二区三区四区的观看方式 | 成人a级做爰生活片 | 青青草视频免费看 | 蜜桃传媒| 国产精品999在线观看 | 午夜久| 国产无遮挡免费观看视频网站 | 亚洲福利网站 | 国产精品pans私拍 | 国产成人无码区免费网站 | 日批视频免费在线观看 | 国产精品国产三级国产aⅴ中文 | 少妇偷乱偷乱视频在线 | 国产亚洲欧美精品久久久久久 | 国产高清在线a视频大全 | 国产极品白嫩精品 | 少妇人妻偷人精品免费视频 | 国产美女网 | 国产免费毛卡片 | 无码专区人妻系列日韩精品 | 无码国产69精品久久久久网站 | 超碰在线图片 | 一区在线播放 | 动漫女女吸乳舌吻羞羞 | 久插视频 | 老司机免费在线视频 | 国产黄色小视频在线观看 | 国产精品久久久久9999 | 国产一区二区三区精品视频 | 韩漫动漫免费大全在线观看 | jlzzjizz亚洲学生好多水 | 91福利网站 | 狠狠操欧美 | 97超碰福利 | 18禁亚洲深夜福利入口 | 深夜网站在线 | 欧美特级黄色大片 | 国产毛片乡下农村妇女bd | 伊人自拍视频 | 青青草欧美| play在线海量a v视频播放 | 国产亚洲99天堂一区 | 日韩精品免费一区二区三区四区 | 久久香综合精品久久伊人 | 国产区在线 | 250pp亚洲情艺中心欧美 | 手机天堂av | 日本黄频 | 国产精品一区二 | 一级全黄色片 | 舐め犯し波多野结衣在线观看 | 久久国产精99精产国高潮 | 天天爱天天做天天爽夜夜揉 | 韩国午夜三级 | av三级在线播放 | 国产精品情侣呻吟对白视频 | 亚洲一区av在线观看 | 中文字幕亚洲视频 | 在线视频h | 亚洲蜜桃视频 | 免费公开在线视频 | 国产精品日日摸夜夜添夜夜av | 2018天天操 | 亚洲成年 | 乱色欧美 | 欧美猛交ⅹxxx乱大交视频 | 亚洲最大成人在线视频 | 在线激情小视频 | 日本特黄特色a大片免费高清观看视频 | www色网站| 韩国日本三级在线观看 | 久久久国产精品无码免费专区 | 黄色国产一级 | 2020av在线 | 日本黄色片段 | 香蕉精品视频在线观看 | 中文字幕乱码亚洲精品一区 | 精品乱码久久久久久中文字幕 | 一级欧美一级日韩片免费观看 | 日本被黑人强伦姧人妻完整版 | 91九色丨porny丨丰满6 | 丁香婷婷综合激情五月色 | 唐人社导航福利精品 | 亚洲va欧美va人人爽春色影视 | 无套在线观看 | 丰满少妇夜夜爽爽高潮水网站 | 亚洲精品久久中文字幕 | 操极品少妇 | 尤物视频在线免费观看 | 日本国产在线观看 | 精品国产性色无码av网站 | 四虎最新网址在线观看 | 久久这里只有精品18 | 成人性生交免费大片2 | 国产精品激情av久久久青桔 | 亚洲视频黄色 | 麻豆黄色片 | 日韩区在线 | 日本无遮真人祼交视频 | 呦系列视频一区二区三区 | jzzijzzij亚洲成熟少妇 | 爱逼综合 | 污免费视频 | 久久久久久欧美 | 亚洲伊人精品酒店 | 国产精品视频在线观看免费 | 日韩一区欧美二区 | 日韩精品无码一区二区中文字幕 | 综合国产一区 | 日韩不卡一区二区 | 粉嫩粉嫩的虎白女18在线软件 | 欧美大浪妇猛交饥渴大叫 | 97在线观看视频免费 | 中文字幕在线观看免费视频 | 亚洲精品一区二区三区新线路 | 国产在视频线精品视频 | 91亚洲精华国产精华液 | 欧美激情猛片xxxⅹ大3 | 成人免费视屏 | 免费全黄无遮挡裸体毛片 | 伊人黄 | 久久澡 | 国产精品一二三四 | 色噜噜在线 | 一区二区三区91 | 经典一区二区 | 91日韩中文字幕 | 久久久久无码精品亚洲日韩 | aa成人免费视频 | 亚洲人成色777777精品音频 | 日本高清视频在线www色 | 国产欧美日韩在线观看 | 欧美成人精品一级乱黄 | 91色影院| 欧美亚洲激情 | 一本一道av无码中文字幕﹣百度 | 乌克兰极品少妇ⅴαdeo | 男女吻胸做爰摸下身 | 亚洲日韩乱码中文字幕 | 黄色三及 | 高潮av| 免费无码又爽又高潮视频 | 成人理伦片免费 | 中文字幕免费高清 | 国产精品久久夂夂精品香蕉爆 | 久久春色 | 久久天堂精品 | 日韩国产欧美一区 | 啪啪网视频 | 成人性做爰aaa片免费看不忠 | 一个人免费观看的www视频 | 亚洲久久影院 | 天天爱天天做天天大综合 | 女学生的大乳中文字幕 | 欧美成人精品 | xxxxx在线观看 | 男女国产视频 | 越南性受xxx精品 | 国产一精品一av一免费 | 国产精品vr专区 | 亚洲自偷精品视频自拍 | 亚洲高清视频一区二区 | 成人羞羞视频在线观看免费 | 欧美午夜性 | 国产精品对白刺激在线观看 | 亚洲成a人v欧美综合天堂麻豆 | 男主和女配啪慎入h闺蜜宋冉 | 黄色特级视频 | 亚洲精品乱码久久久久久中文字幕 | 男人天堂tv| 欧美在线观看不卡 | 精品久久久久久综合日本 | 国产又粗又黄又长又爽动漫 | 97超碰在线免费 | eeuss影院在线奇兵区145 | 日韩欧美精品在线观看 | 欧美综合自拍亚洲综合图 | 免费一二三区 | 波多野结衣家庭主妇 | 欧美日韩在线观看成人 | 女人抽搐喷水高潮国产精品 | 国产亚洲欧美一区二区三区 | 国产又粗又猛又爽又黄91 | 色综合久久久久综合一本到桃花网 | 亚洲国产精品视频一区 | 日本视频h | 91麻豆精品国产91久久久使用方法 | 国产福利一区二区 | 久久久久中文字幕亚洲精品 | 久草蜜桃 | 国产依人 | 欧美精品久久久久久久久久久 | 国产又粗又猛又爽又黄的 | 亚洲高清免费视频 | 国产乱肥老妇女精品视频网站 | 欧美高清成人 | 国产视频在 | 久草福利免费 | 亚洲自拍小视频 | 91成人精品国产刺激国语对白 | 日韩有码视频在线 | 久久久精品成人免费观看 | 天天爽夜夜爽夜夜爽精品 | 日本在线高清视频 | 女邻居丰满的奶水 | 欧美吻胸吃奶大尺度 | 一区二区三区精品在线 | 国产极品网站 | 亚洲黄色在线免费观看 | 国产欧美精品一区二区三区 | 男人猛吃奶女人爽视频 | 老妇做爰xxx视频一区二区三区 | 中文字幕精品一二三四五六七八 | 欧美精品一区二区视频在线观看 | 国产高潮久久久久久绿帽 | 日本成人一二三区 | 国产成人一区二区三区 | 黄色片一级 | 免费黄色片视频 | 国产成人免费爽爽爽视频 | 91免费网站入口 | 这里只有精品久久 | 成熟人妻av无码专区 | 久久久久久久久女人体 | 精品久久久久久亚洲综合网 | 国产精欧美一区二区三区久久久 | 午夜暗香一3视频丨vk | 91精品国产影片一区二区三区 | 日本免费在线播放 | 欧美69精品久久久久久不卡 | 日本精品黄色 | 少妇xxxxx性开放按摩 | 国产av无码专区亚洲a∨毛片 | 自拍偷自拍亚洲精品播放 | 亚洲日韩精品无码专区加勒比 | 欧美aaaaaaaaaa| 无码专区3d动漫精品免费 | 丰满熟女人妻一区二区三 | 精品成人一区二区 | 精品无码国产一区二区三区av | 性欧美另类 | 国产精品无码一区二区桃花视频 | 草草影院精品一区二区三区 | 精品国产18久久久久久二百 | 中国中文字幕伦av在线看片 | xxx偷拍撒尿xxxx | 理论片午午伦夜理片影院 | 国产精品太长太粗太大视频 | 免费观看的vr毛片 | 一区二区三区内射美女毛片 | av影视在线观看 | 四虎国产精品成人免费4hu | 亚洲一区二区播放 | 视频一区免费观看 | 中文毛片无遮挡高潮免费 | 刺激一区仑乱 | 亚洲日韩中文字幕天堂不卡 | 国产夫妻性生活视频 | 少妇精品一区二区三区在线观看 | 一级黄色大片视频 | 噜噜噜在线视频 | 黄色片网站免费观看 | 成人三级做爰av | 一级片免费视频 | 四虎影视在线影院在线观看免费视频 | 一级性生活免费视频 | 伊人精品久久久大香线蕉 | 五月婷婷一区二区三区 | 狠狠做深爱婷婷久久综合一区 | 青春草在线视频观看 | 美女张开腿黄网站免费 | 永久免费观看的毛片手机视频 | 99久久精品费精品国产一区二区 | 亚洲v欧美v国产v在线观看 | 日色网站| 18禁网站免费无遮挡无码中文 | 久久99国产精一区二区三区 | 日本一区二区三区在线播放 | 国产精品第9页 | a天堂资源 | 九九热视频精品 | 国产在线xx | 亚洲7天堂人人爽人人爽 | 2020久久香蕉国产线看观看 | 99日韩精品视频 | 欧美韩国日本 | 色婷婷基地 | 成人羞羞视频在线观看免费 | 精品国产av色一区二区深夜久久 | 少妇精品无码一区二区免费视频 | 日日夜夜草 | 成人午夜福利视频 | 久久国产毛片 | 18禁毛片无遮挡嫩草视频 | 熟女人妻一区二区三区免费看 | 国产夜色视频 | 日韩欧美理论 | 欧美韩国一区 | 成人手机在线免费视频 | 日韩午夜理论免费tv影院 | 欧美激情一区二区三区成人 | 国外成人在线视频网站 | 国产专区精品 | 少妇被躁爽到高潮无码久久 | 天堂网avav| 亚洲欧美视频在线播放 | 国产又爽又大又黄a片 | 久久亚洲国产成人精品性色 | 森泽佳奈作品在线观看 | 韩国日本三级在线观看 | av最新天| 亚洲一区免费 | 日本精品视频一区二区三区 | 日本少妇bbwbbw精品 | 能直接看的av | 国产69精品久久久久人妻刘玥 | 国产伦精品一区二区三区视频金莲 | 国产精品观看 | 免费无码一区二区三区a片 亚洲欧美日韩国产成人 | 成人香蕉网 | 激情五月综合色婷婷一区二区 | 欧美性受黑人性爽 | 日韩aa视频 | 成年人在线网站 | 2019亚洲天堂 | 亚洲国产午夜精品理论片在线播放 | 国产在线观看无码免费视频 | 亚洲4444| 精品久久久久久人妻无码中文字幕 | 啪一啪在线 | 成人免费观看视频 | 凉森玲梦一区二区三区av免费 | 性做久久久久久久 | 木下凛凛子中文字幕亚洲 | 91丨九色丨蝌蚪丰满 | 国产高清小视频 | 亚洲国产精品成人久久 | 亚洲网在线观看 | 男女性爽大片视频 | 巨肉超污巨黄h文小短文 | 亚洲字幕av一区二区三区四区 | 688欧美人禽杂交狂配 | 国产一区在线免费观看 | 91久久精品日日躁夜夜躁国产 | 欧美一区二区三区免费在线观看 | 久久超 | 亚洲欧洲在线观看 | 国产精品一二 | 这里只有精品在线播放 | www黄色大片 | 老妇肥熟凸凹丰满刺激小说 | 久久久久久久久久久丰满 | 亚洲国产精品视频一区 | 国产超碰人人爽人人做人人爱 | 偷拍一女多男做爰免费视频 | 手机av免费 | 好吊视频一区二区三区 | 少妇粉嫩小泬喷水视频 | 欧美成人秋霞久久aa片 | 男女草逼网站 | 性啪啪chinese东北女人 | 成人黄色在线免费观看 | 男人进入女人下部视频 | 精品婷婷色一区二区三区蜜桃 | 国产精品无码无在线观看 | 大地资源中文在线观看官网第二页 | 人妻av综合天堂一区 | 国产一级黄 | 成人黄色免费 | 亚洲欧美中文日韩在线v日本 | 特黄特色大片免费播放器图片 | 91在线视频| 日韩一级一区 | 强制中出し~大桥未久在线播放 | 朝鲜交性又色又爽又黄 | 精品一二三区久久aaa片 | 国产亚洲精品久久久网站好莱 | 91精品国产综合久久精品性色 | www人人草| 性大片1000免费看 | 国产老头和老太xxxxx视频 | 亚洲最新中文字幕在线 | 伊人久在线 | 97精产国品一二三 | 韩国av一区二区三区 | 亚洲大尺度专区 | 快播av在线 | 激情网站视频 | 久久久久久a亚洲欧洲av | 四虎影视av| 国产精品久久久天天影视 | 欧美性猛交xxxx乱大交蜜桃 | 国内精品人妻无码久久久影院 | 日韩综合一区二区三区 | 中文字幕一区二区三 | 亚洲综合无码久久精品综合 | 在线永久免费观看黄网站 | 激情五月五月婷婷 | 一级高清毛片 | 亚洲成av人片一区二区三区 | 亚洲精品久久久久久中文传媒 | 91精品国产高清一区二区三密臀 | 免费看黄色av | 亚洲啪av永久无码精品放毛片 | 国产999精品久久久久久 | 公妇乱淫1~6集全观看不了啦 | 欧美一级做一级爱a做片性 欧美一极片 | 国产欧美日韩 | 亚洲日本一区二区一本一道 | 国产无套粉嫩白浆内谢在a 国产无套粉嫩白浆内谢在线 | 亚洲精品乱码久久久久久蜜桃麻豆 | 毛片一区 | 国产肥臀一区二区福利视频 | 国产精品一二三四五区 | √天堂中文官网8在线 | 五月婷婷社区 | 一区二区三区回区在观看免费视频 | 国产91精清纯白嫩高中在线观看 | 精品伦精品一区二区三区视频 | 就要干就要操 | 国产黄色片在线观看 | 中文字幕日本人妻久久久免费 | 欧美日韩一区二区在线视频 | xxxx性xx另类ⅹ亚洲hd | 欧美日韩综合一区 | 国产亚洲欧美精品久久久久久 | 张津瑜警花国产精品一区 | 亚洲中文字幕无码中字 | 九九热只有精品 | 五月婷婷之综合缴情 | 狠狠爱五月婷婷 | 欧美a级黄 | 午夜福利1000集在线观看 | 日韩福利| 久久九九色 | 国产视频在线观看一区二区 | 99久久久无码国产精品免费 | 婷婷色中文字幕综合在线 | 成年人在线免费看 | 午夜精品久久久久久久男人的天堂 | 在线天堂资源www在线中文 | 欧美大尺度做爰啪啪免费 | 波多野结衣家庭主妇 | 免费一级做a爰片性视频 |