room数据库使用以及增加表的使用
依赖
"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 广告*/@Deletevoid deleteAdvert(MyAdvertBean myAdvertBean);/*** 广告保存本地* @param myAdvertBean 广告*/@Insert(onConflict = OnConflictStrategy.REPLACE)void insertAdvert(MyAdvertBean myAdvertBean);/*** 更新本地广告信息* @param myAdvertBean 广告*/@Updatevoid 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) {@Overridepublic 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) {@Overridepublic 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) {@Overridepublic 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) {@Overridepublic 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{@TypeConverterpublic NavconfigBean revert(String data) {try {return GsonUtils.fromJson(data, NavconfigBean.class);} catch (Exception e) {e.printStackTrace();}return null;}@TypeConverterpublic String convert(NavconfigBean data) {return GsonUtils.toJson(data);} }