【问题标题】:Android SQLite query not returning data after insert插入后Android SQLite查询不返回数据
【发布时间】:2023-03-03 01:22:01
【问题描述】:

我正在尝试向 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 调用返回一个游标(非空),但它是空的。

我通过 ADB 验证记录已插入。我什至通过 ADB shell 通过 sqlite3 运行了这个精确的查询,并且该项目已按预期插入并返回。我还尝试在另一个 rawQuery 调用中删除选择并检索项目,但这也不起作用。

有人知道会发生什么吗? 我正在通过一个单元测试运行此代码,该单元测试在每次测试运行期间创建和销毁数据库。

【问题讨论】:

    标签: android select sqlite insert


    【解决方案1】:

    rawQuery 仅用于 SELECT 语句。
    对于 INSERT、DELETE 和 UPDATE,您必须改用 execSQL

    因此,首先您必须使用 execSQL 进行 INSERT,然后使用 rawQuery 进行 SELECT。

    如果你问为什么...
    SELECT 是 QUERY,而 INSERT、DELETE 和 UPDATE 是命令。

    【讨论】:

    • 非常感谢 Klaus66!我将 rawQuery 解释为可以运行任何脚本的调用。现在我知道了,再次感谢。
    • 我想象过... ;) 现在,你能帮个忙吗?您能否将我的答案标记为已接受?非常感谢,谢谢。
    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多