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 广告
     */
    @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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_zxw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值