android官方架构room,Android 架构 -- Room

本文介绍了如何在Android应用中使用官方架构组件Room构建数据库,包括添加依赖、创建Model对象和DAO接口,以及数据库的升级迁移操作。示例展示了如何进行插入、查询和删除数据的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

room

// add for room

implementation "android.arch.persistence.room:runtime:1.1.1"

// room 配合 RxJava

implementation "android.arch.persistence.room:rxjava2:1.1.1"

annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

// RxJava

implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

implementation 'io.reactivex.rxjava2:rxjava:2.1.3'

model对象:

import android.arch.persistence.room.Entity;

import android.arch.persistence.room.PrimaryKey;

@Entity

public class User {

// 用 @ColumnInfo 来标明数据库表的列名, 用 @PrimaryKey 来标示 主键

@PrimaryKey(autoGenerate = true)

private long uid;

private String name;

private String address;

private String phone;

private Integer age;

public long getUid() {

return uid;

}

public void setUid(long uid) {

this.uid = uid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "User{" + "uid=" + uid + ", name='" + name + '\'' + ", address='" + address + '\'' + ", phone='" + phone + '\'' + ", age=" +

age + '}';

}

}

相对应的DAO类:

import android.arch.persistence.room.Dao;

import android.arch.persistence.room.Insert;

import android.arch.persistence.room.OnConflictStrategy;

import android.arch.persistence.room.Query;

import java.util.List;

import io.reactivex.Flowable;

@Dao

public interface UserDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)

List insert(User... users);

@Query("SELECT * from user")

Flowable> loadUser();

@Delete

void delete(User user);

}

当准备好所有的 Model 和 DAO 后,我们就需要把它放入 DataBase 的管理中:

import android.arch.persistence.room.Database;

import android.arch.persistence.room.RoomDatabase;

import android.arch.persistence.room.TypeConverters;

import com.tuacy.room.database.daos.BookDao;

import com.tuacy.room.database.daos.UserDao;

import com.tuacy.room.database.entities.Book;

import com.tuacy.room.database.entities.User;

@Database(entities = {User.class}, version = 3)

@TypeConverters({Converters.class})

public abstract class AppDatabase extends RoomDatabase {

public abstract UserDao userDao();

}

Converters.java为时间转换的类:

public class Converters {

@TypeConverter

public static Date fromTimestamp(Long value) {

return value == null ? null : new Date(value);

}

@TypeConverter

public static Long dateToTimestamp(Date date) {

return date == null ? null : date.getTime();

}

}

Room数据库数据库升级:

import android.app.Application;

import android.arch.persistence.db.SupportSQLiteDatabase;

import android.arch.persistence.room.Room;

import android.arch.persistence.room.migration.Migration;

public class AppApplication extends Application {

private AppDatabase mAppDatabase;

@Override

public void onCreate() {

super.onCreate();

mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db")

.allowMainThreadQueries()

.addMigrations(MIGRATION_1_2, MIGRATION_2_3)

.build();

}

public AppDatabase getAppDatabase() {

return mAppDatabase;

}

/**

* 数据库版本 1->2 user表格新增了age列

*/

static final Migration MIGRATION_1_2 = new Migration(1, 2) {

@Override

public void migrate(SupportSQLiteDatabase database) {

database.execSQL("ALTER TABLE User ADD COLUMN age integer");

}

};

/**

* 数据库版本 2->3 新增book表格

*/

static final Migration MIGRATION_2_3 = new Migration(2, 3) {

@Override

public void migrate(SupportSQLiteDatabase database) {

database.execSQL(

"CREATE TABLE IF NOT EXISTS `book` (`uid` INTEGER PRIMARY KEY autoincrement, `name` TEXT , `userId` INTEGER, 'time' INTEGER)");

}

};

}

操作数据库:

1,首先获取AppDatabase对象:

AppDatabase mAppDatabase = ((AppApplication)getApplication()).getAppDatabase();

2,新增操作:

User user = new User();

user.setPhone("18988195061");

user.setAddress("珠海");

user.setName("tuacy");

// user.setAge("28");

List ids = mAppDatabase.userDao().insert(user);

3,查询操作:

mAppDatabase.userDao()

.loadUser()

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Consumer>() {

@Override

public void accept(List entities) {

if (entities != null) {

for (User user : entities) {

Log.d("tuacy", user.toString());

}

}

}

});

4,删除操作:

findViewById(R.id.button_delete_user).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

User user = new User();

user.setPhone("18320770932");

user.setAddress("深圳");

user.setName("soyoungboy");

user.setUid(5);

UserDao userDao = mAppDatabase.userDao();

userDao.delete(user);

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值