问题标签 [android-room-prepackageddatabase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
27650 浏览

android - 如何将 Room Persistence Library 与预填充的数据库一起使用?

我想将 Room 与预先填充的数据库一起使用,但我不明白如何告诉 Room 在哪里可以找到我的数据库。

我现在把它放进去src/main/assets/databases,当我为 Room 数据库创建实例时,我是这样创建的:

这样,我认为它每次都在创建一个新数据库,或者无论如何,它没有使用预先填充的数据库。

我怎样才能找到我的数据库?

0 投票
7 回答
31432 浏览

android - 如何在首次运行时填充 Android Room 数据库表?

SQLiteOpenHelper一种onCreate(SQLiteDatabase ...)方法,我用来用一些初始数据填充数据库表。

有没有办法在第一次运行应用程序时将一些数据插入到 Room 数据库表中?

0 投票
3 回答
6847 浏览

android - 预打包的数据库存在无效架构错误

我正在基于一个旧的 Android 项目构建一个 Android 应用程序。在我的新应用程序中,我使用的是 Room。我必须使用第一个项目中使用的相同数据库。此外,我使用 com.amitshekhar.android:debug-db 库从第一个项目中提取了数据库。获得数据库文件后,我想用 Room 打开它。

我正在建立这样的数据库:

目前我正在使用这个 createFromAsset() 方法,虽然稍后我会使用 createFromFile() 方法,因为我的数据库应该从服务器下载。

但是我得到了 java.lang.IllegalStateException: Pre-packaged database has an invalid schema 发生这种情况是因为数据库中有几种数据类型在 Room 中不受支持,例如 NVARCHAR(200)、DATE 或 bit。

我知道 Room 只使用了五种 Sql 类型,但我不知道如何更改它,以便 Room 可以使用上述方法打开这种数据库。

问题是如何将 NVARCHAR(200)、DATE 或 bit 转换为 Room 支持的数据类型?

0 投票
1 回答
3467 浏览

android - 如何使用 Room 库中的 createFromAsset 函数?

Room 持久性库版本 2.2.0-alpha01 增加了使用预打包数据库的功能。

https://developer.android.com/jetpack/androidx/releases/room

有人可以提供一个如何初始化房间数据库构建器的例子吗?

0 投票
2 回答
1248 浏览

android - Android - 房间预填充数据库的疑问

我必须在第一次运行时预先填充一个 Room 数据库,我看到了 Florina Muntenescu 关于它的要点。

https://gist.github.com/florina-muntenescu/697e543652b03d3d2a06703f5d6b44b5#pre-populate-a-room-database

所以,我们有...

但我不明白我应该在哪里调用这个 getInstance 方法,我是否需要在我的片段、MainActivity 或其他地方进行一些虚拟 DAO 调用(只是为了填充 DB)?(假设我打算在这个项目中使用 MVVM)。

或者也许我只是疲倦和盲目地看到解决方案......

0 投票
1 回答
521 浏览

java - 如何在房间数据库中预填充数据

我正在通过 Java 教程开发联系人应用程序。我能够将转换转换为 Kotlin,直到我开始遇到 AsyncTask 预填充数据的问题。

我确认我可以从活动向 Room 数据库发送数据,但似乎没有来自预填充的数据。

数据库

主要活动

从上面的代码中,我可以手动将数据填充到数据库中。我在哪里做错了?

0 投票
2 回答
388 浏览

android - createFromAsset 迁移但保留特定列

我有一个测验应用程序,我有一个包含所有问题的数据库,每个问题都有一个列solved,如果答案正确,我会更新,所以我可以用 SQL 过滤,WHERE只显示未解决的问题。现在每隔一段时间我必须纠正问题中的错别字或者可能想添加一些新的错别字,所以

如何在保留solved的同时将资产中的更正数据库 (questions.db) 应用到用户设备上保存的数据库?

我想到并尝试了以下事情但没有成功:

  • 目前,我使用自制的解决方案来替换设备上的数据库(破坏性),但在更新之间保留解决的信息https://github.com/ueen/RoomAsset

  • 将已解决的信息(问题 id 已解决 y/n)放在单独的表中并LEFT JOIN过滤未解决的问题,这只会使问题变得复杂

  • 有一个额外的数据库来解决问题,似乎没有简单的方法来附加两个房间数据库

所以本质上,这可能是对 Room 开发团队的启发,我希望有一个适当的 createFromAsset 迁移策略,能够指定要保留的某些列/表。感谢您迄今为止所做的出色工作,我特别喜欢使用 Android Jetpack 和 Room!另外,我很高兴我可以采用任何解决方法来解决这个问题:)

0 投票
2 回答
294 浏览

java - 为什么数据库为空,当我在 RoomDatabase 中使用 createFromAsset 时。List<> 的大小为 0,但预填充的数据库有 8 个项目

这是我的数据库。

这是我的道

这是我的实体

这是我的 onCreate()

这是我的日志

这是我在资产(SQL2 数据库)中的 words.db SQLSTUDIOIMAGE

我做错了什么?为什么数据库为空?我也尝试方法 getAllWords()。并返回列表的大小。它是 0。

0 投票
1 回答
925 浏览

java - Room.createFromAsset() 每次打开应用程序时都会重写应用程序的数据库

堆栈溢出

我正在尝试在首次安装时从资产数据库初始化我的应用程序的数据库。但是,它可以正常工作,直到应用程序关闭。当我再次打开应用程序时,它会调用 createFromAsset()。据我所知,问题在于我正在获取应用程序数据库的一个实例并用资产数据库重写它。只有在第一次安装应用程序时,我才不会调用 createFromAsset()。

以防万一有实体和DAO的例子

0 投票
1 回答
194 浏览

android - 使用 Room 的 createFromAsset() 在数据库文件之间切换会返回空数据库

我有一个spinner用来在SQLite数据库文件之间切换的。在spinner选择侦听器上,我将相关的数据库文件名传递给 Room 的 Database 类。

在通过调用 Room's 在数据库之间切换之前createFromAsset(),我删除了 Room 的数据库文件以避免之前数据库中的数据缓存。

我的问题是,每当我切换到另一个spinner值时,数据库什么都不返回。从我手机上的应用程序数据中读取数据库文件后,数据库文件就在那里,但表中没有条目。

这是微调器回调:

ViewModel 相关方法

存储库相关方法

房间数据库

listener.onComplete()调用,并且数据库文件具有预期的大小,但表没有数据。