一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Android开发:Room数据库使用指南-可复制代码

时间:2026-05-31 10:15:01 编辑:袖梨 来源:一聚教程网

Room数据库作为Android开发中的重要组件,为数据持久化提供了便捷高效的解决方案。下面将详细介绍Room数据库的核心实现步骤,包括类创建、数据迁移和具体调用方法。

1、Room类实现与数据迁移

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

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类定义

@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、实体类创建

/**
 * 上次播放的歌曲  只有一条数据  给首页播放控制用的
 */
@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接口设计

@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 getAll(); //获取所有    @Query("DELETE FROM LastSong")
    void deleteAllInfo(); //删除所有
    
}

5、数据库操作示例

//获取上次播放的歌曲
List list = XxxRoom.getInstance().getXxxDatabase().getLastSongDao().getAll();//删除
XxxRoom.getInstance().getXxxDatabase().getLastSongDao().deleteAllInfo();

通过以上五个关键步骤,我们完整实现了Room数据库的核心功能,包括数据表创建、版本迁移以及增删改查操作。这套方案既保证了数据存储的可靠性,又提供了灵活的扩展机制,是Android应用开发的理想选择。

热门栏目