日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub

發布時間:2025/4/5 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GitHub項目地址:

https://github.com/Skymqq/LitePalSave.git

?

LitePal是一款開源的Android數據庫框架,它采用了對象關系映射(ORM)映射的模式,并將我們平時開發最常用到的一些數據庫進行了封裝,使得不用編寫一行SQL語句就可以完成各種建表和增刪改查的操作。

首先新建一個LitePalSave項目。

配置LitePal

Android中配置開源庫的方法有很多種,第一種(也是優先推薦的方法)聲明開源庫的依賴的引用,第二種就是去開源庫的官網下載不同版本的jar包,然后再手動copy到項目的lib文件夾中,再add到本地。這里我們就直接使用第一種添加開源庫依賴的引用的方式來一鍵導入開源庫。

在app/build.gradle文件的dependencies閉包中添加如下內容:

//配置LitePalimplementation 'org.litepal.android:core:1.4.1'

添加的這一行聲明中,前面部分是固定的,最后的1.4.1是版本號的意思,最新的版本號可以到LitePal的項目主頁上去查看。

這樣我們就把LitePal成功引入到當前項目中了,接下來需要配置litepal.xml文件。右擊app/src/main 目錄 New? Directory,創建一個assets目錄,然后在assets目錄下再新建一個litepal.xml文件,代碼如下:

<?xml version="1.0" encoding="utf-8"?> <litepal><!--數據庫名--><dbname value="BookStore" /><!--數據庫版本--><version value="1" /><!--映射模型列表--><list></list></litepal>

最后還需要在AndroidManifest.xml中的<application>標簽中添加一行代碼:

android:name="org.litepal.LitePalApplication"

這里我們將項目的application配置為org.litepal.LitePalApplication,這樣才能讓LitePal的所有功能都可以工作。


創建和升級數據庫

我們之前創建數據庫時通過自定義一個類繼承自SQLiteDatabase,然后在onCreate()方法中編寫建表語句來實現的,而采用對象關系映射(ORM)模式的LitePal就很容易實現了。 那么什么是對象關系映射(ORM)呢?簡單的來說,我們使用的編程語言是面向對象語言,而使用的數據庫則是關系型數據庫,那么將面向對象的語言和面向關系的數據庫之間建立一種映射關系,這就是對象關系映射。它賦予了我們一個強大的功能,就是可以用面向對象的思維來操作數據庫,而不用再去使用SQL語句了。

之前為了創建一張Book表,需要先分析表中應該包含哪些列,然后再編寫出一條建表語句,最后在自定義的SQLiteOpenHelper中去執行這條建表語句。但是使用LitePal,你就可以用面向對象的思維來實現同樣的功能了,定義一個Book實體類,代碼如下所示:

