Android开发Room数据库使用(可复制)

1、建立你的room类 更新时要写更新语法

java 复制代码
public class XxxRoom {
    private static final String TAG = "TAG";
    private static volatile XxxRoom instance = null;
    private static final String DB_NAME = "xxx_db";
    private XxxDataBase mXxxDatabase;
    private Context applicationContext;
    //版本更新
    public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE LastSong ADD COLUMN biz_id integer NOT NULL DEFAULT 0");
        }
    };
    public static final Migration MIGRATION_3_4 = new Migration(3, 4) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE LastSong ADD COLUMN biz_topic text");
        }
    };

    public static XxxRoom getInstance() {
        XxxRoom result = instance;
        if (result == null) {
            synchronized (XxxRoom .class) {
                result = instance;
                if (result == null) {
                    instance = result = new XxxRoom();
                }
            }
        }
        return result;
    }

    public void init(Context context) {
        try {
            applicationContext = context.getApplicationContext();
            mXxxDatabase = Room.databaseBuilder(applicationContext, XxxDataBase.class, DB_NAME)
                    .allowMainThreadQueries()
                    .fallbackToDestructiveMigration()//数据库更新时删除数据重新创建
                    .addMigrations(MIGRATION_1_2)
                    .addMigrations(MIGRATION_3_4)
                    .build();
        } catch (Exception exception) {
            DLog.e(TAG, "日志输出------>exception:" + exception);
        }
    }

    public XxxDataBase getXxxDatabase() {
        return mXxxDatabase;
    }


    public Context getApplicationContext() {
        return applicationContext;
    }
}

2、建立你的RoomDatabase类

csharp 复制代码
@Database(entities = {SongProcess.class, LastSong.class, AlbumSong.class,
        LocalSongProcess.class, LocalLastSong.class, LocalAlbumSong.class}, version = 5)
public abstract class XxxDataBase extends RoomDatabase {

    public abstract SongProcessDao getSongProcessDao();

    public abstract LastSongDao getLastSongDao();

    public abstract AlbumSongDao getAlbumSongDao();

    public abstract LocalSongProcessDao getLocalSongProcessDao();

    public abstract LocalLastSongDao getLocalLastSongDao();

    public abstract LocalAlbumSongDao getLocalAlbumSongDao();

}

3、建立bean类

typescript 复制代码
/**
 * 上次播放的歌曲  只有一条数据  给首页播放控制用的
 */
@Entity(tableName = "LastSong")
public class LastSong {

    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo
    private String book_name; //书名

    @ColumnInfo
    private int book_id; //书id

    @ColumnInfo
    private String song_name; //歌曲名

    @ColumnInfo
    private int index; //单元指针

    @ColumnInfo
    private String song_cover; //歌曲封面

    @ColumnInfo
    private String biz_topic; //歌曲专辑主题

    @ColumnInfo
    private int biz_id; //专辑ID

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBook_name() {
        return book_name;
    }

    public void setBook_name(String book_name) {
        this.book_name = book_name;
    }

    public int getBook_id() {
        return book_id;
    }

    public void setBook_id(int book_id) {
        this.book_id = book_id;
    }

    public String getSong_name() {
        return song_name;
    }

    public void setSong_name(String song_name) {
        this.song_name = song_name;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public String getSong_cover() {
        return song_cover;
    }

    public void setSong_cover(String song_cover) {
        this.song_cover = song_cover;
    }

    public int getBiz_id() {
        return biz_id;
    }

    public void setBiz_id(int biz_id) {
        this.biz_id = biz_id;
    }

    public String getBiz_topic() {
        return biz_topic;
    }

    public void setBiz_topic(String biz_topic) {
        this.biz_topic = biz_topic;
    }

    @Override
    public String toString() {
        return "LastSong{" +
                "id=" + id +
                ", book_name='" + book_name + ''' +
                ", book_id=" + book_id +
                ", song_name='" + song_name + ''' +
                ", index=" + index +
                ", song_cover='" + song_cover + ''' +
                ", biz_id='" + biz_id + ''' +
                ", biz_topic='" + biz_topic + ''' +
                '}';
    }
}

4、建立Dao接口类

java 复制代码
@Dao
public interface LastSongDao {
    @Insert
    long insertInfo(LastSong data);

    @Insert
    void insertInfo(LastSong... datas);

    @Update
    void updateInfo(LastSong... datas);

    @Delete
    void deleteInfo(LastSong... datas);

    @Query("SELECT * FROM LastSong  ORDER BY id DESC")
    List<LastSong> getAll(); //获取所有

    @Query("DELETE FROM LastSong")
    void deleteAllInfo(); //删除所有
    
}

5、调用代码

scss 复制代码
//获取上次播放的歌曲
List<LastSong> list = XxxRoom.getInstance().getXxxDatabase().getLastSongDao().getAll();

//删除
XxxRoom.getInstance().getXxxDatabase().getLastSongDao().deleteAllInfo();
相关推荐
晴天1614 小时前
Electron面试题-Day19
java·javascript·electron
GeekZHR14 小时前
C语言指针进阶补充6:动态内存管理、mem系列内存函数、复杂指针声明,一次补齐指针的“三大盲区“
java·c语言·算法·指针
侧耳倾听11114 小时前
java 日志框架简介
java·开发语言
她的男孩15 小时前
我用 LLM 把后台 CRUD 效率提升 10 倍:AI 代码生成器的架构与落地实践
java·后端·架构
土司大王15 小时前
LeetCode hot100——移动零
java·算法·leetcode
thefool11226615 小时前
相同的树`
java
原野池予16 小时前
深入Java集合框架:HashMap源码解析(JDK 8)
java·开发语言
古法安卓16 小时前
Android-Direct Boot 阶段与 getFilesDir() 路径变更问题深度分析
android·java·android studio
-今昭-16 小时前
Logstash 管理
java·服务器·前端
测试运维日常笔记16 小时前
VMware vSphere、ESXi 与 vCenter Server:核心概念与关系详解
java·开发语言