#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 и выше.