开源库–LitePal
概述
LitePal是一款开源的Android数据库框架,它采用对象关系映射的模式,并将我们平时开发最常用到的数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作。
1. 配置LitePal
1. 首先在app/build.gradle文件中声明引用该开源库的引用
implementation 'org.litepal.android:java:3.0.0'
2. 配置litepal.xml
右击app/src/main目录->New->Directory ,创建一个assets目录,然后在assets目录下再新建一个litepal.xml文件,接着编辑,内容如下
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value = "BookStore"></dbname>
<version value = "2"></version>
<list>
</list>
</litepal>
< dbname> 标签用于指定数据库名
< version>标签用于指定数据库版本号
< list>标签用于指定所有的映射模型
3. 配置LitePalApplication
修改AndroidManifest.xml中的代码
android:name="org.litepal.LitePalApplication"
2. 创建和升级数据库
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/create_database"
android:text="Create database"/>
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add data"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/update_data"
android:text="Update data"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/delete_data"
android:text="Delete data"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/query_data"
android:text="Query data"/>
</LinearLayout>
1. 定义一个Book类
public class Book extends LitePalSupport {
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;
}
}
2. 修改litepal.xml
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value = "BookStore"></dbname>
<version value = "2"></version>
<list>
<mapping class = "com.example.litepaltest.Book"></mapping>
</list>
</litepal>
这里使用< mapping>标签来声明我们要配置的映射模型类,一定要使用完整的类名。
3. 创建
现在只需要进行任意一次数据库的操作,BookStore.db数据库就会自动创建出来。
Button createDatabase = (Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
运行程序,点击一下按钮,然后通过adb shell 就可以查看数据库创建情况。
4. 升级
使用LitePal来升级数据库就非常的简单,不用思考任何的逻辑,只需要该你想改的任何内容,然后将版本号加1就行。
在Book类中加入
private String press;
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
同时,再添加一张表
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。由于这里还添加了一个表,因此也需要将它添加到映射模型列表中。修改litepal.xml代码
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value = "BookStore"></dbname>
<version value = "2"></version>
<list>
<mapping class = "com.example.litepaltest.Book"></mapping>
<mapping class="com.example.litepaltest.Category"></mapping>
</list>
</litepal>
然后重新运行一下程序,点击Create database按钮,再查看一下最新的建表语句。
3. 向数据库中添加数据
1. Book类需要继承LitePalSupport类
《Android 第一行代码》中是继承DataSupport,但是在目前已经不再继承它了
具体大家可以参考GitHub LitePal项目的主页
2. 修改MainActivity中的代码
Button addData = (Button)findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("UnKnown");
book.save();
}
});
创建Book实例,调用Book的各种set方法对数据进行设置,最后再调用save()方法就能完成添加操作了。
4. 更新数据
Button updateData = (Button)findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name=? and author = ?","The Lost Symbol","Dan Brown");
}
});
首先new出一个Book实例,然后直接调用setPrice()和setPress()方法来设置要更新的数据,最后再调用updateAll()方法去执行更新操作。
updateAll()方法中可以指定一个条件约束,和SQLiteDataBase中的update()方法的where参数部分有点类似,如果不加指定条件语句的话,就表示更新所有数据。这里我们指定将所有书名是The Lost Symbol并且作者是Dan Brown的书价格更新为14.95,出版社更新为Anchor。
5. 删除数据
Button deleteData = (Button)findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.deleteAll(Book.class,"price<?","15");
}
});
这里调用LitePal.deleteAll()方法来删除数据,第一个参数用于指定删除哪张表的数据,Book.class就意味者删除Book表中的数据后面的参数用于指定约束条件,删除book表中价格低于15的书。
6. 查询数据
Button queryButton = (Button)findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List<Book> books = LitePal.findAll(Book.class);
for (Book book:books) {
Log.d("MainActivity", "book name is"+book.getName());
Log.d("MainActivity", "book author is"+book.getAuthor());
Log.d("MainActivity", "book pages is"+book.getPages());
Log.d("MainActivity", "book price is"+book.getPrice());
Log.d("MainActivity", "book press is"+book.getPress());
}
}
});