Android数据库LitePal的基本用法详解
LitePal是一款专为Android设计的开源数据库框架,它基于对象关系映射(ORM)技术,简化了SQLite数据库的使用,本文将详细介绍LitePal的基本用法,包括配置、建表、增删改查等操作。
一、LitePal简介
LitePal采用了对象关系映射(ORM)模式,将我们平时使用的一些数据库(比如Sqlite)功能进行了封装,通过LitePal,开发者无需编写SQL语句即可完成大部分的数据库操作,包括创建或升级表、CRUD操作、聚合函数等。
二、配置LitePal
1. 添加依赖
在项目的build.gradle
文件中添加以下依赖项:
dependencies { implementation 'org.litepal.android:core:3.2.3' // 请根据需要选择最新版本 }
2. 创建litepal.xml
文件
在app/src/main
目录下创建一个名为assets
的文件夹,然后在该文件夹下创建一个新的文件,命名为litepal.xml
,并编辑内容如下:
<?xml version="1.0" encoding="utf-8"?> <litepal> <!--定义应用程序的数据库名称--> <dbname value="NewFriend" /> <!--定义数据库的版本--> <version value="1" /> <!--在带有mapping标签的列表中定义模型,LitePal将为每个映射类创建表--> <list> <mapping class="com.example.model.NewFriend" /> </list> <!--定义.db文件应位于的位置--> <storage value="internal" /> <!--默认为internal,可选external--> </litepal>
注意:每次更改数据库结构后,需要增加<version>
的值。
3. 配置LitePalApplication
为了使API变得简单,可以在AndroidManifest.xml中配置LitePalApplication
,或者在自己的应用程序中调用LitePal.initialize(context)
,推荐在Application的onCreate方法中初始化:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); LitePal.initialize(this); } }
确保尽早调用此方法,并在Application的onCreate方法中使用应用程序上下文作为参数。
三、开始使用LitePal
1. 创建表
首先定义模型,创建一个名为Person
的模型:
package com.example.model; import org.litepal.crud.DataSupport; public class Person extends DataSupport { private int id; private String name; private int age; // Getter和Setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
注意:所有字段都应该是支持的数据类型之一(如int、long、double、float、boolean、String、Date),并且不能包含List类型的属性。
2. 保存数据
保存数据到数据库中可以调用save()
方法:
Person person = new Person(); person.setName("张三"); person.setAge(25); if (person.save()) { LogUtil.instance.d("添加数据成功"); } else { LogUtil.instance.d("添加数据失败"); }
save()
方法返回一个布尔值,表示数据是否添加到数据库中。
3. 更新数据
由于LitePal是以行号id作为主键,因此可以直接通过调用update()
方法直接更新对应id的数据:
Person person = new Person(); person.setId(1); // 假设要更新id为1的记录 person.setAge(30); // 修改年龄为30 if (person.update(1)) { LogUtil.instance.d("更新数据成功"); } else { LogUtil.instance.d("更新数据失败"); }
如果需要修改满足一定条件的数据内容,可以使用updateAll()
方法:
Person.updateAll("age > ?", 20, "age = ?", 30); // 将年龄大于20且小于等于30的记录的年龄修改为30
4. 删除数据
删除可以调用delete()
或者deleteAll()
方法:
// 删除数据表中指定ID的数据 LitePal.delete(Person.class, 1); // 清空整个数据表 LitePal.deleteAll(Person.class); // 条件删除 Person.deleteAll("age > ?", 25); // 删除年龄大于25的所有记录
也可以通过获得SQLiteDatabase
来进行操作:
SQLiteDatabase db = LitePal.getDatabase(); ContentValues values = new ContentValues(); values.put("name", "李四"); values.put("age", 28); db.insert("person", null, values); // 插入新的记录
5. 查询数据
查询数据可以通过多种方式进行,
// 获取所有频道 List<Person> persons = DataSupport.findAll(Person.class); for (Person person : persons) { System.out.println(person); }
还可以使用条件查询:
List<Person> people = DataSupport.where("age > ?", 20).find(Person.class); // 查询年龄大于20的所有记录
或者使用更复杂的查询:
List<Person> people = DataSupport.where("age between ? and ?", 20, 30).find(Person.class); // 查询年龄在20到30之间的记录
对于分组查询,可以使用group()
方法:
List<Person> people = DataSupport.group("age").find(Person.class); // 按年龄分组查询记录数
对于排序查询,可以使用order()
方法:
List<Person> people = DataSupport.order("age desc").find(Person.class); // 按年龄降序排序查询记录
对于分页查询,可以使用offset()
和limit()
方法:
List<Person> people = DataSupport.offset(10).limit(20).find(Person.class); // 分页查询记录,从第11条记录开始,每页显示20条记录
对于聚合查询,可以使用count()
,sum()
,average()
,max()
,min()
等方法:
int count = DataSupport.count(Person.class); // 查询记录总数 double sum = DataSupport.sum(Person.class, "age"); // 计算年龄总和 double average = DataSupport.average(Person.class, "age"); // 计算平均年龄 int max = DataSupport.max(Person.class, "age"); // 查询最大年龄 int min = DataSupport.min(Person.class, "age"); // 查询最小年龄
对于原生SQL查询,可以使用raw()
方法:
List<Person> people = DataSupport.raw("select * from person where age > ?", 20).find(Person.class); // 执行原生SQL查询并返回结果集
对于关联查询,可以使用join()
方法:
List<Person> people = DataSupport.join("friend", "contact_id") .on("contacts", "contact_id") .find(Person.class); // 执行关联查询并返回结果集
对于事务操作,可以使用beginTransaction()
,commitTransaction()
,endTransaction()
方法:
LitePal.beginTransaction(); // 开始事务 try { // 执行一系列数据库操作... LitePal.commitTransaction(); // 提交事务 } catch (Exception e) { LitePal.endTransaction(); // 回滚事务 }
对于多数据库管理,可以使用useDatabase()
方法:
LitePal.useDatabase("database1").collection("table1").add("key1", "value1"); // 使用名为database1的数据库中的table1集合添加一条记录 LitePal.useDatabase("database2").collection("table2").add("key2", "value2"); // 使用名为database2的数据库中的table2集合添加另一条记录
以上内容就是解答有关“Android数据库LitePal的基本用法详解”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/629044.html