gpt4 book ai didi

android - Gotchas INSERTing into SQLite on Android?

转载 作者:行者123 更新时间:2023-11-29 00:50:53 25 4
gpt4 key购买 nike

我正在尝试在 Android 中设置一个简单的 SQLite 数据库,通过 SQLiteOpenHelper 的子类处理模式.但是,当我查询我的表时,我认为我插入的列从未出现过。

即,在 SQLiteOpenHelper 的 onCreate(SQLiteDatabase db) 方法中,我使用 db.execSQL() 运行 CREATE TABLE 命令,然后尝试了两个 db。 execSQLdb.insert() 在我刚刚创建的表上运行 INSERT 命令。这似乎运行良好,但是当我尝试查询它们时,我总是返回 0 行(为了调试,我正在运行的查询很简单 SELECT * FROM table 并检查 Cursor 的 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();
}
}

最佳答案

弄清楚了,这是一些不同的事情。首先,查询代码:Cursor 只能导航打开的数据库。所以上面的查询方法会返回一个Cursor,然后在finally block 中关闭数据库。

虽然它无法正常运行,但如果在关闭的数据库下运行,游标将不会抛出错误。它只会说它返回了 0 行(这就是为什么我认为错误出在 INSERT 代码中)。

另外,我忘记了一些 SQL 的东西,即 rowcol 不是表字段的好名字,我能够摆脱一些错误通过将它们重命名为 row_numcol_num

关于android - Gotchas INSERTing into SQLite on Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com