​ 因实例化room消耗极大,因此调用room时应使用单例模式。

​ 首先创建一个抽象类继承与RoomDatabase,并在其中指定model文件及数据库版本。

​ 在java中需要加入exportSchema = false,而在kotlin中不用添加

@Database(entities = {LoginInfo.Data.class}, version = 1, exportSchema = false)
public abstract class LoginInfoDatabase extends RoomDatabase {
public abstract LoginInfoDao loginInfoDao();
}

​ 创建一个接口就可以在其中实现增删改查方法,在此接口前需添加@Dao以指定其为数据库的Dao

@Dao
public interface LoginInfoDao {

// 登录时插入保存登录数据
@Insert
void insertLoginInfo(LoginInfo.Data data);

// 获取登录数据
@Query("SELECT * FROM loginData WHERE rowId = 1")
LiveData<LoginInfo.Data> getLoginInfo();

//获取Token
@Query("SELECT token FROM loginData WHERE rowId = 1")
String getToken();

// 退出登录时调用以删除登录数据
@Query("DELETE FROM loginData")
void deleteLoginInfo();

}

​ 接着创建一个单例DBHelper类以获取db对象

public class DBHelper {
private static final DBHelper instance = new DBHelper();
private static final String DATABASE_NAME = "db_cache";

private DBHelper() {
}

public static DBHelper getInstance() {
return instance;
}

private LoginInfoDatabase mLoginInfoDatabase;

public void init(Context context) {
mLoginInfoDatabase = Room.databaseBuilder(context.getApplicationContext(), LoginInfoDatabase.class, DATABASE_NAME)
.allowMainThreadQueries()
.build();
}

public LoginInfoDatabase getDb() {
return mLoginInfoDatabase;
}
}

​ 其中allowMainThreadQueries()为允许room方法运行在主线程,如不添加则在操作room时需要在非主线程上运行。