我正在使用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\")"
    ]
  }
}

如果我的理解是正确的,那么每次数据库版本更新都会得到这样一个文件,这样您就可以轻松地跟踪数据库的历史记录.

Java相关问答推荐

如何专门保存数据而不显示在jTable中?

基于仅存在于父级中的字段查询子文档?

如何转换Tue Feb 27 2024 16:35:30 GMT +0800 String至ZonedDateTime类型""

缩小画布比例后更改滚动窗格的内部大小

使用标记时,场景大纲不在多个线程上运行

springboot start loge change

Jlink选项&-strie-ative-Commands";的作用是什么?

为什么我要创建一个单独的互斥体/锁对象?

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

格式中的特定回录键-值对

如何为JavaFX Spring Boot应用程序制作Windows/MacOS/Linux安装程序

try 在两个不同数组的数字之间求平均值

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

如何通过gradle命令行从build.gradle获得Java targetCompatibility

在数组中查找素数时出现逻辑错误

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

原始和参数化之间的差异调用orElseGet时可选(供应商)

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别