在Android开发中,前端开发很多情况数据都是从服务器端获取的,使用本地数据库的情况可能不会太常见。有一些需要本地保存的配置数据,也是使用Hawk框架等本地缓存框架进行保存。但是对于如果是一些需要本地保存的,又是大量的数据时,那可能就需要用到Android自己本身的数据库,如果使用本身的框架操作数据库,步骤会比较繁琐。今天介绍的LitePal框架,可以大大减少操作数据库的代码量,也更方便简洁。
LitPal介绍
LitePal是一个开源的Android库,目标是让Android开发者更加方便快捷的进行Android本地数据库的开发。
LitePal 的特性
- 使用对象关系映射(ORM)模式。
- 几乎没有配置(只有一个配置文件和很少的属性)。
- 自动维护所有表。创建、修改或删除表)。
- 多数据库支持。
- 封装api以避免编写SQL语句。
- 非常流畅的查询API。
- 使用SQL的另一种选择,但是比原来的api更简单更好。
LitePal使用
1.引入LitePal库
打开build.gradle文件,编译dependencies 节点,增加implementation 'org.litepal.guolindev:core:3.2.2'
dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' //引入LitePal库 implementation 'org.litepal.guolindev:core:3.2.2'}
2.在assets资源文件夹中增加litepal.xml文件
如果是新建的项目,没有asset文件夹,则需要新建一个。如果是已经存在asset文件夹,则忽略这一步操作。
2-1.找到app文件夹,点右键 New > Folder > Assets Folder
2-2 . 然后点击Finish即可
新建好Assets文件夹后,找到assets 文件夹,右键 New > File
新建一个名为litepal.xml的文件。
然后复制官方的代码到这个文件中即可
<?xml version="1.0" encoding="utf-8"?>
这是唯一的配置文件,属性也很简单。
- dbname 为配置项目的数据库名
- version 为数据库的版本,如果数据库有变化,都要把这个值进行修改喔,不然修改不会起作用的
- list 为数据库的映射类
- storage 配置存储数据库文件的位置
3.配置LitePalApplication
如果是项目中有自己的Application类,就直接在Application类中对LitePal进行初始化即可,
例如
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); LitePal.initialize(this); } ...}
如果不想自己创建一个新的Application类,也可以用框架中提供的org.litepal.LitePalApplication类,修改AndroidManifest.xml文件中的配置
<?xml version="1.0" encoding="utf-8"?>
重点是android:name="org.litepal.LitePalApplication"
4.创建数据库的表
在LitePal中创建数据库的表其实就是创建类
例如我创建了一个User类,其实就是创建了一个User表
public class User extends LitePalSupport { @Column(unique = true) private String account; private String password; private String nickName; private int age; //...忽略set和get方法}
可以通过注释对字段的属性进行配置,例如@Column(unique = true)就是表示这个字段是要唯一,不能重复。
创建好类后,我们需要把这个类添加到LitePal配置文件中
到此我们的数据库配置和建表基本是完成了
5.开始进行对数据进行操作
Activity类
public class MainActivity extends AppCompatActivity { EditText mEtAccount; EditText mEtPassword; EditText mEtNickName; EditText mEtAge; EditText mEtCheckAccount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEtAccount = findViewById(R.id.et_account); mEtPassword = findViewById(R.id.et_password); mEtNickName = findViewById(R.id.et_nick_name); mEtAge = findViewById(R.id.et_age); mEtCheckAccount = findViewById(R.id.et_check_account); } public void onSave(View view) { String account = mEtAccount.getText().toString().trim(); String password = mEtPassword.getText().toString().trim(); String nickName = mEtNickName.getText().toString().trim(); int age = Integer.parseInt(mEtAge.getText().toString().trim()); User user = new User(); user.setAccount(account); user.setPassword(password); user.setNickName(nickName); user.setAge(age); if (user.save()) { Toast.makeText(this, "保存成功", Toast.LENGTH_LONG); } else { Toast.makeText(this, "保存成功", Toast.LENGTH_LONG); } } public void onCheck(View view) { String checkAccount = mEtCheckAccount.getText().toString().trim(); List users = LitePal.where("account=?", checkAccount).find(User.class); if (users != null && users.size() > 0) { Toast.makeText(this, "查询成功,结果:" + users.get(0).toString(), Toast.LENGTH_LONG); } else { Toast.makeText(this, "查询成功,结果为空", Toast.LENGTH_LONG); } }}
布局文件
<?xml version="1.0" encoding="utf-8"?>
保存的效果图
第一次点击保存
第二次点击保存,保存失败是因为我们设置了账号字段是唯一的,保存了之后,再保存同样的账号就无法保存了
查询效果图
到此,我们基本可以使用LitePal对数据进行保存和查询了。LitePal除了这个还提供了很多其他的用法,这个需要我们继续深入探索。