神奇的 LitePal 操作数据库(一)
LitePal 是一款由郭霖开源的 Android 数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时最常用到的一些数据库功能进行了封装,使得不用编写一行 SQL 语句就可以完成各种建表和增删改查的操作。
配置 LitePal
1,在 app/build.gradle 文件中添加如下:
compile 'org.litepal.android:core:1.5.1'
2,配置 litepal.xml 文件。右击 app/src/main 目录 → New →Directory,创建一个 assets 目录,然后在 assets 目录下再新建一个 litepal.xml 文件,接着编辑 litepal.xml 文件内容,如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--数据库名-->
<dbname value="BookStore"></dbname>
<!--数据库版本号-->
<version value="1"></version>
<!--映射模型,稍后用到-->
<list>
</list>
</litepal>
3,在 AndroidMainfest.xml 中配置一下 LitePalApplication,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gyq.litepaltest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
**android:name="org.litepal.LitePalApplication"**
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
创建数据库
1,首先定义一个实体类 Book.java
package com.gyq.litepaltest.entity;
import org.litepal.crud.DataSupport;
/**
* 必须继承 DataSupport 类,才能进行 CRUD 操作
* Created by gyq on 2017/7/6 09:24
*/
public class Book extends DataSupport{
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;
}
}
2,将Book类添加映射模型列表中,修改 litepal.xml 中的代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--数据库名-->
<dbname value="BookStore"></dbname>
<!--数据库版本号-->
<version value="1"></version>
<!--映射模型,注意一定要使用完整的类名>
<list>
<mapping class = "com.gyq.litepaltest.entity.Book"></mapping>
</list>
</litepal>
3,修改 MainActivity.java 中代码
//创建数据库表
Button createDataBase = (Button)findViewById(R.id.create_database);
createDataBase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Connector.getDatabase();
}
});
升级数据库
1,想要在Book类中添加一个press(出版社),直接修改代码如下:
public class Book extends DataSupport{
...
private String press;
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
...
}
2,想新建一张 Category 表,新建一个 Category 类
package com.gyq.litepaltest.entity;
/**
* Created by gyq on 2017/7/6 09:34
*/
public class Category {
private int id;
private String categoryName;
private int categoryCode;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCategoryCode() {
return categoryCode;
}
public void setCategoryCode(int categoryCode) {
this.categoryCode = categoryCode;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
}
3,版本号加1,修改 litepal.xml 中的代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="2"></version>
<list>
<mapping class = "com.gyq.litepaltest.entity.Book"></mapping>
<mapping class = "com.gyq.litepaltest.entity.Category"></mapping>
</list>
</litepal>
这样升级完成了,还保留之前表中的所有数据。
使用 LitePal 添加数据
1,实体类 Book 必须继承 DataSupport。
2,修改MainActivity.java 代码
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("第一行代码");
book.setAuthor("郭霖");
book.setPages(568);
book.setPrice(79);
book.setPress("不知道");
book.save();
}
});
3,运行程序,点击创建按钮,添加按钮,查询按钮。看打印的日志:
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book name is第一行代码
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book author is郭霖
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book pages is568
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book price is79.0
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book press is不知道
使用 LitePal 更新数据
1,将价格改为 56.0,修改MainActivity中的代码:
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(56.0);
book.updateAll("name = ? and author = ?","第一行代码","郭霖");
}
});
2,运行程序,点击更新按钮,在点击查询按钮,看 log 日志。
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book name is第一行代码
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book author is郭霖
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book pages is568
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book price is56.0
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book press is不知道
使用 LitePal 删除数据
1,修改MainActivity中代码:
Button deleteData = (Button)findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DataSupport.deleteAll(Book.class,"price < ?","17");
}
});
使用 LitePal 查询数据
1,修改MainActivity中代码:
Button queryData = (Button)findViewById(R.id.query_data);
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List<Book> books = DataSupport.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());
}
}
});
上一篇: 神奇的RPC其实并不神奇
下一篇: MySQL( 数据类型)