Я пытаюсь настроить простую базу данных SQLite в Android, обрабатывая схему через подкласс SQLiteOpenHelper . Однако, когда я запрашиваю свои таблицы, столбцы, которые я вставил, никогда не появляются.
А именно, в методе SQLiteOpenHelper onCreate(SQLiteDatabase db)
я использую db.execSQL()
для выполнения команд CREATE TABLE, затем попробовал и db.execSQL
, и db.insert()
для запуска команд INSERT в только что созданных таблицах. Кажется, это работает нормально, но когда я пытаюсь запросить их, я всегда получаю 0 возвращаемых строк (для отладки выполняемые мной запросы просты SELECT * FROM table
и проверяют курсор getCount()
).
Кто-нибудь сталкивался с чем-то подобным раньше? Эти команды выполняются в командной строке sqlite3. Это те ошибки, которые я пропускаю (например, INSERTS не должен / не должен заканчиваться точкой с запятой, или какая-то проблема, связанная с несколькими таблицами)? Я приложил часть кода ниже.
Спасибо за ваше время и дайте мне знать, если я смогу уточнить.
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE "+ LEVEL_TABLE +" (" +
" "+ _ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
" level TEXT NOT NULL,"+
" rows INTEGER NOT NULL,"+
" cols INTEGER NOT NULL);");
db.execSQL("CREATE TABLE "+ DYNAMICS_TABLE +" (" +
" level_id INTEGER NOT NULL," +
" row INTEGER NOT NULL,"+
" col INTEGER NOT NULL,"+
" type INTEGER NOT NULL);");
db.execSQL("CREATE TABLE "+ SCORE_TABLE +" (" +
" level_id INTEGER NOT NULL," +
" score INTEGER NOT NULL,"+
" date_achieved DATE NOT NULL,"+
" name TEXT NOT NULL);");
this.enterFirstLevel(db);
}
И пример кода вставки, который я сейчас использую, который вызывается в enterFirstLevel()
(некоторые значения жестко запрограммированы, чтобы запустить его ...):
private void insertDynamic(SQLiteDatabase db, int row, int col, int type)
{
ContentValues values = new ContentValues();
values.put("level_id", "1");
values.put("row", Integer.toString(row));
values.put("col", Integer.toString(col));
values.put("type", Integer.toString(type));
db.insertOrThrow(DYNAMICS_TABLE, "col", values);
}
Наконец, код запроса выглядит так:
private Cursor fetchLevelDynamics(int id)
{
SQLiteDatabase db = this.leveldata.getReadableDatabase();
try {
String fetchQuery = "SELECT * FROM " + DYNAMICS_TABLE;
String[] queryArgs = new String[0];
Cursor cursor = db.rawQuery(fetchQuery, queryArgs);
Activity activity = (Activity) this.context;
activity.startManagingCursor(cursor);
return cursor;
}
finally {
db.close();
}
}