Android轻松搭建数据库框架 (android 简单数据库框架)
随着移动互联网的迅猛发展,手机应用得到越来越广泛的应用。手机应用在数据存储方面的需求也越来越强烈。而数据库的应用在手机应用中也越来越常见。在Android平台中,SQLite数据库是最常用的数据库。但是原生的SQLite数据库开发比较麻烦,难以维护。本文将介绍如何在Android平台中快速搭建一个数据库框架。
一、最基本的SQLite数据库操作
先来介绍一下SQLite的基本操作,这里只讲解SQLiteDatabase类的方法,其他的不在这里详细说明。
1. 创建数据库
SQLiteDatabase是一个抽象类,不能直接实例化。通过其静态方法openOrCreateDatabase创建或打开一个数据库。
“`
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(“test.db”, null);
“`
这里的“test.db”是数据库的名称,第二个参数是游标工厂。游标在查询时起到的作用非常大,这里不做介绍。执行这行代码后,如果数据库不存在,则创建一个。如果存在则打开。
2. 创建表结构
创建表结构需要使用execSQL方法。这个方法可以执行任何SQL命令。执行时如果出现异常会抛出SQLException异常。下面模拟创建一个表,名字为person,包含属性id和name。
“`
db.execSQL(“create table person(id integer primary key autoincrement, name varchar(20))”);
“`
id是主键,自动递增,name是varchar类型的,长度为20。
3. 插入数据
插入数据使用insert方法,其中之一个参数是表名,第二个字段是空列的默认值,第三个参数是一个ContentValues对象,该对象用来存放要插入的值。ContentValues对象的put方法可以存放各种类型的数据。
“`
ContentValues values = new ContentValues();
values.put(“name”, “张三”);
db.insert(“person”, null, values);
“`
下面写一个批量添加数据的方法:
“`
public void insertBatch(List persons) {
db.beginTransaction();
try {
for (Person person : persons) {
ContentValues values = new ContentValues();
values.put(“name”, person.name);
db.insert(“person”, null, values);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
“`
这里的db.beginTransaction和db.endTransaction是事务的开始和结束,其中db.setTransactionSuccessful是提交事务操作。
4. 查询数据
查询数据操作需要用到query方法。该方法有五个参数:
“`
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
“`
table:表名。
columns:要查询的列名。
selection:where条件。
selectionArgs:where条件中的参数值。
groupBy:分组。
having:分组的筛选条件。
orderBy:排序方式。
比如下面是一个查询person表中所有的数据的方法:
“`
public List queryAll() {
List persons = new ArrayList();
Cursor cursor = db.query(“person”, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
int id = cursor.getInt(cursor.getColumnIndex(“id”));
String name = cursor.getString(cursor.getColumnIndex(“name”));
Person person = new Person(id, name);
persons.add(person);
} while (cursor.moveToNext());
}
cursor.close();
return persons;
}
“`
二、DAO数据库框架搭建
尽管我们已经了解了SQLite数据库的基本操作,但却很难维护。这时候,我们需要使用一类更高级的数据库框架,这就是DAO框架。DAO框架有很多实现框架,比如ORMLite、GreenDAO、Room等。这里我们以GreenDAO为例,来介绍如何使用DAO框架搭建一个可维护的数据库。
1. 创建Android项目
这里就不详细说明了,直接创建一个Android项目即可。
2. 接入GreenDAO库
在build.gradle文件进行配置:
“`
dependencies {
implementation ‘org.greenrobot:greendao:3.2.0’
}
“`
3. 配置GreenDAO
在app的build.gradle文件中添加:
“`
apply plugin: ‘org.greenrobot.greendao’
dependencies {
…
implementation ‘org.greenrobot:greendao-generator:3.2.0’
}
greendao{
schemaVersion 1
targetGenDir ‘src/mn/java’
daoPackage ‘com.example.myapplication.greendao’
generateTests false
generateDebug true
generateRelease true
targetGenDirTests ‘src/mn/java’
daoTemplateDir ‘src/mn/java/templates’
}
“`
配置文件可以支持更复杂的需求。主要需要配置的是:
schemaVersion:数据库的版本号。
targetGenDir:GreenDAO代码生成位置。
daoPackage:DAO实体的包名。
3. 配置GreenDAO后,需要对其进行初始化,使用build生成DAOGenerator文件。
4. 创建DAO实体
创建一个实体,比如下面的Person类。
“`
@Entity
public class Person {
@Id(autoincrement = true)
Long id;
String name;
public Person(Long id, String name) {
this.id = id;
this.name = name;
}
public Person() {
}
//省略getter和setter方法
}
“`
要注意的是:所有在数据库中存储的字段都要定义为属性。
这里需要使用@Entity注解表示一个实体在数据库中是一个表。
@Id为主键注解,其中autoincrement为主键是否自增长的标志。
属性的类型必须是支持数据库存储的类型,例如String类型、int类型等。
5. 创建DAO
创建一个DAO,比如下面的PersonDao类:
“`
public class PersonDao {
private final DaoSession daoSession;
private final PersonDaoImpl dao;
public PersonDao(DaoSession daoSession) {
this.daoSession = daoSession;
this.dao = new PersonDaoImpl(daoSession);
}
public void insert(Person person) {
dao.insert(person);
}
public void deleteAll() {
dao.deleteAll();
}
public List queryAll() {
return dao.queryBuilder().list();
}
}
“`
其中daoSession是在GreenDAO初始化后自动生成的,该类封装了对数据库的操作,对数据库的访问不能直接通过DaoSession,所以我们构建了PersonDao封装了对实现类的操作。
PersonDaoImpl是GreenDAO自动生成的,它是PersonDao操作底层的实现类。
6. 初始化
在MnActivity中初始化GreenDAO,在onCreate方法中进行初始化:
“`
public class MnActivity extends AppCompatActivity {
private PersonDao personDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, “test-db”);
Database db = helper.getWritableDb();
DaoSession daoSession = new DaoMaster(db).newSession();
personDao = daoSession.getPersonDao();
}
}
“`
到这里,一个完整的GreenDAO开发流程就介绍完了。
三、