我正在尝试将数据插入到SQLite数据库表中,然后立即从同一调用中的select返回结果,但不返回任何数据。
这是SQL语句:
INSERT INTO Items (Name, DefaultExpirationIntervalId) VALUES ('Item', -1);
SELECT ItemId as '_id', Name, DefaultExpirationIntervalId FROM Items WHERE Name = 'Item';
以下是进行SQL调用的代码:
Boolean isReadOnly = getSQLiteDatabase().isReadOnly();
// Make sure we can add data to the database
if (!isReadOnly)
{
// Add the item to the database and then use the result to create a new item
Cursor cursor = getSQLiteDatabase().rawQuery(query, null);
if (null != cursor)
{
cursor.moveToFirst();
if (!cursor.isAfterLast())
item = new Item(cursor);
}
}
rawQuery调用返回一个游标(不是null),但它是空的。
我通过亚行证实已插入记录。我甚至通过ADB shell通过sqlite3运行这个确切的查询,并插入项目并按预期返回。我也尝试删除select并在另一个rawQuery调用中检索该项,但这也无效。
有人知道可能会发生什么吗? 我通过在每次测试运行期间创建和销毁数据库的单元测试来运行此代码。
答案 0 :(得分:2)
rawQuery 仅用于 SELECT 语句 对于 INSERT,DELETE和UPDATE ,您必须使用 execSQL 而不是
因此,首先必须使用execSQL进行INSERT,然后使用rawQuery作为SELECT。
如果你问为什么......
SELECT是QUERY,而INSERT,DELETE和UPDATE是COMMANDS。