WDDatabase.java 5.72 KB
package com.wd.room.database;

import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;
import com.wd.room.dao.ChannelDao;
import com.wd.room.dao.CornersAdvDao;
import com.wd.room.dao.DraftsDao;
import com.wd.room.dao.HistoryLocalDao;
import com.wd.room.dao.LaunchAdDao;
import com.wd.room.dao.MailBookingLiveDao;
import com.wd.room.dao.MailMessageDao;
import com.wd.room.dao.ReadContentDao;
import com.wd.room.dao.SearchHistoryDao;
import com.wd.room.dao.SubscribeLivingDao;
import com.wd.room.dao.UserDao;
import com.wd.room.entity.ChannelBean;
import com.wd.room.entity.CornersAdvModel;
import com.wd.room.entity.LaunchAdModel;
import com.wd.room.entity.MailBookingliveModel;
import com.wd.room.entity.HistoryLocalModel;
import com.wd.room.entity.MailMessageModel;
import com.wd.room.entity.ReadContentModel;
import com.wd.room.entity.SearchHistoryModel;
import com.wd.room.entity.SubscribeLivingModel;
import com.wd.room.entity.UserEntity;
import com.wd.room.entity.publish.DraftsModel;

/**
 * WDDatabase
 *
 * @author baozhaoxin
 * @version [V1.0.0, 2023/3/18]
 * @since V1.0.0
 */

@Database(entities = {UserEntity.class, HistoryLocalModel.class,SearchHistoryModel.class,
        MailMessageModel.class, MailBookingliveModel.class, ChannelBean.class, DraftsModel.class,
        SubscribeLivingModel.class, CornersAdvModel.class, LaunchAdModel.class, ReadContentModel.class},
        version = 15, exportSchema = false)
public abstract class WDDatabase extends RoomDatabase {

    public static WDDatabase instance;

    /**
     * 数据库名字
     */
    private static final String DATABASE_NAME = "people_china_db";

    /**
     * 示例版本号5->6
     */
    private static final Migration MIGRATION_5_6 = new Migration(5, 6) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            //新增草稿表格
            database.execSQL("CREATE TABLE IF NOT EXISTS 'tb_drafts' ('id'  INTEGER NOT NULL," +
                    "'keys' TEXT," +
                    "'isSelect' INTEGER NOT NULL DEFAULT 0," +
                    "'userId' TEXT," +
                    "'title' TEXT," +
                    "'saveTime' INTEGER NOT NULL DEFAULT 0," +
                    "'type' TEXT," +
                    "'coverPath' TEXT," +
                    "'videoDuration' TEXT," +
                    "'fileData' TEXT," +
                    " PRIMARY KEY ('keys')) ");
        }
    };
    /**
     * 示例版本号4->5,如此升级数据不会丢失
     */
    private static final Migration MIGRATION_10_11 = new Migration(10, 11) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            //创建示例
            database.execSQL("ALTER TABLE tb_channelentity"
                    + " ADD COLUMN iconUrlSize TEXT");
        }
    };
    /**
     * 草稿箱增加字段 13->14
     */
    private static final Migration MIGRATION_13_14 = new Migration(13, 14) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            //增加字段
            database.execSQL("ALTER TABLE tb_drafts"
                    + " ADD COLUMN firstPublishTime TEXT");
        }
    };

    /**
     * 频道ChannelBean增加字段 14->15
     */
    private static final Migration MIGRATION_14_15 = new Migration(14, 15) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            //增加字段
            database.execSQL("ALTER TABLE tb_channelentity"
                    + " ADD COLUMN channelStrategy INTEGER NOT NULL DEFAULT 0");
        }
    };

    public static WDDatabase getInstance(Context context){
        if (instance == null) {
            synchronized (WDDatabase.class) {
                if (instance == null) {
                    //使用Migration升级策略进行升级
                    instance = Room.databaseBuilder(context.getApplicationContext(), WDDatabase.class, DATABASE_NAME)
                            .fallbackToDestructiveMigration()//没有匹配到升级策略时候,重建数据表,防止出现异常
                            // MIGRATION添加到这里 数据库升级,升级版本号增加的内容,以逗号隔开,放在括号后面 addMigrations(MIGRATION_1_2,MIGRATION_2_3)
                            .addMigrations(MIGRATION_13_14)
                            .addMigrations(MIGRATION_14_15)
                            .allowMainThreadQueries()
                            .build();
                }
            }
        }
        return instance;
    }


    /**
     * 用户信息
     * @return
     */
    public abstract UserDao userDao();

    /**
     * 历史记录
     * @return
     */
    public abstract HistoryLocalDao getHistoryDao();


    /**
     * 搜索记录
     * @return
     */
    public abstract SearchHistoryDao getSearchDao();

    /**
     * 缓存数据
     * @return
     */
    public abstract MailMessageDao getMailMessageDao();

    /**
     * 缓存数据
     * @return
     */
    public abstract MailBookingLiveDao getMailBookingLiveDao();


    public abstract ChannelDao getChannelDao();

    /**
     * 草稿箱
     * @return
     */
    public abstract DraftsDao getDraftsDao();

    /**
     * 我的预约直播列表中直播中状态缓存数据
     * @return
     */
    public abstract SubscribeLivingDao getSubscribeLivingDao();

    /**
     * 挂角广告展示过的缓存数据
     * @return
     */
    public abstract CornersAdvDao getCornersAdvDao();

    /**
     * 开机屏广告展示过的缓存数据
     * @return
     */
    public abstract LaunchAdDao getLaunchAdDao();

    public abstract ReadContentDao getReadContentDao();
}