日韩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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

在线a视频 | 91大神精品视频 | 最新日本中文字幕 | 欧美性色综合 | 久草电影在线观看 | 日韩videos | 亚洲精品www. | www.色综合.com | 色婷婷国产精品 | 国产黄色看片 | 久久免费视频5 | 在线观看香蕉视频 | 欧美三级高清 | 国产精品久久久久久久久久妇女 | 五月天亚洲综合 | 亚洲成人家庭影院 | 日本乱码在线 | 国产精品久久久久久一区二区三区 | 91完整版在线观看 | 久久这里精品视频 | av在线成人 | 久久免费视频4 | 99婷婷| 天天射天天干天天操 | 粉嫩av一区二区三区四区五区 | 玖玖在线看 | 成人免费中文字幕 | 天天爽夜夜爽人人爽一区二区 | 国产伦理久久精品久久久久_ | 在线影视 一区 二区 三区 | 丝袜足交在线 | 在线影院中文字幕 | 色噜噜狠狠狠狠色综合 | 精品天堂av| 国产成人在线播放 | 久久免费视频6 | 人人草人 | 久久黄色精品视频 | 欧美最猛性xxxxx亚洲精品 | 国产日韩欧美网站 | 亚洲综合色视频 | 免费开视频 | 欧美日韩在线网站 | 国产精品免费久久久久 | 狠狠的干狠狠的操 | 99在线热播 | 国产精品久久久影视 | 成人一区影院 | 久久精品一区二区三区中文字幕 | 蜜臀一区二区三区精品免费视频 | 国产精品免费成人 | 成人毛片久久 | 国产精品久久久久久爽爽爽 | 五月婷婷欧美视频 | 天天se天天cao天天干 | 欧美午夜久久 | www色,com | 成人av在线直播 | 国偷自产中文字幕亚洲手机在线 | 激情视频网页 | 免费看的av片 | 日韩精品高清不卡 | 亚洲专区免费观看 | 久久论理 | 婷婷激情五月 | 日韩在线视 | 日韩精品免费一区 | 国产成人av在线影院 | av线上免费观看 | 日韩专区 在线 | 国产精品久久久久aaaa | 婷婷六月在线 | 最近字幕在线观看第一季 | 国产精品色婷婷视频 | 狠狠干,狠狠操 | 天天爽夜夜爽精品视频婷婷 | av中文字幕在线电影 | 91九色丨porny丨丰满6 | 亚洲资源一区 | 国产精品午夜久久久久久99热 | 亚洲播播| 免费看片成人 | 久久夜色精品国产欧美一区麻豆 | 久青草视频在线观看 | 免费看黄20分钟 | 66av99精品福利视频在线 | 亚洲精品视频偷拍 | 国产精品免费观看网站 | 日本久久久久久久久久久 | 天堂在线一区 | 国产 日韩 在线 亚洲 字幕 中文 | 在线国产99| 欧美最猛性xxxxx免费 | 国产精品手机在线播放 | 嫩嫩影院理论片 | 久久精品国产亚洲精品2020 | 午夜久久久久久久 | 亚洲久草在线视频 | 亚洲精品中文字幕在线观看 | 久草在线播放视频 | 天天干,狠狠干 | 亚洲欧美日韩精品久久久 | 色综合天天做天天爱 | 粉嫩av一区二区三区入口 | 蜜桃麻豆www久久囤产精品 | 国产免费大片 | 成人精品影视 | 久久综合九色欧美综合狠狠 | 亚洲欧美视频一区二区三区 | aⅴ视频在线 | 国色天香在线 | 91av播放 | 欧美久久久久久久久久久久久 | 国产一区二区久久精品 | 超碰人在线 | 91av国产视频 | 伊人狠狠色 | 久久久久久国产精品999 | 国产亚洲精品久久久久动 | 日韩电影在线一区 | 免费午夜网站 | 成人黄色在线观看视频 | av丝袜天堂 | 天天干,天天射,天天操,天天摸 | 91在线日韩| 一区二区精品在线观看 | 日韩激情片在线观看 | 国产中文字幕三区 | 日韩高清一二三区 | 4p变态网欧美系列 | 精品视频免费看 | 在线免费高清一区二区三区 | 欧美一区二区日韩一区二区 | 精品久久五月天 | 黄色中文字幕在线 | 久久国产女人 | 午夜精品久久一牛影视 | 99免费| 91精品办公室少妇高潮对白 | 日韩视频一区二区在线 | 久久精品中文视频 | 伊人资源视频在线 | av在线进入| 激情av一区二区 | 国产第一页在线观看 | 国产精品成人av在线 | 深爱激情av | 91豆花在线观看 | 久久草精品 | 国产午夜三级一二三区 | 波多野结衣在线视频免费观看 | 中文字幕国产一区二区 | 亚洲资源在线网 | 天天综合网天天综合色 | 亚洲视频专区在线 | 日韩最新av在线 | 天天射网 | 日韩在线观看视频免费 | 国产一区二区视频在线播放 | 久久99这里只有精品 | 国产美女免费观看 | av免费电影在线观看 | 国产中文字幕三区 | 亚洲精品午夜国产va久久成人 | 亚洲伦理一区二区 | 国产大片免费久久 | 国内99视频| 中文在线免费看视频 | 色婷婷在线观看视频 | 亚洲精品高清视频在线观看 | 久草在线资源免费 | 西西444www大胆高清图片 | 久久免费视频在线 | 欧美日韩不卡一区二区三区 | 免费成人看片 | a午夜在线 | 国产成人一区二 | 成人av网站在线 | 久久婷婷一区 | 天天综合成人 | 成人av高清在线观看 | 国产精品综合久久久 | 成年人视频在线免费 | 麻豆传媒在线免费看 | 国产中文字幕视频在线观看 | 国产亚洲一级高清 | 欧美激情精品一区 | 99精品国产99久久久久久97 | 日韩在线三区 | 在线亚洲高清视频 | 免费视频xnxx com | 黄色看片 | 久草9视频 | 欧美 日韩 视频 | 亚洲电影在线看 | 国产精品中文字幕av | 人人插人人射 | av高清一区二区三区 | 久草香蕉在线 | 麻豆影视在线观看 | 99综合影院在线 | 亚洲色影爱久久精品 | 2019中文最近的2019中文在线 | 免费麻豆 | 99视频免费 | 中文字幕一区二区三 | 亚洲男人天堂2018 | av 一区二区三区 | 国产裸体视频网站 | 欧美一级性 | 欧美 另类 交 | 99视频在线免费 | 日韩欧美一区二区在线 | 1000部18岁以下禁看视频 | 中文字幕一区二 | av天天干| 青青河边草免费直播 | 国产高清日韩欧美 | 少妇精69xxtheporn | 99国产在线| 激情文学综合丁香 | 激情久久久久 | 中文字幕免费高 | 99视频在线精品国自产拍免费观看 | 天天操夜夜干 | 免费热情视频 | 日韩精品一区二区在线观看视频 | 色999视频 | 日韩美视频 | 精品国产自 | 成人免费视频播放 | 久草在线这里只有精品 | 激情 亚洲| 欧美日韩亚洲在线 | 69国产精品视频 | 永久免费的av电影 | 色综合天天做天天爱 | 99精品国产在热久久下载 | 91久久精品一区二区二区 | 九九九九热精品免费视频点播观看 | 在线看片中文字幕 | 福利区在线观看 | 91丝袜美腿| 久草线 | 国产91精品看黄网站在线观看动漫 | 亚洲综合婷婷 | 国产精品中文久久久久久久 | 国产精品18久久久久久不卡孕妇 | 欧美成人999| 亚洲午夜精品福利 | 天天射天天| 久久女同性恋中文字幕 | 97国产精品 | av福利在线看 | 色www永久免费| 500部大龄熟乱视频 欧美日本三级 | 欧美天堂视频在线 | 久久久精品久久 | 在线视频第一页 | 激情av综合| www.99在线观看 | 人人搞人人爽 | 国产成人精品不卡 | 国产精品视频全国免费观看 | 婷婷色综合色 | 一区二区视频在线免费观看 | 日韩成人免费在线电影 | 欧洲成人av | 久久久99久久 | 亚洲综合国产精品 | 色婷婷综合成人av | 乱子伦av| 亚洲人成综合 | 又大又硬又黄又爽视频在线观看 | 视频在线99re | 免费在线观看国产黄 | 毛片精品免费在线观看 | 国产精品精品 | 欧美久久久久久久久久久久久 | 色综合小说 | av三级在线免费观看 | 亚洲欧美国产精品 | 蜜臀av免费一区二区三区 | 欧美在线观看禁18 | 99热精品国产一区二区在线观看 | 欧美久久综合 | 国产成人精品亚洲a | 国产91精品一区二区麻豆网站 | 国产成人精品一区二三区 | 免费在线黄网 | 日韩h在线观看 | 91麻豆国产福利在线观看 | 六月婷婷网 | 视频一区二区在线 | 天天拍天天草 | 亚洲精品视频在线免费播放 | 狠狠操狠狠干天天操 | 成人国产精品久久久 | 91理论电影 | 天天摸日日摸人人看 | 国色天香在线 | 夜夜澡人模人人添人人看 | 免费a v观看 | 午夜神马福利 | 夜夜澡人模人人添人人看 | 久久久午夜精品理论片中文字幕 | 久久婷婷久久 | 天天操天天干天天操天天干 | 国产美女精品人人做人人爽 | 国产精品免费久久久久久 | 91av亚洲| 久久99在线视频 | 92中文资源在线 | 亚洲一区二区三区四区精品 | 国产精品久99 | 婷婷色 亚洲 | av电影一区二区三区 | 久久国产精品久久精品国产演员表 | 超碰97免费| 成人黄色片在线播放 | 中文字幕免费高清av | 久久r精品 | 五月开心色 | 欧美日韩精品免费观看视频 | www.夜色321.com | 久久精品一二三区白丝高潮 | 欧美日韩三区二区 | 亚洲精品麻豆视频 | 一级片免费观看 | 五月天久久久 | 4438全国亚洲精品观看视频 | 久久精品伊人 | 久久人人爽视频 | 国产91小视频 | 久久久99国产精品免费 | 丁香六月婷婷开心婷婷网 | 久久久91精品国产 | 97国产小视频 | 视频二区在线视频 | 久久99热久久99精品 | 欧美精品久久久久久久久久丰满 | 欧美十八 | 91视频 - 114av | 精品久久网| 精品福利国产 | 国产亚洲精品久久久久动 | 久久免费精品一区二区三区 | 国产在线一线 | 亚洲欧洲精品一区二区精品久久久 | 亚洲精品久久久久中文字幕二区 | 中文字幕人成人 | 在线观看国产区 | 国产亚洲婷婷 | 99视频这里有精品 | 久久99精品久久久久久久久久久久 | 国内精品在线一区 | 久久精品高清视频 | 91成品人影院 | 日韩高清一二区 | 天天操天操 | 视频一区二区视频 | 久久免费视频99 | 91久久久久久国产精品 | 久草在线视频资源 | 久久久久www| 99色在线视频| 99色婷婷 | 中文字幕一区二区三区精华液 | 偷拍精品一区二区三区 | 特级毛片在线免费观看 | 中文字幕在线精品 | 成年人在线电影 | 中文字幕在线观看国产 | 国产精品精品久久久久久 | 九九免费精品 | 成人h电影在线观看 | 免费在线国产黄色 | 97精产国品一二三产区在线 | 麻豆久久久久 | 蜜臀久久99静品久久久久久 | 久久夜色精品国产欧美一区麻豆 | 久久久国产精品电影 | 亚洲年轻女教师毛茸茸 | 免费av电影网站 | 天天鲁一鲁摸一摸爽一爽 | 日韩美精品视频 | 狂野欧美激情性xxxx欧美 | 日韩成人免费在线 | 久久人人爽人人爽人人片 | 国产福利a | 操久在线| 天天操夜夜叫 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线v片| 黄色网www | 欧美狠狠操 | 99久久国产免费看 | 久久成电影 | 亚洲在线高清 | www久草| 久热免费 | 婷婷亚洲最大 | 91在线亚洲| 亚洲一区精品人人爽人人躁 | 韩日精品在线 | 日韩一区二区三区免费电影 | 国产r级在线观看 | 久久精品国产精品 | 婷婷丁香导航 | 免费视频资源 | 日韩欧美视频免费观看 | 久久免费视频网站 | 手机成人在线 | 女人魂免费观看 | 日韩精品视频第一页 | 亚洲一级电影视频 | 午夜av在线电影 | 97涩涩视频| 欧美日韩在线视频观看 | 在线免费中文字幕 | 在线观看免费成人 | 韩国av在线| 人人射人人插 | 免费91麻豆精品国产自产在线观看 | 青草视频免费观看 | 久久久精品在线观看 | 九九九视频在线 | 久久久久久久国产精品 | 五月婷婷久久丁香 | 国产精品久久久久av | 男女激情麻豆 | 国产人成在线视频 | 成人三级网站在线观看 | 国产一级一级国产 | 九色精品免费永久在线 | 黄色三级免费网址 | 国产精品孕妇 | 胖bbbb搡bbbb擦bbbb | 日韩电影一区二区三区在线观看 | 99精品系列 | 成年人网站免费在线观看 | 午夜国产一区 | 人人看人人草 | 久草免费在线 | 三级av在线播放 | 久久美女精品 | 色伊人网 | 国产高清在线 | 91精品秘密在线观看 | 亚洲国产欧美一区二区三区丁香婷 | 黄色亚洲片 | 免费亚洲视频在线观看 | 99国产在线观看 | 亚洲精品综合在线 | 在线国产不卡 | 男女激情片在线观看 | 亚洲欧美综合精品久久成人 | 久久精品永久免费 | 国产成人三级在线播放 | 午夜精品成人一区二区三区 | 成年美女黄网站色大片免费看 | 久久久国产精品一区二区中文 | 日本不卡123区 | 天堂av在线免费 | 久久久综合色 | 免费在线观看av网站 | 久久免费电影 | 国产黄色片在线免费观看 | 激情婷婷av | 欧美日韩国产一区二区在线观看 | 国产尤物一区二区三区 | 日韩免费视频线观看 | av日韩不卡 | 久久高清 | 国产视频中文字幕在线观看 | 超碰av在线 | 国产专区一 | 久久九九久久九九 | 一区二区三区在线影院 | 亚洲久久视频 | 国产 字幕 制服 中文 在线 | 在线色视频小说 | 国产成人精品a | 在线免费精品视频 | 国产一区二区日本 | 中文字幕久久久精品 | 欧美日韩在线播放 | 在线观看免费观看在线91 | 国产精品美女免费看 | 亚在线播放中文视频 | 美女网站久久 | 久久视频免费在线观看 | 夜夜视频| 久久99国产精品久久99 | 精品国产乱码久久久久久天美 | 日韩一区二区三区免费视频 | 成人免费观看在线视频 | 精品美女久久久久 | 国产一级二级av | 国产视频观看 | 亚洲人片在线观看 | 欧美亚洲国产精品久久高清浪潮 | 国产日产精品久久久久快鸭 | 国产精品视频免费 | 久久天堂亚洲 | 免费久久网站 | 国产精品久久久久久久久久妇女 | 午夜精品视频一区二区三区在线看 | 亚洲视频免费 | 黄色一二级片 | 久久精品99精品国产香蕉 | 99久高清在线观看视频99精品热在线观看视频 | 日韩欧美国产免费播放 | 亚洲丝袜一区二区 | 日韩黄色免费 | 欧美日韩中文字幕综合视频 | 日韩理论在线视频 | 国产黄免费在线观看 | 中文字幕在线观看免费高清电影 | 欧美一区二区三区在线播放 | 六月天色婷婷 | 中文永久免费观看 | 精品免费一区二区三区 | 婷婷在线视频 | 天天色天天操综合网 | 中文字幕一区在线观看视频 | 一区三区视频在线观看 | 国产精品欧美久久久久无广告 | 国内精品久久久久久久影视简单 | 美女久久一区 | 超级碰99 | 日韩精品一区二区三区第95 | 免费高清影视 | 手机看片1042 | 免费看黄色大全 | 国产麻豆视频免费观看 | 国产一二三区av | 91av中文字幕 | 国产黄视频在线观看 | 日韩性久久 | 亚洲区另类春色综合小说校园片 | 黄色aaa毛片| 亚洲精品国产高清 | 超碰在线97国产 | 麻豆传媒视频在线播放 | 国产福利在线 | 亚洲精品美女在线观看 | 国产黄色美女 | 日韩激情在线 | 国产传媒一区在线 | 人人射人人澡 | 麻豆久久精品 | 四虎精品成人免费网站 | 成人一级视频在线观看 | 国产一区二区三区免费视频 | 国产永久免费 | 国产最新视频在线 | 久久超| 亚洲黄色高清 | 亚洲va欧洲va国产va不卡 | 青春草免费视频 | 免费av大全 | 中文欧美字幕免费 | 一区二区欧美在线观看 | 亚洲日本欧美在线 | 天天狠狠操 | 在线免费观看视频a | 国产视频999 | 婷婷在线播放 | av在线网站大全 | 日韩 精品 一区 国产 麻豆 | 日韩激情免费视频 | 在线视频 区 | 色a资源在线 | 国产在线精品国自产拍影院 | 免费观看v片在线观看 | 日韩在线在线 | 欧美日韩在线观看一区 | 国产亚洲欧美在线视频 | 在线看中文字幕 | 日韩中文字幕免费电影 | 久草在线资源观看 | 精品福利网 | 亚洲精品美女视频 | 蜜臀91丨九色丨蝌蚪老版 | 91免费版成人 | 中文一区二区三区在线观看 | 国产久草在线 | 狠狠色丁香婷综合久久 | 亚洲综合色婷婷 | 狠狠撸电影 | 天天透天天插 | 国产成人av在线 | 国产精品原创在线 | 国产精品久久久久久久久免费看 | 中文字幕在线看人 | 久久免费视频8 | av在线影视 | 精品国产乱码久久久久久1区二区 | 久久麻豆视频 | 亚洲黄色精品 | 99久久国产免费免费 | aa级黄色大片| 久99久中文字幕在线 | 亚洲丝袜一区二区 | 久久久国产日韩 | 成人免费一级片 | 国产精品欧美久久久久无广告 | 欧美日韩在线播放 | 午夜精品福利一区二区 | 日日干激情五月 | 日本高清中文字幕有码在线 | 91av在线国产 | 国产精品久久av | 亚洲妇女av | 精壮的侍卫呻吟h | 亚州国产精品视频 | 日韩字幕 | 久久久久久久久久电影 | 视频一区在线免费观看 | 久久9视频 | 黄色日视频 | 天天干天天操天天 | 久久国产精品一区二区三区四区 | 久久99久久99精品免观看软件 | 中文字幕 婷婷 | 国产麻豆果冻传媒在线观看 | 黄色中文字幕在线 | 亚洲伊人天堂 | 国产香蕉久久 | 福利一区在线 | 狠狠色丁香久久婷婷综合_中 | 波多野结衣精品视频 | 久久中文欧美 | 欧美国产三区 | 2021久久| 日韩精品不卡在线 | 国产精品国产亚洲精品看不卡 | aaa亚洲精品一二三区 | 亚洲区另类春色综合小说校园片 | 成人小视频在线免费观看 | 亚洲专区欧美专区 | 亚州欧美精品 | 精品国产亚洲一区二区麻豆 | 国产精品原创 | 精品久久精品久久 | 久久国产精品一区二区三区四区 | 99久久精品国产欧美主题曲 | 亚洲国产黄色片 | 免费网站看av片 | 91麻豆精品国产91久久久无限制版 | 久久国产影院 | 日韩综合色| 久久久精品 | 久久精品99国产国产 | 亚洲国产精品日韩 | 日本巨乳在线 | 亚洲精品国产精品久久99热 | 在线观看激情av | 一区免费在线 | 黄色成人在线网站 | av三区在线 | 6699私人影院 | 五月激情在线 | 91成人精品| 91网站在线视频 | 久草在线资源免费 | www.成人精品| 欧美日韩18 | 在线中文字幕播放 | 免费看黄电影 | 亚洲精品在线免费观看视频 | 激情欧美一区二区三区免费看 | 日本精品久久久久中文字幕 | 高清av免费看 | av在线一级 | 久久久精品亚洲 | 成人午夜电影免费在线观看 | 午夜在线看片 | 91伊人久久大香线蕉蜜芽人口 | av线上免费看 | 国产精品麻豆视频 | 免费在线观看日韩 | 黄色特级一级片 | 国产精品麻豆免费版 | 久久九九国产视频 | 蜜臀av性久久久久av蜜臀妖精 | 超碰免费97 | 欧美久久久久久久久久 | 婷婷久久综合网 | 成人av在线网 | 成人国产精品av | 亚洲欧美日韩一二三区 | 日韩中文字幕a | 国产日韩在线播放 | 亚洲专区欧美专区 | 久久爱综合 | 国产在线国产 | 亚洲精品高清视频在线观看 | 黄色免费国产 | 五月天综合 | 欧美日韩在线观看一区 | 国产专区日韩专区 | 中文在线a在线 | 久久国产精品视频免费看 | 精品国产美女在线 | 福利视频一区二区 | 亚洲一区二区三区在线看 | 日韩精品无码一区二区三区 | 免费视频在线观看网站 | 婷婷网站天天婷婷网站 | 91麻豆看国产在线紧急地址 | 在线高清av | 色多多视频在线观看 | 免费看国产黄色 | 96精品视频 | 中文字幕国产精品 | 国产伦理一区二区三区 | www欧美色 | 免费观看丰满少妇做爰 | 三级黄色免费 | 欧美一级电影在线观看 | 午夜精品剧场 | 天天搞天天干天天色 | 伊人国产在线播放 | 欧美日韩高清一区 | 精品福利视频在线观看 | 三级av网站| 亚洲国产一区av | 欧美日韩国产在线 | www.色com | av中文天堂在线 | 色天天综合久久久久综合片 | 国产3p视频 | 9797在线看片亚洲精品 | 国产视频在线播放 | 国模精品一区二区三区 | 国产精品 日韩 | 久久精品国产一区二区电影 | 91视频久久久 | 日本韩国欧美在线观看 | 亚洲精品美女久久17c | 国产精品24小时在线观看 | 国产 在线 日韩 | 免费三级骚 | 国产特级毛片aaaaaa高清 | 亚洲精品影院在线观看 | 欧美日在线观看 | 亚州精品天堂中文字幕 | 综合网婷婷 | 国产黄大片 | 国产精品福利视频 | 天堂va在线观看 | 亚洲午夜久久久久久久久久久 | 最新国产福利 | 手机av片 | 黄色三级网站在线观看 | 久久高清视频免费 | www.操.com| 色综合夜色一区 | 国产高清在线精品 | 狠狠色丁香婷婷综合久久片 | 亚洲精品免费播放 | 中文字幕av最新 | 97精品国产97久久久久久久久久久久 | 久久国产精品色av免费看 | 天天骚夜夜操 | 国产精品永久在线 | 在线激情影院一区 | 久久综合中文色婷婷 | 国产精品久久久一区二区三区网站 | 亚洲精品在线观看网站 | 国产露脸91国语对白 | 久久精品一区二区三区国产主播 | 一级黄色a视频 | 五月综合久久 | 亚洲综合视频在线 | 欧洲性视频| 日韩剧 | 国产一级二级在线 | 久久手机看片 | 91最新视频在线观看 | 中文字幕久久网 | 天天天插| 久久亚洲综合国产精品99麻豆的功能介绍 | 国产在线第三页 | 91xav| 久久免费一 | 精品久久久久久综合日本 | 99在线观看 | 亚洲 欧美日韩 国产 中文 | 成人黄色一级视频 | 国产香蕉97碰碰碰视频在线观看 | 成全免费观看视频 | 天天操天天干天天摸 | 国产香蕉97碰碰久久人人 | 国产日韩一区在线 | www.成人久久 | 91麻豆精品久久久久久 | 久久成人高清视频 | 日日干日日操 | 国产黄色免费 | 国产区免费| 日韩欧美精品免费 | 国产一卡久久电影永久 | 精品久久亚洲 | 天天操天天插 | av福利在线播放 | 97网站| 国产精品久久电影网 | 在线观看91 | 一本色道久久综合亚洲二区三区 | 色999在线| 在线视频欧美日韩 | 91色在线观看视频 | 国产精品高清免费在线观看 | 久久国产手机看片 | 日韩免费二区 | 久久理论视频 | 天堂在线一区二区 | 日韩在线一区二区免费 | 在线免费观看涩涩 | 波多野结衣在线视频免费观看 | 日韩精品久久久久久中文字幕8 | 99在线高清视频在线播放 | 久久久久久久久国产 | 中文区中文字幕免费看 | 国产免费观看久久 | 免费进去里的视频 | av片在线观看 | 五月天国产精品 | 日本中文字幕观看 | av在线看网站| 国产美女精品久久久 | 在线中文字母电影观看 | 99精品久久久久久久久久综合 | 最新久久久 | 色91在线 | 日韩在线播放av | 九九综合九九综合 | 精品国产免费一区二区三区五区 | 中文资源在线观看 | 男女激情麻豆 | 精品在线观看一区二区三区 | 911久久| 久久国产精品影视 | 国产视频在线观看免费 | 欧美日韩观看 | 男女激情免费网站 | 四虎影院在线观看av | 久草久草在线观看 | av网站免费线看精品 | av在线之家电影网站 | wwxxxx日本| 午夜精品久久久久久99热明星 | 国产不卡av在线播放 | 超碰成人网| 中文在线免费看视频 | 亚洲激情视频在线观看 | 久久免费成人网 | 973理论片235影院9 | 美女黄网久久 | 91热在线 | 国产又黄又爽又猛视频日本 | 日日夜夜综合 | 亚洲精品色 | 日韩视频中文字幕 | 天天操·夜夜操 | 欧美最爽乱淫视频播放 | 天天在线免费视频 | 97电影手机 | 黄色a在线观看 | 91成人免费在线视频 | 亚洲视频456 | 999ZYZ玖玖资源站永久 | 视频二区在线视频 | 91视频高清完整版 | 不卡的一区二区三区 | 亚洲一区动漫 | 日本不卡视频 | 免费在线一区二区 | 欧美性生交大片免网 | av高清一区二区三区 | 日韩av快播电影网 | 精品在线视频一区二区三区 | 亚洲人成精品久久久久 | 热久久视久久精品18亚洲精品 | 免费av网址大全 | 久久麻豆精品 | 深爱激情开心 | 亚洲精品国偷自产在线99热 | 高清国产午夜精品久久久久久 | 又污又黄网站 | 国产在线精品区 | 99久久精品免费 | 在线观看韩日电影免费 | 久久a免费视频 | 久久人视频| 色综合久久66 | 91精品免费在线视频 | 国产青青青 | 中文字幕在线观看三区 | 国内精品久久久久久久久久久久 | 在线观看亚洲精品视频 | 探花视频免费观看高清视频 | 手机在线免费av | 久久国产成人午夜av影院潦草 | 久久久综合香蕉尹人综合网 | 国产资源免费 | 精品视频在线观看 | 国产成人精品在线播放 | 99视频在线免费观看 | 国产亚洲欧美一区 | 亚洲精品中文字幕在线观看 | 黄色亚洲免费 | 天堂在线免费视频 | 99视频一区二区 | 黄色av电影网 | av在线激情 | 日韩欧美网址 | 国产二区av | 五月婷婷综合激情网 | 一区二区三区动漫 | 日本少妇高清做爰视频 | 97视频中文字幕 | 国产精品久久久久aaaa九色 | 五月婷婷香蕉 | 亚洲国产电影在线观看 | 久久经典国产 | 黄色在线观看免费 | 亚洲黄色高清 | 一级α片 | 91亚洲狠狠婷婷综合久久久 | 超碰在线观看av.com | 国产自产在线视频 | 天堂网在线视频 | 男女激情片在线观看 | 人人爽人人插 | 国产精品99久久久精品免费观看 | 狠狠色狠狠综合久久 | 欧美aa一级 | 亚洲成av人影片在线观看 | 精品99免费视频 | 久久成人高清视频 | 九九热精品国产 | 亚洲国产精品人久久电影 | 国产亚洲精品精品精品 | 国产精美视频 | 狠狠色丁香婷婷综合久小说久 | 久久精品视频在线观看免费 | 欧美一二三区播放 | 免费日韩一区二区三区 | 久草在线免费电影 | 午夜体验区 | 国产精品一区二区视频 | 激情综合狠狠 | 在线观看成人一级片 | 成人av电影在线播放 | 国产精品11 | 极品美女被弄高潮视频网站 | av片免费播放 | 中文字幕在线观看91 | 久久在线视频在线 | 伊人五月天.com | 五月婷婷国产 | 午夜精品久久久久久久99无限制 | 精品久久久免费 | 久久久精品国产一区二区电影四季 | 天天综合久久综合 | 久久久久久久99精品免费观看 | 99在线精品免费视频九九视 | 欧美一级视频免费 | 欧美日韩p片 | 成人免费在线看片 | 成人av一区二区三区 | 国产夫妻自拍av | 免费看的国产视频网站 | 草久久久久久久 | 狠狠色丁香婷婷综合久小说久 | 国产黄色片免费在线观看 | 丝袜美腿亚洲综合 | 99久久9| 亚洲va综合va国产va中文 | 91精品国产自产在线观看永久 | 欧美精品久久久久久久久久丰满 | 欧美精品一区二区在线播放 | 国产精品免费在线视频 | 亚洲 欧美 另类人妖 | 美女搞黄国产视频网站 | 又黄又刺激 | 精品一区二区在线观看 | 久久综合网色—综合色88 | 成人a在线观看高清电影 | av高清在线观看 | 四虎国产精品成人免费影视 | 黄网站色 | 久久一及片| 国产精品久久久久久久7电影 |