簡體   English   中英

預填充房間數據庫會引發錯誤 - 架構似乎是錯誤的

[英]Prepopulating room database throws error - Schema seems to be wrong

我嘗試在我的 Android 應用程序中預填充數據庫,但出現以下錯誤:

 java.lang.IllegalStateException: Pre-packaged database has an invalid schema: Animal(com.example.application.db.Animal).
 Expected:
TableInfo{name='Animal', columns={gender=Column{name='gender', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
 Found:
TableInfo{name='Animal', columns={gender=Column{name='gender', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}

我真的不明白這是什么問題,它似乎是完全相同的。

這是代碼中拋出錯誤的地方,當將 db 模式與它嘗試插入的條目進行比較時:

  @Override
  protected RoomOpenHelper.ValidationResult onValidateSchema(SupportSQLiteDatabase _db) {
    final HashMap<String, TableInfo.Column> _columnsAnimal = new HashMap<String, TableInfo.Column>(2);
    _columnsAnimal.put("gender", new TableInfo.Column("gender", "TEXT", false, 0, null, TableInfo.CREATED_FROM_ENTITY));
    _columnsAnimal.put("name", new TableInfo.Column("name", "TEXT", true, 1, null, TableInfo.CREATED_FROM_ENTITY));
    final HashSet<TableInfo.ForeignKey> _foreignKeysAnimal = new HashSet<TableInfo.ForeignKey>(0);
    final HashSet<TableInfo.Index> _indicesAnimal = new HashSet<TableInfo.Index>(0);
    final TableInfo _infoAnimal = new TableInfo("Animal", _columnsAnimal, _foreignKeysAnimal, _indicesAnimal);
    final TableInfo _existingAnimal = TableInfo.read(_db, "Animal");
    if (! _infoAnimal.equals(_existingAnimal)) {  <<<<<<<<<this goes wrong, see next picture
      return new RoomOpenHelper.ValidationResult(false, "Animal(com.johndoes.animalsounds.db.Animal).\n"
              + " Expected:\n" + _infoAnimal + "\n"
              + " Found:\n" + _existingAnimal);
    }

拋出圖像的位置

這是我的實體 class:

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "Animal")
public class Animal {

@ColumnInfo(name = "gender")
public final String gender;

@PrimaryKey
@NonNull
@ColumnInfo(name = "name")
public final String name;


public Animal(@NonNull String  name, String gender) {
    this.name = name;
    this.gender = gender;
}
}

這是創建我要預加載的 sqlite 表的 SQL :

CREATE TABLE "Animal" (
"name"  TEXT,
"gender"    TEXT,
PRIMARY KEY("name")
);

任何想法將不勝感激,謝謝。

據我了解,您說您的主鍵是名稱,但它絕對是錯誤的,即使您將其定義為文本,數據庫中的文本數據類型始終可以為nullable ,您應該定義一個長數據類型作為您的表 ID,並將其添加primary key和還從動物名稱中刪除 not null 屬性。

在您的sqlite添加"name" TEXT NOT NULL

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM