跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Room
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Room = '''Room'''是Android Jetpack组件中的一个持久性库,它为SQLite数据库提供了一个抽象层,使开发者能够更高效地访问数据库,同时保持SQLite的强大功能。Room通过编译时验证SQL查询来减少错误,并支持[[LiveData]]和[[RxJava]]等响应式编程框架。 == 核心组件 == Room由三个主要组件组成: * '''Database''':包含数据库持有者,并作为应用持久化数据的主要访问点 * '''Entity''':表示数据库中的表 * '''DAO''' (Data Access Object):包含用于访问数据库的方法 === 基本用法示例 === 以下是一个简单的Room实现示例: <syntaxhighlight lang="kotlin"> // 定义实体 @Entity data class User( @PrimaryKey val uid: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? ) // 定义DAO接口 @Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) } // 定义数据库类 @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } </syntaxhighlight> == 高级特性 == === 数据库迁移 === 当数据库模式需要更改时,Room提供了迁移机制: <syntaxhighlight lang="kotlin"> val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("ALTER TABLE user ADD COLUMN age INTEGER NOT NULL DEFAULT 0") } } Room.databaseBuilder(context, AppDatabase::class.java, "database-name") .addMigrations(MIGRATION_1_2) .build() </syntaxhighlight> === 与LiveData集成 === Room可以轻松与[[LiveData]]集成,实现数据变化的自动通知: <syntaxhighlight lang="kotlin"> @Dao interface UserDao { @Query("SELECT * FROM user") fun getAllUsers(): LiveData<List<User>> } </syntaxhighlight> == 性能优化 == * 使用事务进行批量操作 * 考虑在IO线程上执行数据库操作 * 使用索引优化查询性能 * 合理设置数据库连接池大小 == 实际应用案例 == 在电商应用中,Room可用于管理以下数据: * 用户个人信息 * 购物车商品 * 浏览历史 * 收藏商品 == 与其他Jetpack组件的整合 == Room可以与以下Jetpack组件无缝协作: * [[ViewModel]] - 在ViewModel中访问数据库 * [[LiveData]] - 观察数据库变化 * [[WorkManager]] - 后台数据库操作 * [[Paging]] - 分页加载数据库数据 == 参见 == * [[SQLite]] * [[Android Jetpack]] * [[数据持久化]] [[Category:Android开发]] [[Category:数据库技术]] [[Category:Jetpack组件]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)