我想在Android中設置一個簡單的SQLite數據庫,通過SQLiteOpenHelper的子類來處理模式。但是,當我查詢我的表格時,我認爲插入的列從不存在。Gotchas在Android上插入SQLite?
也就是說,在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();
}
}
雖然這WASN擺脫了一些錯誤的從技術上講,答案(我找到了,並將其作爲問題的單獨答案寫出來),我讚賞調試提示,希望標記爲已回答的問題,併爲您提供信譽點。感謝您的幫助^ _^ – 2010-04-21 18:35:16
不客氣。很高興我能幫上忙。 – 2010-04-21 20:58:24