android开发也知道,用原生的数据库开发代码量多,特别麻烦。不过,目前google已经有自己的数据库框架Room了,现在写下自己使用Room框架的一些心得体会。
官方介绍:
The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite
Room持久型类库在SQLite的基础上提供了一个抽象层,方便大家流利的访问数据库,并且包含了SQLite的所有功能。很强大呀。。。
一、导入项目步骤:
1、添加仓库:我们需要在项目的build.gradle中添加google()仓库
allprojects {
repositories {
jcenter()
//添加google
google()
}
}
2、在主app的module中添加依赖
def room_version = "1.1.1"
support.room = "android.arch.persistence.room:runtime:$room_version"
support.room_compiler = "android.arch.persistence.room:compiler:$room_version" // use kapt for Kotlin
support.room_rxjava2 = "android.arch.persistence.room:rxjava2:$room_version"//和rxJava2结合使用
support.room_guava = "android.arch.persistence.room:guava:$room_version"
support.room_test = "android.arch.persistence.room:testing:$room_version"//添加测试支持,我们可以对数据库进行androidTest
二、使用Room
Room 涉及到的概念有三点:
Entity:具体的bean实体,会与数据库表column进行映射
Dao:数据库访问对象,实现具体的增删改查。
RoomDatabase:提供直接访问底层数据库实现,我们应该从里面拿到具体的Dao,进行数据库操作。
根据以上三点可以去开发了,具体实例可以参考以下过程:
1、ProxyHttp (Entity实例,对应表中各个列名)
/**
* 创建与数据库column映射的bean实体
* entity声明定义,并且指定了映射数据表名
*/
@Entity(tableName = "proxyHttp")
public class ProxyHttp {
//设置主键,并且定义自增
@PrimaryKey(autoGenerate = true)
public int id;
public String http;
public String name;
public int point;
public long upTime;
//必须指定一个构造方法,room框架需要。并且只能指定一个,如果有其他构造方法,则其他的构造方法必须添加@Ignore注解
public ProxyHttp() {
}
@Ignore
public ProxyHttp(String http, String name, int point) {
this.http = http;
this.name = name;
this.point = point;
}
@Ignore
public ProxyHttp(String http, String name) {
this.http = http;
this.name = name;
}
}
2、ProxyHttpDao (Dao数据库具体增删改查操作)
/**
* 配置具体的Dao
*/
@Dao
public interface ProxyHttpDao {
//onConflictStrategy.REPLACE表示如果已经有数据,那么就覆盖掉
@Insert(onConflict = REPLACE)
void insert(ProxyHttp http);
//查找最新的更新时间为默认的选择地址
@Query("SELECT * FROM proxyHttp ORDER BY upTime DESC")
LiveData nowLive();
//查找最新的更新时间为默认的选择地址
@Query("SELECT * FROM proxyHttp ORDER BY upTime DESC")
ProxyHttp now();
//查询所有服务器地址
@Query("SELECT * FROM proxyHttp")
ProxyHttp[] all();
//更新某一个服务器地址
@Update()
int update(ProxyHttp http);
//删除所有服务器地址列表数据
@Delete
int deleteAll(List list);
}
3、BaseDatabase
/**
* 表映射实体数据,以及数据库版本号
*/
@Database(entities = {ProxyHttp.class}, version = 1)
public abstract class BaseDatabase extends RoomDatabase {
public abstract ProxyHttpDao ProxyHttpDao();
}
通过这三个步骤,已经可以使用room数据库来进行增删改查操作,不过使用之前,先调用这个方法:
BaseDatabase database = Room.databaseBuilder(getBaseContext(), BaseDatabase.class, "basis_dependencies.db")
.build();
创建数据库成功。
再通过
database .ProxyHttpDao().now();//等其他方法
来进行一些数据库操作。。。
好了,以上就是Room数据库基本的增删改查,相信大家应该都掌握了。
三、数据库升级
当然,数据库不是一成不变的,我们有时候还需要进行版本的升级操作。
首先修改@Database ,修改升级信息:
/**
* 表映射实体数据,以及数据库版本号
*/
@Database(entities = {ProxyHttp.class}, version = 2)
public abstract class BaseDatabase extends RoomDatabase {
public abstract ProxyHttpDao ProxyHttpDao();
public static final Migration MIGRATION_1_2 = new Migration(1, 2) {//参数1:这个数据库开始版本号, 参数2:当前更新后版本号
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER table proxyHttp ADD COLUMN proxyHttp TEXT NOT NULL DEFAULT 'https'");
}
};
}
其次就是创建数据库,添加该Migration对象:
database = Room.databaseBuilder(getBaseContext(), BaseDatabase.class, "basis_dependencies.db")
//添加数据库变动迁移
.addMigrations(BaseDatabase.MIGRATION_1_2 )
.build();
ok啦,数据库版本很简单就升级了。。。
是不是觉得很强大,很好用。。。