首页 > 解决方案 > 为什么我不断获取数据库磁盘映像在 android studio 上格式错误

问题描述

当我尝试从添加到我在 android studio 上的 SQL 数据库中的第二个表中获取详细信息时,我不断获取数据库磁盘映像格式错误。这是表格的代码片段

public static final class CourseInfoEntry implements BaseColumns {
        public static final String TABLE_NAME = "course_info";
        public static final String COLUMN_COURSE_ID = "course_id";
        public static final String COLUMN_COURSE_TITLE = "course_title";

        public static final String SQL_CREATE_TABLE =
                "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY, " + COLUMN_COURSE_ID + " TEXT NOT NULL UNIQUE, " + COLUMN_COURSE_TITLE + " TEXT NOT NULL)";
    }
    
    
public static final class NoteInfoEntry implements BaseColumns {
        //Constant for the table name
        public static final String TABLE_NAME = "note_info";
        //Constant for the table columns
        public static final String COLUMN_COURSE_ID = "course_id";
        public static final String COLUMN_NOTE_TITLE = "note_title";
        public static final String COLUMN_NOTE_TEXT = "note_text";

        //Constant to create the note info table
        public static final String SQL_CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY, " +
                        COLUMN_NOTE_TITLE + " TEXT NOT NULL, " +
                        COLUMN_NOTE_TEXT + " TEXT, " +
                        COLUMN_COURSE_ID + " TEXT NOT NULL)";

    }

这是从 SQLiteOpenHelper 类创建表的代码

    public static final String DATABASE_NAME = "NoteKeeper.db";
    public static final int DATABASE_VERSION = 1;
    public NoteKeeperOpenHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    
    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(NoteKeeperDatabaseContract.CourseInfoEntry.SQL_CREATE_TABLE);
        db.execSQL(NoteKeeperDatabaseContract.NoteInfoEntry.SQL_CREATE_TABLE);

        //Adding data to the tables
        DatabaseDataWorker worker = new DatabaseDataWorker(db);
        worker.insertCourses();
        worker.insertSampleNotes();



    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

当我在终端中使用 select * from course_id 检查第一个表的数据时,我得到了这个

sqlite> select * from course_info;
1|android_intents|Android Programming with Intents
2|android_async|Android Async Programming and Services
3|java_lang|Java Fundamentals: The Java Language
4|java_core|Java Fundamentals: The Core Platform

但是当我检查第二张表的数据时,我得到了这个

sqlite> select * from note_info;
Error: database disk image is malformed

标签: javaandroidsqlite

解决方案


事实证明,只有当我在 Android Studio 的终端中使用命令行查询 SQLite 数据库时才会发生错误。

当我在 android studio 中使用数据库检查器时,数据查询很好,它返回第二个表中的数据而没有错误。

注意:Database Inspector 只能用于在支持 Android API 26 及更高版本的模拟器中运行的应用程序。


推荐阅读