依赖
"androidx.room:room-runtime:2.2.6" "androidx.room:room-compiler:2.2.6"
1.实体类
实体类需要保存到数据库的新类用@Entity注解表示
tableName是数据库中表的名字,my_advert可以根据自己需要自定义
@PrimaryKey,@NonNull主键不能为空
@Entity(tableName = "my_advert") public class MyAdvertBean { /** * 素材id, */ @PrimaryKey @NonNull private String moduleId; /** * 广告日期,一天一重置 */ private String date; /** * 存储广告的 */ private String message; @NonNull public String getModuleId() { return moduleId; } public void setModuleId(@NonNull String moduleId) { this.moduleId = moduleId; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2.定义数据库增删改查
关键注解:@Insert增,@Delete删,@Update改,@Query查
@Dao
public interface MyAdvertDao {
/**
* 根据id查询保存的广告
* @param moduleId 模块id
* @return
*/
@Query("select * from my_advert where moduleId = :moduleId LIMIT 1")
MyAdvertBean queryMyAdvert(String moduleId);
/**
* 删除本地广告
* @param myAdvertBean 广告
*/
@Delete
void deleteAdvert(MyAdvertBean myAdvertBean);
/**
* 广告保存本地
* @param myAdvertBean 广告
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAdvert(MyAdvertBean myAdvertBean);
/**
* 更新本地广告信息
* @param myAdvertBean 广告
*/
@Update
void updateAdvert(MyAdvertBean myAdvertBean);
}
3.数据库升级等操作Base,继承RoomDataBase
@Database注解用来标注数据库中有哪几张表,自己新加的MyAdvertBean加入里面 ,然后version增加版本1,从5到6
@TypeConverters是用来list数据存储
数据库版本原来是5,我需要插入新的表,执行MIGRATION_5_6,版本需要加1
@Database(entities = {UserEntity.class, BrowseRecordEntity.class, MyAdvertBean.class}, version = 6)
@TypeConverters({BaseObjDataConvert.class})
public abstract class UserDatabase extends BaseDatabase {
public abstract UserDao getUserDao();
public abstract BrowseRecordDao getRecordDao();
public abstract MyAdvertDao getMyAdvertDao();
private static UserDatabase instance;
public static UserDatabase getInstance() {
if (instance == null) {
synchronized (UserDatabase.class) {
if (instance == null) {
instance = Room.databaseBuilder(Utils.getApp(), UserDatabase.class, "shandian")
.addMigrations(MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5,MIGRATION_5_6)
.allowMainThreadQueries().build();
}
}
}
return instance;
}
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("alter table user add column sex TEXT");
database.execSQL("alter table user add column birthday TEXT");
database.execSQL("alter table user add column signature TEXT");
database.execSQL("alter table user add column totalScore Text");
database.execSQL("alter table user add column score Text");
}
};
static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS browse_record (type TEXT, articleId TEXT PRIMARY KEY NOT NULL,opentype TEXT," +
"param TEXT,title TEXT,publish_at_time INTEGER NOT NULL DEFAULT 0)");
}
};
static final Migration MIGRATION_4_5 = new Migration(4, 5) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("alter table browse_record add column browse_time INTEGER NOT NULL DEFAULT 0");
}
};
/**
* 广告数据库表
*/
static final Migration MIGRATION_5_6 = new Migration(5, 6) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS my_advert (date TEXT, moduleId TEXT PRIMARY KEY NOT NULL,message TEXT)");
}
};
}
public class BaseObjDataConvert{
@TypeConverter
public NavconfigBean revert(String data) {
try {
return GsonUtils.fromJson(data, NavconfigBean.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@TypeConverter
public String convert(NavconfigBean data) {
return GsonUtils.toJson(data);
}
}
该文展示了如何使用AndroidXRoom库进行数据库操作,包括实体类的定义,如@Entity和@PrimaryKey注解,以及@Dao接口中的@Insert、@Delete、@Update和@Query方法。此外,还详细说明了如何处理数据库版本升级,例如创建Migration来添加新表。
2567

被折叠的 条评论
为什么被折叠?



