我正在使用Android数据库组件室
我已经配置了所有东西,但当我编译时,Android Studio给了我以下警告:
未向批注处理器提供架构导出目录,因此 我们无法导出架构.您可以提供
room.schemaLocation
批注处理器参数或集合 将exportSchema设置为false.
据我所知,这是数据库文件的位置
它如何影响我的应用程序?这里的最佳实践是什么?我应该使用默认位置(false
值)吗?
我正在使用Android数据库组件室
我已经配置了所有东西,但当我编译时,Android Studio给了我以下警告:
未向批注处理器提供架构导出目录,因此 我们无法导出架构.您可以提供
room.schemaLocation
批注处理器参数或集合 将exportSchema设置为false.
据我所知,这是数据库文件的位置
它如何影响我的应用程序?这里的最佳实践是什么?我应该使用默认位置(false
值)吗?
根据docs:
您可以设置注释处理器参数(room.schemaLocation)来告诉room将架构导出到文件夹中.尽管这不是强制性的,但在代码库中有版本历史记录是一种很好的做法,您应该将该文件提交到版本控制系统中(但不要将其与应用程序一起提供!).
因此,如果您不需要判断模式,并且希望消除警告,只需在RoomDatabase
中添加exportSchema = false
,如下所示.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
如果您关注下面的@mikejones Guy answer,您将遵循文档中提到的良好实践:).
基本上,您将在您的../app/schemas/
文件夹中获得一个.json
文件.
它看起来像这样:
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "53db508c5248423325bd5393a1c88c03",
"entities": [
{
"tableName": "sms_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER"
},
{
"fieldPath": "message",
"columnName": "message",
"affinity": "TEXT"
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "INTEGER"
},
{
"fieldPath": "clientId",
"columnName": "client_id",
"affinity": "INTEGER"
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [],
"foreignKeys": []
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")"
]
}
}
如果我的理解是正确的,那么每次数据库版本更新都会得到这样一个文件,这样您就可以轻松地跟踪数据库的历史记录.