Почему я продолжаю получать образ диска базы данных с неправильной формой в Android studio

#java #android #sqlite

Вопрос:

Я продолжаю получать изображение диска базы данных с неправильной формой, когда пытаюсь получить сведения из второй таблицы, добавленной в мою базу данных SQL в Android studio. Вот фрагмент кода для таблиц

 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
 

Ответ №1:

Оказывается, ошибка возникает только тогда, когда я запрашиваю базу данных SQLite с помощью командной строки из терминала в Android studio.

Запросы к данным просто прекрасны, когда я использую инспектор баз данных в Android studio, который возвращает данные во второй таблице без ошибок.

ПРИМЕЧАНИЕ: Инспектор базы данных может использоваться только с вашим приложением, работающим в эмуляторе, который поддерживает Android API 26 и выше.