【发布时间】:2010-04-05 05:30:34
【问题描述】:
我正在尝试在 Android 中设置一个简单的 SQLite 数据库,通过 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();
}
}
【问题讨论】: