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

问题描述 投票:0回答:1

这是我的数据库。

@Database(entities = {Word.class}, version = 1, exportSchema = false)
    public abstract  class WordsDatabase extends RoomDatabase {
        private static final String DB_NAME = "words";
        private static WordsDatabase database;
        private  static final Object LOCK = new Object();

        public static WordsDatabase getInstance(Context context) {
        synchronized (LOCK){
            if(database == null) {
                database = Room.databaseBuilder(context,WordsDatabase.class, DB_NAME)
                        .createFromAsset("words.db")
                        .allowMainThreadQueries()
                        .build();
                Log.i("1111", "database was created now");
            } else {
                Log.i("1111", "was already created");
            }}
        return database;
    }
    public abstract WordsDao wordsDao();

这是我的Dao

@Dao
public interface WordsDao {
    @Query("SELECT * FROM pronouns")
    List<Word> getAllWords();
    @Query("SELECT * FROM pronouns WHERE wordRus == :wordRus")
    Word getWordByWord(String wordRus);

这是我的实体

@Entity(tableName = "pronouns")
public class Word {
    @PrimaryKey
    private int position;
    private String wordRus;
    private String wordHin;
    private String wordDev;
    private int progress;

 1 constructor with all fields, getters, setters...

这是我的onCreate()

database = WordsDatabase.getInstance(this);
        Word word = database.wordsDao().getWordByWord("я");
        Log.i("1111", word.getWordRus());

这是我的日志

I/1111: database was created now
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 

'java.lang.String com.vazheninapps.hindipoliglot.data.Word.getWordRus()' on a 

null object reference

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

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

java android sqlite android-room assets
1个回答
0
投票

我找到了答案。首先,我将SQL3改为SQL 2,从设备中删除应用程序并安装应用程序。现在日志是:

java.lang.IllegalStateException: Pre-packaged database has an invalid schema: pronouns
         Expected:
        TableInfo{name='pronouns', columns={progress=Column{name='progress', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
         Found:
        TableInfo{name='pronouns', columns={wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, progress=Column{name='progress', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}

=========

progress=Column{name='progress', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}
progress=Column{name='progress', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}

wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}

position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}
position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}

wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}

wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}

期望和发现的顺序错误,但这并不重要。在预期的NotNull为true且Found Notnull为false的地方进行操作。我所做的全部添加到位置,并在预填充的数据库中显示notNull tr​​ue,以匹配true = true。

© www.soinside.com 2019 - 2024. All rights reserved.