最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android开发:Room数据库使用指南-可复制代码
时间:2026-05-31 10:15:01 编辑:袖梨 来源:一聚教程网
Room数据库作为Android开发中的重要组件,为数据持久化提供了便捷高效的解决方案。下面将详细介绍Room数据库的核心实现步骤,包括类创建、数据迁移和具体调用方法。
1、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应用开发的理想选择。
相关文章
- PHP 8.3核心功能解析 05-31
- 胜利女神新的希望外缘行者上线时间是什么时候 05-31
- PiKV:面向混合专家模型的KV缓存并行管理系统 05-31
- 仁王3试玩版流程攻略是什么 05-31
- MaxShapley算法实现生成式搜索公平上下文归因与激励兼容 05-31
- 猫眼电影推荐座位不理想是怎么回事 05-31