一、使用LitePal操作数据库
LitePal是一款开源的Android数据库框架,采用对象关系映射的模式,将我们平时开发常用的一些数据库功能进行了封装,使得操作数据库更简单了。
下面来使用一下。
先建一个新项目:LitePalTest
1、配置LitePal
在前面文章里讲解了如何配置LitePal,有需要跳转:点此跳转学习如何配置LitePal
2、创建数据库
首先修改activity_main.xml文件代码如下:
有四个按钮,用于创建,增删改查数据库。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
/>
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据"/>
<Button
android:id="@+id/update_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更新数据"/>
<Button
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据"/>
<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据"/>
</LinearLayout>
新建一个Book类,代码如下:
在Book类中,定义了id、author等字段,并生成了相应的get和set方法。Book类就相当于数据库的Book表,类中的每一个字段分别对应了表中的每一个列,这就是对象关系映射。
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){
= name;
}
}
下面将Book类添加到映射模型中,修改litepal.xml的代码,如下:
这里使用<mapping>标签来声明我们要配置的映射模型类,标签里是完整的类名。
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.litepaltest.Book"></mapping>
</list>
</litepal>
到此,准备工作已完成,下面开始创建数据库。
修改MainActivity代码,如下:
LitePal.getDatabase()方法就是创建数据库的方法。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
}
}
3、升级数据库
下面向Book表中添加一个press列。
修改Book代码,如下:
public class Book {
...................
private String press;
public String getPress(){
return press;
}
public void setPress(String press){
this.press = press;
}
......................
}
下面再添加一张Category表,新建Category类,如下:
public class Category {
private int id;
private String categoryName;
private int categoryCode;
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public void setCategoryCode(int categoryCode) {
this.categoryCode = categoryCode;
}
}
改完所有想改的东西后,将版本号加1。
修改litepal.xml代码如下:
这里改了版本号为2,在list里添加了刚才加入的表。
<?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>
4、添加数据。
修改Book类的代码,如下:
继承LitePalSupport类。
public class Book extends LitePalSupport {
................
}
修改MainActivity代码,如下:
给添加数据按钮增加点击事件。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
Button addData = findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setName("Android");
book.setAuthor("zxy");
book.setPages(521);
book.setPrice(9.9);
book.setPress("no");
book.save();
}
});
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
}
}
5、更新数据
修改MainActivity代码,如下:
调用setPrice()和setPress()方法设置要更新的数据,再调用updateAll()方法执行更新操作,如果不指定条件则默认更新所有数据。这里将名字为Android,作者zxy,价格更新为19.9,地址为zzz。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
Button updateData = findViewById(R.id.update_data);
........................
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setPrice(19.9);
book.setPress("zzz");
book.updateAll("name = ? and author = ?","Android","zxy");
}
});
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
}
}
6、删除数据
修改MainActivity代码如下:
下面表示删除Book表中价格低于15的书。deleteAll()方法如果不指定条件则默认删除所有数据。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
Button updateData = findViewById(R.id.update_data);
Button addData = findViewById(R.id.add_data);
Button deleteButton = findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.deleteAll(Book.class,"price < ?","15");
}
});
.....................
}
}
7、查询数据
修改MainActivity代码,如下:
findAll()方法查询所有字段信息,这里用List集合保存,然后用迭代器取出。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
Button updateData = findViewById(R.id.update_data);
Button addData = findViewById(R.id.add_data);
Button deleteButton = findViewById(R.id.delete_data);
Button queryButton = 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());
}
}
});
.......................
}
}
除了findAll()方法,还有其他查询API,如:
查询表中第一条数据:
Book firstBook = LitePal.findFirst(Book.class);