package com.example.administrator.litepalsave;public class Book {private int id;private String author;private double price;private int pages;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

這是一個典型的JavaBean,在Book類中我們定義了id、author、price、pages、name這幾個字段,并生成了相應的getter和setter方法。Book類中聲明的成員變量分別對應了表中的每一個列,這就是對象關系映射(ORM)最直觀的體驗。

接下來我們需要將Book類添加到映射模型列表中,修改litepal.xml中的代碼,如下所示:

<?xml version="1.0" encoding="utf-8"?> <litepal><!--數據庫名--><dbname value="BookStore" /><!--數據庫版本--><version value="1" /><!--映射模型列表--><list><mapping class="com.example.administrator.litepalsave.Book"/></list></litepal>

這里使用<mapping>標簽來聲明我們要配置的映射模型類。注意一定要使用完整的類名。不管有多少模型類需要映射,都使用同樣的方式配置<list>標簽下即可。

最后,activity.xml代碼:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_create"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Create Database"android:textAllCaps="false"android:textSize="18sp"android:textStyle="bold" /><Buttonandroid:id="@+id/btn_add"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Add Data"android:textAllCaps="false"android:textSize="18sp"android:textStyle="bold" /><Buttonandroid:id="@+id/btn_update"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Update Data"android:textAllCaps="false"android:textSize="18sp"android:textStyle="bold" /><Buttonandroid:id="@+id/btn_delete"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Delete Data"android:textAllCaps="false"android:textSize="18sp"android:textStyle="bold" /><Buttonandroid:id="@+id/btn_query"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Query Data"android:textAllCaps="false"android:textSize="18sp"android:textStyle="bold" /> </LinearLayout>

MainActivity.java代碼:

package com.example.administrator.litepalsave;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;import org.litepal.LitePal;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_create, btn_add, btn_delete, btn_update, btn_query;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn_create = (Button) findViewById(R.id.btn_create);btn_add = (Button) findViewById(R.id.btn_add);btn_delete = (Button) findViewById(R.id.btn_delete);btn_update = (Button) findViewById(R.id.btn_update);btn_query = (Button) findViewById(R.id.btn_query);btn_create.setOnClickListener(this);btn_add.setOnClickListener(this);btn_delete.setOnClickListener(this);btn_update.setOnClickListener(this);btn_query.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create:createDatabase();//創建數據庫Toast.makeText(this, "Create Database successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_add:break;case R.id.btn_delete:break;case R.id.btn_update:break;case R.id.btn_query:break;}}private void createDatabase() {LitePal.getDatabase();//通過assets中的litepal.xml文件中的信息,創建BookStore數據庫,并根據對象映射列表中的信息創建Book表}}

運行程序,點擊Create Database按鈕之后,Toast提示創建數據庫和數據庫表成功:

為了驗證創建成功,我們使用adb shell 來查看具體情況:

好了,使用LitePal創建BookStore數據庫和創建Book表就完成了,

sqlite3 數據庫名? ?用來查看數據庫

.table命令? 用來查看數據庫表

.schema? 用來查看建表語句

可以看到,這里有3張表的建表語句,其中android_metadata表不用管,table_schema表是LitePal內部使用的。我們也可以直接忽視,book表就是根據我們自定義的Book類以及類中的成員變量來自動生成的。

之前在我們使用SQLiteOpenHelper來升級數據之前,必須得先把之前的表drop掉,然后再重新創建才行。這其實是一個非常嚴重的一個問題,因為這樣子會造成數據的丟失,每當升級一次數據庫,之前表中的數據就全部沒有了。

當然如果你是一個非常有經驗的程序員,也可以通過復雜的邏輯控制來避免這種情況,但是維護成本很高。而使用LitePal,這就不是什么問題了,操作也很簡單,只需要在修改內容之后,將版本號加1就行了。

比如說我們想要向Book表中添加一個press(出版社)列,直接修改Book類中代碼,添加一個press字段即可,如下所示:

private String press;public String getPress() {return press;}public void setPress(String press) {this.press = press;}

與此同時,我們還想再添加一張Category表,那么只需要新建一個Category類就可以了,代碼如下所示:

package com.example.administrator.litepalsave;public class Category {private int id;private String categoryName;private int categoryCode;public void setId(int id) {this.id = id;}public void setCategoryName(String categoryName) {this.categoryName = categoryName;}public void setCategoryCode(int categoryCode) {this.categoryCode = categoryCode;} }

改完了所有我們想改的東西,只需要記得將版本號加1就行了。當然由于這里還需要添加一個新的模型類,因此也需要將它添加到映射模型列表中。修改assets中的litepal.xml代碼:

<?xml version="1.0" encoding="utf-8"?> <litepal><!--數據庫名--><dbname value="BookStore" /><!--數據庫版本--><version value="2" /><!--映射模型列表--><list><mapping class="com.example.administrator.litepalsave.Book"/><mapping class="com.example.administrator.litepalsave.Category"/></list></litepal>

重新運行一次程序,然后點擊Create Database按鈕,再重新查看一下最新的建表語句,發現如下所示:

可以看到,book表中新增了一個press列,category表也創建成功了,當然LitePal還自動幫我們做了一項非常重要的工作,就是保留之前表中的所有數據,這樣也就再也不用擔心數據丟失的隱患了。


使用LitePal添加數據

首先回顧一下之前添加數據的方法,我們需要創建出一個ContentValues對象,然后將所有要添加的數據put到這個ContentValues對象當中,然后再調用SQLiteDatabase的insert()方法將數據添加到數據庫表中。

而使用LitePal來添加數據,只需要創建出模型類的實例,再將所有要存儲的數據設置好,最后調用一下save()方法就可以了。

下面手動來實現一下,觀察現有的模型類,你會發現他們都是沒有繼承結構的。沒錯,因為進行表管理操作時不需要模型類有任何的繼承結構,但是進行CRUD操作時就不行了,必須要繼承自DataSupport類才行,因此這里我們需要先把繼承結構給加上,修改Book類中代碼,如下所示:

package com.example.administrator.litepalsave;import org.litepal.crud.DataSupport;public class Book extends DataSupport {private int id;private String author;private double price;private int pages;private String name;private String press;public String getPress() {return press;}public void setPress(String press) {this.press = press;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

只修改了extends? DataSupport這一句

?

MainActivity.java代碼:

package com.example.administrator.litepalsave;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;import org.litepal.LitePal;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_create, btn_add, btn_delete, btn_update, btn_query;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn_create = (Button) findViewById(R.id.btn_create);btn_add = (Button) findViewById(R.id.btn_add);btn_delete = (Button) findViewById(R.id.btn_delete);btn_update = (Button) findViewById(R.id.btn_update);btn_query = (Button) findViewById(R.id.btn_query);btn_create.setOnClickListener(this);btn_add.setOnClickListener(this);btn_delete.setOnClickListener(this);btn_update.setOnClickListener(this);btn_query.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create:createDatabase();//創建數據庫Toast.makeText(this, "Create Database successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_add:addData();//添加數據Toast.makeText(this, "Add Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_delete:break;case R.id.btn_update:break;case R.id.btn_query:break;}}private void createDatabase() {LitePal.getDatabase();//通過assets中的litepal.xml文件中的信息,創建BookStore數據庫,并根據對象映射列表中的信息創建Book表}private void addData() {Book book = new Book();//創建Book實例book.setName("The Da Vinci Code");//設置書名book.setAuthor("Dan Brown");//設置作者book.setPages(454);//設置頁數book.setPrice(16.96);//設置價格book.setPress("Unknow");//設置出版社book.save();//保存數據} }

重新運行程序,點擊Add Data按鈕,Toast提示數據添加成功:

adb shell 查看Book表中的數據,輸入SQL語句:select *from Book;

或者;也可以在Device File Explorer中到/data/data/com.example.administrator.litepalsave/databases/路徑下找到BookStore.db文件,將這個文件保存到桌面,然后通過數據庫管理工具查看即可。


使用LitePal更新數據

學習完了如何使用LitePal添加數據,接下來我們看看怎樣使用LitePal更新數據。更新數據要比添加數據稍微復雜一點,因為它的API接口比較多,這里我們只介紹最常用的幾種更新方式。首先,最簡單的一種更新方式就是對一存儲的對象重新設值,然后重新調用save()方法即可。那么這里我們就要了解一個概念,什么是已存儲的對象?

對于LitePal來說,對象是否已存儲就是根據調用model.isSaved()方法的結果來判斷的,返回true就表示已存儲,返回false就表示未存儲。那么接下來的問題就是,什么情況下會返回true,什么情況下會返回false呢?

實際上只有在兩種情況下model.isSaved()方法才會返回true,一種情況是已經調用過model.save()方法去添加數據了,此時model會被認為是已存儲的對象。另一種情況是model對象是通過LitePal提供的查詢API查出來的,由于是從數據庫中查到的對象,因此也會被認為是已存儲的對象。

這里我們通過第一種情況來進行驗證。修改MainActivity.java代碼:

package com.example.administrator.litepalsave;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;import org.litepal.LitePal;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_create, btn_add, btn_delete, btn_update, btn_query;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn_create = (Button) findViewById(R.id.btn_create);btn_add = (Button) findViewById(R.id.btn_add);btn_delete = (Button) findViewById(R.id.btn_delete);btn_update = (Button) findViewById(R.id.btn_update);btn_query = (Button) findViewById(R.id.btn_query);btn_create.setOnClickListener(this);btn_add.setOnClickListener(this);btn_delete.setOnClickListener(this);btn_update.setOnClickListener(this);btn_query.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create:createDatabase();//創建數據庫Toast.makeText(this, "Create Database successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_add:addData();//添加數據Toast.makeText(this, "Add Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_delete:break;case R.id.btn_update:updateData();//更新數據Toast.makeText(this, "Update Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_query:break;}}private void createDatabase() {LitePal.getDatabase();//通過assets中的litepal.xml文件中的信息,創建BookStore數據庫,并根據對象映射列表中的信息創建Book表}private void addData() {Book book = new Book();//創建Book實例book.setName("The Da Vinci Code");//設置書名book.setAuthor("Dan Brown");//設置作者book.setPages(454);//設置頁數book.setPrice(16.96);//設置價格book.setPress("Unknow");//設置出版社book.save();//保存數據}private void updateData() {Book book = new Book();//創建Book實例book.setPrice(14.95);//設置價格book.setPress("Anchor");//設置出版社book.updateAll("name=? and author=?", "The Da Vinci Code", "Dan Brown");} }

點擊Update Data按鈕,Toast提示成功更新數據:

使用adb shell查看更新后的數據情況

更新前Book表中的數據:

更新后Book表中的數據:

?

意料之中,書名為"The Da Vinci Code",作者為"Dan Brown"的這本書的價格由16.96修改成14.95.怎么樣?LitePal的更新API是不是明顯比SQLiteDatabase的update()方法要好用多了?

不過,在使用updateAll()方法時,還有一個非常重要的知識點是你需要知曉的,就是當你想把一個字段的值更新成默認時,是不可以使用上面的方式來set數據的。我們都知道,在Java中任何一種數據類型的字段都會有默認值,例如int類型的默認值為0,boolean類型的默認值是false,String類型的默認值為null。那么當new出一個Book對象時,其實所有字段都已經被初始化成默認值了,比如說pages字段的值就是0,。因此,如果我們想把數據庫表中的pages列更新成0,直接調用book.setPages(0)是不可以的,因為即使不調用這行代碼,pages字段本身也是0,LitePal此時是不會對這個列進行更新的。對于所有想要將為數據更新成默認值的操作,LitePal統一提供了一個setDefault()方法,然后傳入相應的列名就可以實現了。比如我們可以這樣寫:

Book?book=new Book();book.setToDefault("pages");book.updateAll();

這段代碼的意思是,將所有的頁數都更新為0,因此updateAll()方法中沒有指定約束條件,因此更新操作對所有數據都生效了。


使用LitePal刪除數據

使用LitePal刪除數據的方式主要有兩種,第一種比較簡單,就是直接調用已存儲對象的delete()方法就可以了,第二種就是直接通過DataSupport類調用deleteAll()靜態方法來刪除數據:

例如我們將Book表中pages<500頁的書給刪除就可以這樣子寫:

DataSupport.deleteAll(Book.class, "pages < ?", "500");

MainActivity.java代碼:

package com.example.administrator.litepalsave;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;import org.litepal.LitePal; import org.litepal.crud.DataSupport;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_create, btn_add, btn_delete, btn_update, btn_query;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn_create = (Button) findViewById(R.id.btn_create);btn_add = (Button) findViewById(R.id.btn_add);btn_delete = (Button) findViewById(R.id.btn_delete);btn_update = (Button) findViewById(R.id.btn_update);btn_query = (Button) findViewById(R.id.btn_query);btn_create.setOnClickListener(this);btn_add.setOnClickListener(this);btn_delete.setOnClickListener(this);btn_update.setOnClickListener(this);btn_query.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create:createDatabase();//創建數據庫Toast.makeText(this, "Create Database successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_add:addData();//添加數據Toast.makeText(this, "Add Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_delete:deleteData();//刪除數據Toast.makeText(this, "Delete Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_update:updateData();//更新數據Toast.makeText(this, "Update Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_query:break;}}private void createDatabase() {LitePal.getDatabase();//通過assets中的litepal.xml文件中的信息,創建BookStore數據庫,并根據對象映射列表中的信息創建Book表}private void addData() {Book book = new Book();//創建Book實例book.setName("The Da Vinci Code");//設置書名book.setAuthor("Dan Brown");//設置作者book.setPages(454);//設置頁數book.setPrice(16.96);//設置價格book.setPress("Unknow");//設置出版社book.save();//保存數據}private void updateData() {Book book = new Book();//創建Book實例book.setPrice(14.95);//設置價格book.setPress("Anchor");//設置出版社book.updateAll("name=? and author=?", "The Da Vinci Code", "Dan Brown");}private void deleteData() {DataSupport.deleteAll(Book.class, "pages < ?", "500");}}

點擊Delete Data按鈕,Toast提示刪除數據成功:

adb shell查看

刪除前Book表中的數據:

刪除后Book表中的數據:

可以看到,我們將Book表中pages<500頁的書給刪除了。


使用LitePal查詢數據

之前的查詢數據我們都是通過SQLiteDatabase中的query()方法來查詢數據的,冗長的參數列表讓人看得頭疼,即使多數參數都用不到,也不得不傳入null,如下所示:

Cursor cursor=db.query("Book",null,null,null,null,null,null);

像這樣的代碼恐怕是沒人會喜歡的。為此LitePal在查詢API方面做出了非常多的優化,基本上可以滿足絕大多數場景的查詢需求,并且代碼十分整潔,下面我們就來一起學習一下。

首先分析一下上述代碼,query()方法中使用了第一個參數指明了查詢哪張表中的數據,后面的參數全部為null,這就表示希望查詢這張表中的所有數據。那么使用LitePal如何完成同樣的功能呢?非常簡單,只需要這樣寫:

List<Book> books=DataSupport.findAll(Book.class);

怎么樣,代碼是不是精簡了許多,沒有冗長的參數列表,只需要調用DataSupport類中的findAll()靜態方法,然后通過Book.class參數指定查詢Book表就可以。另外,findAll()方法的返回值是一個Book類型的List集合,也就是說,我們不用像之前那樣再通過Cursor對象一行行去取值,再放入集合中。LitePal已經幫我們完成了賦值操作。

下面通過一個完整的例子來實踐一下吧,修改MainActivity.java中的代碼:

package com.example.administrator.litepalsave;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast;import org.litepal.LitePal; import org.litepal.crud.DataSupport;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private static final String TAG = "MainActivity";private Button btn_create, btn_add, btn_delete, btn_update, btn_query;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn_create = (Button) findViewById(R.id.btn_create);btn_add = (Button) findViewById(R.id.btn_add);btn_delete = (Button) findViewById(R.id.btn_delete);btn_update = (Button) findViewById(R.id.btn_update);btn_query = (Button) findViewById(R.id.btn_query);btn_create.setOnClickListener(this);btn_add.setOnClickListener(this);btn_delete.setOnClickListener(this);btn_update.setOnClickListener(this);btn_query.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create:createDatabase();//創建數據庫Toast.makeText(this, "Create Database successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_add:addData();//添加數據Toast.makeText(this, "Add Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_delete:deleteData();//刪除數據Toast.makeText(this, "Delete Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_update:updateData();//更新數據Toast.makeText(this, "Update Data successfully", Toast.LENGTH_SHORT).show();break;case R.id.btn_query:queryData();//查詢數據Toast.makeText(this, "Query Data successfully", Toast.LENGTH_SHORT).show();break;}}private void createDatabase() {LitePal.getDatabase();//通過assets中的litepal.xml文件中的信息,創建BookStore數據庫,并根據對象映射列表中的信息創建Book表}private void addData() {Book book = new Book();//創建Book實例book.setName("The Da Vinci Code");//設置書名book.setAuthor("Dan Brown");//設置作者book.setPages(454);//設置頁數book.setPrice(16.96);//設置價格book.setPress("Unknow");//設置出版社book.save();//保存數據}private void updateData() {Book book = new Book();//創建Book實例book.setPrice(14.95);//設置價格book.setPress("Anchor");//設置出版社book.updateAll("name=? and author=?", "The Da Vinci Code", "Dan Brown");}private void deleteData() {DataSupport.deleteAll(Book.class, "pages < ?", "500");}private void queryData() {List<Book> books = DataSupport.findAll(Book.class);//獲取Book表中數據,并且放入一個List集合//增強for遍歷集合數據,并且打印for (Book book : books) {Log.e(TAG, "book name is " + book.getName());Log.e(TAG, "book author is " + book.getAuthor());Log.e(TAG, "book pages is " + book.getPages());Log.e(TAG, "book price is" + book.getPrice());Log.e(TAG, "book press is " + book.getPress());}}}

運行程序之后先點擊一下Add Data按鈕,因為我們剛剛把數據給刪除了,所以這里先添加數據,然后再點擊Query Data按鈕來查詢數據。

因Book表中只有一條數據,所以我們只能查出這一條,如果有很多條其實都可以查出來的。

除了findAll()方法之外,LitePal還提供了很多其他非常有用的查詢API。

比如我們想要查詢Book表中的第一條數據就可以這樣子寫:

Book firstBook=DataSupport.findFirst(Book.class);

查詢Book表中的最后一條數據就可以這樣寫:

Book lastBook=DataSupport.findLast(Book.class);

我們還可以通過連綴查詢來定制更多的查詢功能。

select()方法用于指定查詢哪幾列的數據,對應了SQL當中的select關鍵字。比如只查name和author這兩列的數據,就可以這樣子寫:

List<Book> books=DataSupport.select("name","author").find(Book.class);

where()方法用于指定查詢的約束條件,對應了SQL當中的where關鍵字。比如只查頁數大于400的數據,就可以這樣子寫:

List<Book> books=DataSupport.where("pages > ?","400").find(Book.class);

order()方法用于指定結果的排序方式,對應了SQL當中的order by關鍵字。比如將查詢結果按照書價從高到低排序,就可以這樣子寫:

List<Book> books=DataSupport.order("price desc").find(Book.class);

其中desc表示降序排列,asc或者不寫表示升序排列。

limit()方法用于指定查詢結果的數量,比如只查表中的前3條數據,就可以這樣子寫:

List<Book> books=DataSupport.limit(3).find(Book.class);

offset()方法用于指定查詢結果的偏移量,比如查詢表中的第2條、第3條、第4條數據,就可以這樣寫:

List<Book> books=DataSupport.limit(3).offset(1).find(Book.class);

由于limit(3)查詢到的是前3條數據,這里我們再加上offset(1)進行一個位置的偏移,就能實現查詢第2條、第3條、第4條的功能了。limit()和offset()方法共同對應了SQL當中的limit關鍵字。

當然,你還可以對這5個方法進行任意的連綴組合,來完成一個比較復雜的查詢操作:

List<Book> books=DataSupport.select("name","author","pages")

.where("pages > ?","400")

.order("pages")

.limit(10)

.offset(10)

.find(Book.class);

?

?

總結

以上是生活随笔為你收集整理的使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久黄网站| 黄色资源网站 | 丁香花在线观看视频在线 | 免费视频 三区 | 欧洲精品码一区二区三区免费看 | 日韩欧美aaa | 亚洲自拍偷拍色图 | 色的网站在线观看 | 黄色成人影视 | 亚洲国产视频在线 | 中文字幕在线观看第一页 | 国产小视频国产精品 | 国产999精品久久久影片官网 | 久久这里只有精品1 | 国产精品理论片在线播放 | 91精品国产91久久久久久三级 | 中文字幕免费在线看 | 一级成人网| 久久精品久久久久 | 91成人小视频 | 男女全黄一级一级高潮免费看 | 91精选 | 久久草草热国产精品直播 | 亚洲精区二区三区四区麻豆 | 欧美亚洲另类在线视频 | 久久99精品久久只有精品 | 九九九在线观看视频 | 99精品亚洲| 最近中文字幕免费观看 | 日韩高清在线一区二区 | 在线 你懂 | 久草网在线 | 欧美日韩视频免费看 | 亚洲国产精品久久久 | 亚洲日本va在线观看 | 欧洲一区二区在线观看 | 亚洲高清激情 | 精品理论片 | 成人av影院在线观看 | 国产精品毛片久久久久久 | 中文字幕亚洲欧美日韩2019 | 国产视频欧美视频 | 亚洲精品中文字幕在线 | 97精品国产 | 日本中文字幕在线看 | 五月天伊人网 | 蜜桃av综合网| 婷五月激情 | 成人免费视频观看 | 热久在线 | 在线视频一区二区 | 亚洲成人麻豆 | 亚洲激情影院 | 国产精品综合久久久久 | 精品视频123区在线观看 | 久久国产a | 欧美成人在线免费 | 国产精品都在这里 | 黄网站a | 91成人免费电影 | av中文字幕在线播放 | 8x成人免费视频 | 欧美一区二区三区在线看 | 亚洲综合在线五月 | www.天天成人国产电影 | 99精品免费久久久久久久久日本 | 97超碰人人爱 | 国内精品久久久久久久久久久久 | 97超碰在线久草超碰在线观看 | 国产欧美精品一区二区三区四区 | 国产夫妻av在线 | 日韩免费观看视频 | 激情婷婷在线 | 日韩中文久久 | 最近中文字幕国语免费av | 九热精品 | 国产精品原创av片国产免费 | 午夜影视一区 | 超碰97人人干 | 亚洲成年人免费网站 | 日日久视频 | 亚洲天天看| 在线观看日韩免费视频 | 在线电影 一区 | 国产午夜麻豆影院在线观看 | 国产一区二区不卡在线 | 中文字幕日本在线 | 中文免费在线观看 | 免费在线中文字幕 | 亚洲国产69 | 亚洲精品乱码久久久久久蜜桃不爽 | av中文天堂 | 国产乱对白刺激视频不卡 | 国产日韩欧美在线播放 | 丁香五月缴情综合网 | 日韩在线一区二区免费 | 日本系列中文字幕 | 免费看搞黄视频网站 | 久久夜夜爽 | 国产中文| 中文成人字幕 | 99久久99久久精品国产片 | 精品 激情 | 国产中文伊人 | 日韩在线视频不卡 | 亚洲一级免费观看 | 伊人五月天av| 人人干网| 在线观看黄色大片 | 中文字幕在线播出 | 91精品视频免费看 | 亚洲精品国产精品乱码在线观看 | 狠狠操综合网 | 久久成人久久 | 黄色av一区 | www黄| 久久久久草 | 成片免费 | 国产精品久久久久久爽爽爽 | 在线视频中文字幕一区 | 国产高清在线精品 | 成人免费 在线播放 | 国产一区二区中文字幕 | 天天操夜夜叫 | 国产高清视频色在线www | 亚洲自拍偷拍色图 | 激情 一区二区 | 婷婷夜夜| 国产福利中文字幕 | 国产黄色av网站 | 亚洲精品大全 | 日韩av免费在线电影 | 在线 高清 中文字幕 | 亚洲黄色在线观看 | 免费高清无人区完整版 | 婷婷九月激情 | 国产99久久精品 | 9797在线看片亚洲精品 | 97视频在线免费观看 | 最新日韩电影 | 中文资源在线官网 | 超碰97.com | 国产一级黄色免费看 | 午夜精品一区二区三区在线观看 | 黄色精品久久久 | 国产色爽 | 麻豆久久一区 | 狠狠干 狠狠操 | h网站免费在线观看 | 高清有码中文字幕 | 在线播放 日韩专区 | 日韩免费在线网站 | 亚洲视频在线免费观看 | 8x8x在线观看视频 | 91aaa在线观看 | 色视频在线免费观看 | 成人黄色小说在线观看 | 久久黄色网页 | 97在线视频网站 | 国产三级视频在线 | 日韩欧美一区二区在线 | 精品国产理论 | 久草在线视频免费资源观看 | 最近中文字幕在线中文高清版 | 日韩大片免费观看 | 国产精品24小时在线观看 | 免费h视频 | 精品在线观看一区二区三区 | 深爱五月网 | 免费中文字幕 | 久草在线播放视频 | 日韩在线观| 精品美女在线视频 | 国产精品久久久久久久久久久久 | 色综合www | 六月丁香色婷婷 | 激情五月亚洲 | 在线观看视频你懂的 | 欧美99精品 | 狠狠操导航 | 91精品国产三级a在线观看 | 爱干视频 | 99久久这里有精品 | 在线观看av麻豆 | 亚洲综合色播 | 国产一区二区中文字幕 | 亚洲经典在线 | 欧美一级特黄高清视频 | 欧美久草视频 | 婷婷精品 | 免费在线观看av的网站 | 在线播放视频一区 | 不卡的一区二区三区 | 亚洲 欧洲av | 菠萝菠萝蜜在线播放 | 国产精品乱码久久 | 丁香六月激情 | 免费日韩一区二区三区 | 伊人激情网 | 超碰免费av | 亚洲高清视频在线观看免费 | 亚洲在线精品视频 | 国产 日韩 欧美 在线 | av中文字幕在线看 | 免费情缘| 在线精品观看国产 | 99精品视频在线观看视频 | 日韩欧美国产免费播放 | 亚洲精品理论片 | 久久久久黄色 | 国产高清在线永久 | 欧美一区二区三区在线看 | 青春草视频在线播放 | 久久一视频 | 日韩高清网站 | a视频在线 | 国产精品原创在线 | 热久久视久久精品18亚洲精品 | 精品高清视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 99国产视频在线 | 亚洲精品国产精品乱码在线观看 | 狠狠激情中文字幕 | 久久免费视频8 | 色综合久久88色综合天天人守婷 | 国产成人a v电影 | 亚洲视频在线免费看 | 久久国产精品色av免费看 | 国产涩图| 69av视频在线观看 | 国产成人一级电影 | 久久精品女人毛片国产 | 亚洲欧美日韩在线一区二区 | 亚洲专区在线视频 | 亚洲第一成网站 | 国产精品自产拍在线观看 | 91人人网| www.com黄| 亚洲精选国产 | 婷婷在线看 | 伊人狠狠干 | 91福利在线导航 | 娇妻呻吟一区二区三区 | 久久一区二区三区四区 | 久久免费片 | 国产在线不卡精品 | 欧美日韩在线免费观看 | 国产精品v a免费视频 | 日韩剧情 | 精品国产乱码久久久久久1区二区 | 91视频-88av| 色偷偷网站视频 | 麻豆久久精品 | 三级黄色在线观看 | 免费aa大片 | 亚洲国产精品日韩 | 色欧美成人精品a∨在线观看 | 99热在线观看免费 | 成人久久毛片 | 在线观看中文字幕一区二区 | 波多野结衣在线视频免费观看 | 精品在线观看一区二区 | 毛片一级免费一级 | 日本韩国欧美在线观看 | 99久久激情 | 国产又粗又硬又长又爽的视频 | 成人av资源在线 | 国产精品入口麻豆 | 久久久观看 | 天天综合色网 | 国产一区二区在线播放视频 | 日韩字幕在线 | 精品96久久久久久中文字幕无 | 中文字幕色在线视频 | 91精品爽啪蜜夜国产在线播放 | 国产成人性色生活片 | 国产尤物一区二区三区 | 91色偷偷 | av超碰在线观看 | 91在线影院 | 97香蕉视频 | 特级大胆西西4444www | a级国产乱理伦片在线观看 亚洲3级 | 亚州国产精品 | 欧美激情第八页 | 中文字幕国产一区二区 | 欧美激情第28页 | 国产精品黄色影片导航在线观看 | 国产成人久久精品77777 | 91在线产啪| 成人午夜精品 | 伊人永久 | 久久久久 | 色噜噜色噜噜 | 四虎影视成人永久免费观看亚洲欧美 | 天堂黄色片 | 中文字幕av全部资源www中文字幕在线观看 | 亚洲精品88欧美一区二区 | 在线电影91 | 国产精品二区三区 | av一级网站| 天天射网站 | www成人av | 97香蕉久久国产在线观看 | www.狠狠操.com | 亚洲伊人色 | 精品一区二区在线播放 | 美女一区网站 | 视频一区视频二区在线观看 | 日韩欧美视频 | 国内外成人免费在线视频 | 综合国产在线观看 | 人人玩人人爽 | 国产精品久久电影网 | 在线导航av | 日韩视频一区二区在线观看 | 国产亚洲激情视频在线 | 国产91成人 | 五月综合色婷婷 | 黄免费在线观看 | 日产乱码一二三区别在线 | 午夜体验区 | 九九视频免费观看视频精品 | 欧美一级乱黄 | 色黄久久久久久 | 中文字幕亚洲欧美日韩2019 | 波多野结衣理论片 | 99这里精品 | 深夜福利视频一区二区 | 一区二区不卡 | 91男人影院 | www.黄色片.com | 三级小视频在线观看 | 偷拍福利视频一区二区三区 | 亚洲综合小说 | 香蕉视频在线免费看 | 黄色在线观看www | 在线精品视频在线观看高清 | 91在线操| 色婷婷www | 免费久久99精品国产婷婷六月 | 精品国产a | 国产91精品在线播放 | 国产我不卡 | 欧美a√在线 | 久久在线播放 | 久久久精品免费观看 | 亚洲精品午夜国产va久久成人 | 欧美日韩中文字幕视频 | 久久国产手机看片 | 在线观看的a站 | 国产亚洲精品xxoo | 免费欧美精品 | 欧美午夜视频在线 | 97精品国产97久久久久久粉红 | 国产精品国产三级在线专区 | 欧美日韩中文视频 | 国产精品资源在线观看 | 涩涩成人在线 | 久久国产免费视频 | 亚洲va欧洲va国产va不卡 | 中文av在线免费观看 | 久久国内视频 | 在线一二三区 | 欧美va天堂在线电影 | 五月天婷亚洲天综合网精品偷 | 亚洲成人午夜av | av免费福利 | 国产精品美女免费 | av线上免费观看 | 久久黄色片子 | 亚a在线| 成人动漫精品一区二区 | 9幺看片 | 在线精品视频免费播放 | 国产精品久久久久亚洲影视 | 久久综合之合合综合久久 | 婷婷色在线 | 国产成人免费av电影 | 久久99热精品| 婷婷在线五月 | 五月天伊人网 | 三级性生活视频 | 日韩av电影一区 | 黄色成人影院 | 亚洲另类人人澡 | 日韩在线不卡 | 久久九九影院 | 国精产品999国精产品视频 | 国产精品 中文在线 | 黄色片免费在线 | 国产亚洲精品久久久久久 | 91视频在线免费下载 | 国产精品美女久久久免费 | 国产高清精品在线观看 | 国产高清专区 | 中文在线字幕免 | 中文在线www| 国语自产偷拍精品视频偷 | 黄色com | 99久久精品国产一区二区成人 | 久久久香蕉视频 | 亚洲国产精品电影在线观看 | 欧美网址在线观看 | 色中射 | 欧美va天堂va视频va在线 | 久久综合成人 | 亚洲精品免费在线观看视频 | 黄色免费观看网址 | 91精品一区二区在线观看 | 国内丰满少妇猛烈精品播 | 国产精品一区电影 | 久久久网页 | 天天色天天射综合网 | 久久国产香蕉视频 | 亚洲婷婷综合色高清在线 | 日日爱999 | 日韩免费在线观看 | 久久综合久色欧美综合狠狠 | 日韩在线观看电影 | 国产精品成人av久久 | 91免费在线看片 | 国产精品在线看 | 亚洲视频在线播放 | 视频成人永久免费视频 | 97视频一区 | 免费亚洲视频在线观看 | 久久人人爽爽 | 麻豆精品视频 | 中文字幕成人网 | 中文字幕字幕中文 | 久人人 | 日韩在线视频线视频免费网站 | 九九免费精品视频 | 精品国产一区二区三区久久影院 | 永久中文字幕 | 日韩精品中文字幕一区二区 | 狠狠色香婷婷久久亚洲精品 | 97精品视频在线播放 | 最近中文字幕免费av | 国产美女久久 | 成年人免费看的视频 | 三级黄色免费片 | 日韩精品91偷拍在线观看 | 欧美大荫蒂xxx | 久久综合九色 | 日韩精品中文字幕在线观看 | 精品国模一区二区 | 日韩色视频在线观看 | 国产在线色视频 | 日韩av一区二区三区在线观看 | 久久久久在线观看 | 黄色特级一级片 | 色综合天天做天天爱 | 美女免费黄网站 | 黄色片视频在线观看 | 色大片免费看 | 亚洲乱码在线 | 2019中文字幕网站 | 国产亚洲综合性久久久影院 | 欧美日韩中文另类 | 91久久精品日日躁夜夜躁国产 | 99免费在线观看视频 | 国产一区在线免费观看视频 | 国产一级精品在线观看 | 麻豆果冻剧传媒在线播放 | 国产无区一区二区三麻豆 | 久久99精品久久久久久秒播蜜臀 | 最新一区二区三区 | 成人免费色 | 亚洲一级片在线观看 | 亚洲精品色婷婷 | 国产精品久久影院 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国内精品久久久久久久97牛牛 | 久久深夜福利免费观看 | 中文字幕日韩无 | av一二三区 | 成人精品福利 | 国产精品一区二区在线免费观看 | 999男人的天堂 | 婷婷激情五月综合 | 日日夜夜添 | 美女黄频在线观看 | 奇米网777 | 国产91国语对白在线 | 中文字幕传媒 | 久久一区国产 | 九九九国产 | 精品无人国产偷自产在线 | 999久久久久久久久 69av视频在线观看 | 久久综合狠狠综合久久狠狠色综合 | 夜夜骑日日操 | 在线播放国产一区二区三区 | 欧美一区在线看 | 狠狠色2019综合网 | av在线com| japanesexxxhd奶水 91在线精品一区二区 | 成人黄色中文字幕 | 免费在线观看av网站 | 国产在线观看免费av | 久久高清av | 日本三级全黄少妇三2023 | 九九久久视频 | 91色吧 | 99草在线视频 | 日韩手机在线 | 免费久久片 | 亚洲国产三级 | 国产三级av在线 | 精品国产成人av在线免 | 九月婷婷人人澡人人添人人爽 | 亚洲精品免费在线 | 免费在线播放av电影 | 一二三四精品 | 国产破处视频在线播放 | 91xav| 国产精品无av码在线观看 | 精品免费国产一区二区三区四区 | 在线v片| 欧美性色综合网 | 五月婷婷丁香 | 婷婷色亚洲 | 91高清在线看 | 精品美女在线观看 | 久插视频| 欧美日韩在线视频观看 | 操操日| 日韩欧美精品一区 | 久久免费电影网 | 青草草在线视频 | 中文字幕色综合网 | 精品国产午夜 | 免费又黄又爽的视频 | 亚洲男男gⅴgay双龙 | 天天插天天爱 | 91在线国产观看 | 狠狠狠狠狠狠操 | 欧美狠狠操| 国产69精品久久久久99 | 欧美男同视频网站 | 久久免费视频精品 | 91福利专区 | 91私密保健 | av中文字幕在线看 | 国产精品欧美日韩在线观看 | 亚洲成人欧美 | 天堂av网在线| 天天爽夜夜操 | 亚洲精品久久久久58 | 亚洲精品乱码久久久久久9色 | 久久精品99北条麻妃 | 日韩中文字幕免费电影 | 最近高清中文在线字幕在线观看 | 国产精品乱码一区二区视频 | 婷婷丁香色综合狠狠色 | 国产一二区视频 | 久操中文字幕在线观看 | 日韩 在线a | 久久午夜国产精品 | 天堂久久电影网 | 久久久久国产精品厨房 | 日韩精品一区二区三区电影 | 日本特黄特色aaa大片免费 | 成年人免费在线观看网站 | 人人澡超碰碰97碰碰碰软件 | 久久 在线 | 国产色视频一区 | 欧美日韩在线播放 | 久久久久久久久爱 | 在线观看久久久久久 | 在线国产一区二区三区 | 91亚洲国产 | 欧美最猛性xxxxx(亚洲精品) | 久久超级碰视频 | 日韩精品中文字幕在线不卡尤物 | 色婷婷综合久色 | 国产一区在线免费观看 | 精品一区二区电影 | 久久精品视频观看 | 91av网址 | 91精品在线麻豆 | 99久e精品热线免费 99国产精品久久久久久久久久 | 免费进去里的视频 | 在线va网站| 国产视频精品网 | 国产 日韩 在线 亚洲 字幕 中文 | 人人干人人做 | 日韩在线资源 | 中文字幕色站 | 九九一级片 | av在线电影网站 | 亚洲精品91天天久久人人 | www.99热精品 | 91精品成人 | 99热最新| 久久国产午夜精品理论片最新版本 | 免费看黄色毛片 | 欧美视频网址 | 亚洲精品国产欧美在线观看 | japanese黑人亚洲人4k | 在线观看一级视频 | 美女视频黄是免费的 | 白丝av在线| 婷婷色在线观看 | 国产在线观看 | 人人爽人人香蕉 | 日本一区二区不卡高清 | 97免费在线视频 | 91在线观看黄 | 国产成人精品免高潮在线观看 | 在线国产一区二区三区 | 91亚洲精品国产 | 婷婷久久五月天 | 欧美一区二区三区在线看 | 中文字幕最新精品 | 天天色天天干天天 | 欧美一级片免费在线观看 | 国产精品久久久久免费观看 | 最新日韩在线观看 | 狠狠干夜夜操天天爽 | 国产护士hd高朝护士1 | 成年人黄色免费看 | 亚洲激情综合 | 欧美极品久久 | 国产成人精品一区在线 | 久久综合免费 | 人人爽人人爽人人片av免 | 国产精品1000 | 国产破处视频在线播放 | 不卡av电影在线 | 国产黄色大片免费看 | 人人爽人人做 | 99热这里只有精品久久 | 日韩一级成人av | 91精品在线免费视频 | 伊人天天狠天天添日日拍 | 9999精品视频| 国产精品av在线免费观看 | 久久久精品视频网站 | 嫩小bbbb摸bbb摸bbb | 久久99久国产精品黄毛片入口 | 日韩av一区二区三区 | 亚洲欧美在线视频免费 | 久久精品视频免费观看 | 久久男人中文字幕资源站 | 六月激情婷婷 | 国产不卡片 | 日韩欧美高清不卡 | 啪嗒啪嗒免费观看完整版 | av电影一区二区三区 | 精品亚洲网 | 国产淫a| 亚洲精品网页 | 在线免费高清视频 | 69人人 | 亚洲高清视频在线观看 | 欧美日本啪啪无遮挡网站 | 国内精品久久久久影院优 | 免费看国产一级片 | 九九热视频在线播放 | 麻豆传媒一区二区 | 99热99re6国产在线播放 | 免费看av在线 | 成人a在线观看高清电影 | 在线va视频 | 91探花在线 | 婷婷 中文字幕 | 国内精品视频在线 | 91黄色影视| 国语精品免费视频 | 成人午夜免费福利 | 国产a免费 | 99精品国自产在线 | 久久怡红院| 国产黄色精品在线 | 色视频成人在线观看免 | 国产激情小视频在线观看 | 久久这里精品视频 | 麻豆影视在线播放 | 日本中文字幕网址 | 国产高清精品在线观看 | www.av在线播放 | 欧美一区二区三区在线看 | 精品国产免费久久 | 日韩一级黄色av | 五月天激情综合 | 国产美女精品人人做人人爽 | 正在播放国产91 | 国产99一区视频免费 | 91专区在线观看 | 青青草视频精品 | www色综合| 精品欧美乱码久久久久久 | 91视频a| 天天草综合 | 福利电影一区二区 | 国产精品久久久久久久久久东京 | 在线免费观看国产黄色 | 亚洲精品国产精品国 | 亚洲精品777 | 99久久精品免费看国产一区二区三区 | 国产99精品 | 91精品推荐 | 日韩手机在线观看 | 精品一区三区 | 蜜臀91丨九色丨蝌蚪老版 | 人人看人人做人人澡 | 超碰精品在线 | 综合久久一本 | 精品一区av | 国产一级性生活视频 | 六月婷色 | 日韩精品免费专区 | 91精品国产综合久久久久久久 | 91麻豆文化传媒在线观看 | 十八岁以下禁止观看的1000个网站 | 久久精选 | 欧美一区二区三区在线 | 成人午夜剧场在线观看 | 夜夜躁狠狠燥 | 日本午夜免费福利视频 | 国产日韩av在线 | 国产三级香港三韩国三级 | 中文字幕在线网址 | 成人黄视频 | 精品久久久久久久久中文字幕 | 好看的国产精品视频 | 狠狠操综合网 | 中文字幕 国产专区 | 色婷婷综合久久久 | 午夜电影久久久 | 日躁夜躁狠狠躁2001 | 91成人精品视频 | 日本在线观看一区二区 | 久久人人精品 | 亚洲午夜av久久乱码 | 在线看国产 | 久久精品这里热有精品 | 欧美成年人在线观看 | 激情小说网站亚洲综合网 | 手机看片 | 久久av在线 | 久久a热6| 91成人精品观看 | 久久免费播放 | 日日夜夜干| 亚洲精品tv久久久久久久久久 | 欧美日韩国产精品爽爽 | 天天天天射 | 国产自在线 | 成人网页在线免费观看 | 69国产精品视频免费观看 | 日韩av免费一区 | 精品久久精品久久 | 日韩久久视频 | 青草草在线视频 | www.黄色片.com| 国产一区91| 91高清免费在线观看 | 97成人精品视频在线播放 | 能在线看的av| 999久久久免费精品国产 | 国产精品第 | 黄色三级免费 | 国产精久久久久久久 | 狠狠色综合欧美激情 | 玖玖玖影院 | 久久爱992xxoo | 日韩中午字幕 | 欧美成人精品欧美一级乱 | 韩国三级av在线 | 一二三精品视频 | 久久久久五月 | 日韩电影一区二区在线 | 成人蜜桃网 | 欧美激情第八页 | 天天插日日射 | 精品一二三区视频 | 高清日韩一区二区 | 日本成人免费在线观看 | 中文字幕黄色 | 日韩免费在线观看 | 中文字幕xxxx | 日本精品中文字幕在线观看 | 国产精品久久久久久影院 | 欧美成人91 | 欧美色图狠狠干 | 婷婷六月丁香激情 | 人人舔人人爽 | 伊人久久精品久久亚洲一区 | 国产精品毛片一区视频播不卡 | 午夜在线日韩 | 99精品色| 天堂网中文在线 | 香蕉久草 | 99r在线视频| 久久99网站 | 亚洲精品大片www | 色www.| 91av在线免费播放 | 九九热1| 国产精品99久久久久久大便 | 人人射人人爱 | 中中文字幕av | 亚洲精品小视频 | 在线观看岛国 | 草久久久久久 | 日韩亚洲在线视频 | 久久天天草| 欧美精品久久久久久久久久丰满 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲国内精品 | av国产在线观看 | 超碰个人在线 | 少妇bbbb搡bbbb桶 | 中文字幕精品久久 | 三级视频片| 国产色 在线 | 久久久午夜视频 | 国产亚洲一区二区在线观看 | 在线观看一区二区精品 | 中文字幕中文字幕在线中文字幕三区 | 成人性生爱a∨ | 久久成人国产精品入口 | 成人黄色大片在线观看 | 麻豆综合网| 激情开心| 最近中文字幕第一页 | 欧美91精品久久久久国产性生爱 | 国产精品乱看 | 奇米网8888 | 国产成人av片 | 日本女人b | 亚洲国产精品资源 | 在线观看一区 | 成年人av在线播放 | 国产精品嫩草影院123 | 69成人在线 | 欧美日韩网站 | 久草久草在线观看 | 中日韩三级视频 | 中文字幕在线观看网 | 在线观看免费av片 | 精品在线视频播放 | 97超在线视频 | 午夜久久成人 | 99视频在线观看免费 | 欧美精品国产综合久久 | 亚洲欧美日韩一区二区三区在线观看 | 手机成人av在线 | 亚洲最大色 | 精品国产伦一区二区三区观看体验 | 二区三区av| 最新国产中文字幕 | 欧美性网站 | 国产欧美精品一区二区三区 | 免费黄色激情视频 | a级国产乱理论片在线观看 伊人宗合网 | 亚洲国产欧美在线人成大黄瓜 | 91精品国产三级a在线观看 | 91视频在线| 美女一区网站 | 亚洲精选视频免费看 | 成人免费在线视频 | 国产精品视频最多的网站 | 国产精品 中文字幕 亚洲 欧美 | av三级在线看 | 波多野结衣在线播放视频 | 日韩二区三区在线观看 | 黄色一级片视频 | 九九九免费视频 | 天堂av色婷婷一区二区三区 | 91九色视频在线播放 | 国产免费av一区二区三区 | 中文在线字幕免 | 成人久久免费 | 香蕉在线影院 | 欧美二区在线播放 | 一本一道久久a久久综合蜜桃 | 91精品网站 | 国产香蕉久久精品综合网 | 亚洲国产成人在线观看 | 国产精品一区在线观看你懂的 | 久热久草 | 亚洲国产无 | 最新久久久| 黄色成人毛片 | 久久免费国产精品1 | 99久久精| 日本中文字幕观看 | 久久免费国产电影 | 免费a级黄色毛片 | 精品视频久久久 | av在线一二三区 | 99久久综合国产精品二区 | 中文字幕在线视频一区二区三区 | 国产成人一级 | 国产精品99久久久久久有的能看 | 91精品国产高清自在线观看 | 一区在线播放 | 一区二区视频在线播放 | 亚洲高清久久久 | 九九免费在线观看视频 | 在线看av的网址 | 欧美日韩xx| 欧美人牲 | 免费亚洲片| 在线观看亚洲国产精品 | 国产精品2019 | 久久网站最新地址 | 狠狠的干狠狠的操 | 国产中文字幕一区二区 | 成人网在线免费视频 | 国产在线无 | 玖玖在线观看视频 | 在线观看国产www | 欧美精品v国产精品v日韩精品 | 久久久精品网站 | 91av资源网 | 天天综合网天天综合色 | 国产999在线观看 | 精品一区二区免费 | 国产九色在线播放九色 | 香蕉视频最新网址 | 成年人电影毛片 | 国产精品爽爽爽 | 国产一二三四在线视频 | 99精品国产福利在线观看免费 | 99精品免费网 | 日韩欧美电影在线 | 天天射综合网站 | 曰韩精品| 久久综合给合久久狠狠色 | 最新av网址大全 | 久久久电影网站 | 91视频免费国产 | av福利在线免费观看 | 午夜免费在线观看 | 亚洲女欲精品久久久久久久18 | 中文字幕 欧美性 | 国产成年人av | 国产精品毛片久久久久久久久久99999999 | 999电影免费在线观看2020 | 91免费高清在线观看 | 亚洲精品久久久蜜臀下载官网 | 又黄又刺激视频 | 国际精品久久久久 | 日日夜夜综合网 | 99热99re6国产在线播放 | 激情视频91 | 国产成人一区二区在线观看 | 亚洲在线网址 | 亚洲精品视频二区 | 亚洲人成网站精品片在线观看 | 精品亚洲视频在线 | 丁香视频 | 国产99久久 | av片在线观看 | 一区二区影视 | 一区二区激情视频 | 激情视频在线高清看 | 成年人黄色在线观看 | 久草国产在线观看 | 美女视频黄是免费的 | 免费视频网 | 午夜123| 日韩免费网址 | 久久精品国产免费看久久精品 | 四虎5151久久欧美毛片 | 天天色天天综合 | 精品国产视频在线观看 | 色视频成人在线观看免 | 777视频在线观看 | japanesefreesex中国少妇 | 国产小视频免费在线观看 | 在线观看视频精品 | 色福利网站| 色综合久久久久 | 黄色一级影院 | 日本资源中文字幕在线 | 欧美日韩国产精品久久 | avhd高清在线谜片 | 99自拍视频在线观看 | 成年在线观看 | av片在线看 | 一本一道波多野毛片中文在线 | 精品久久久久久久久中文字幕 | 狠狠狠色丁香婷婷综合久久88 | 97超视频免费观看 | 欧美性生活大片 | 欧美日韩国产三级 | 欧美成人69av | 中文字幕成人av | 日韩videos高潮hd | 97手机电影网 | 久久99久久99精品免费看小说 | 91av综合 |