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();
相关推荐
大波V57 小时前
claude-code cli 跳过登录
java·服务器·前端
小江的记录本7 小时前
【Kafka核心】Kafka 3.0+ KRaft模式(替代ZooKeeper)核心原理与优势
java·数据库·分布式·后端·zookeeper·kafka·rabbitmq
Refrain_zc7 小时前
Android开发在线音频播放器之章节二页面PlayActivity
java
Dicky-_-zhang7 小时前
分布式锁实战:Redis与ZooKeeper对比选型与实现方案
java·jvm
Refrain_zc7 小时前
Android 应用内的APK 安装(可复制)
java
杨运交7 小时前
[020][缓存模块]基于 BeanCreator 的缓存管理器创建器模式设计与实践
java·spring·缓存
risc1234567 小时前
DocumentsWriterDeleteQueue 的核心设计思想
java·全文检索·lucene
风味蘑菇干8 小时前
Stream基础题目
java·算法
2501_932750268 小时前
Java反射机制基础入门
java·开发语言