[Android] Room DataBase
1、配置依赖包
// Room
def room_version = "1.1.0"
api "android.arch.persistence.room:runtime:$room_version"
api("android.arch.persistence.room:compiler:$room_version") {
exclude group: 'com.google.code.gson'
}
2、继承RoomDatabase
@android.arch.persistence.room.Database(
entities = {
PosUserT.class,
},
version = 1)
@TypeConverters(DateConverter.class)
public abstract class Database extends RoomDatabase {
private static volatile Database INSTANCE;
public abstract UserDao userDao();
// static final Migration MIGRATION_1_2 = new Migration(1, 2) {
// @Override
// public void migrate(SupportSQLiteDatabase mDatabase) {
// mDatabase.execSQL("ALTER TABLE DIS_SHOP_REMOVE_GOODS_T "
// + " ADD COLUMN OPER_GOODS_TYPE VARCHAR");
// }
// };
public static Database getInstance(Context context) {
if (INSTANCE == null) {
synchronized (Database.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), Database.class, "retail.db")
.allowMainThreadQueries()
.build();
// INSTANCE = Room.databaseBuilder(context.getApplicationContext(), Database.class, "retail.db")
// .addMigrations(MIGRATION_1_2).build();
}
}
}
return INSTANCE;
}
}
allowMainThreadQueries()
方法可以设置在UI线程操作数据库
addMigrations()
数据库版本升级
3、建表
@Entity(tableName = "pos_user_t")
public class PosUserT {
@NonNull
@PrimaryKey()
@ColumnInfo(name = "user_id")
@SerializedName(value = "userid" , alternate = {"user_id",})
public String userId;
...
}
4、自定义DAO接口
@Dao
public interface UserDao extends BaseDao {
@Query("SELECT user_password FROM pos_user_t WHERE user_code = :userCode")
String queryPasswordByUserCode(String userCode);
@Query("DELETE FROM pos_user_t WHERE user_code = :userCode")
int deleteByUserCode(String userCode);
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(PosUserT user);
@Insert(onConflict = OnConflictStrategy.REPLACE)
long[] insert(List<PosUserT> users);
@Query("DELETE FROM pos_user_t")
int deleteAll();
...
}
5、使用
Database.getInstance(context).getUserDao().insert();