【问题标题】:SQLite Insert or Replace works outside Android but not in the code?SQLite 插入或替换在 Android 之外有效但在代码中无效?
【发布时间】:2013-12-06 19:17:10
【问题描述】:

我有一个类似这样的插入或替换命令:

INSERT or REPLACE INTO author(id,bookId,name) values((SELECT id FROM author WHERE bookId='4'),'4','Book Title')

基本上,如果存在与 bookId 对齐的 id,它会替换一行。如果没有 id 则插入。

我正在使用一个名为“SQLite Database Browser 2.0”的应用程序在我的应用程序中的相同数据库表上测试我的 SQLite 命令(我正在从模拟器中导出数据库)。上面的命令在数据库浏览器中就像一个魅力,但应用程序没有插入或替换(现在它应该插入,因为表是空的)。

我知道我的 SQLite 命令是正确的,并且我的 Logcat 中没有任何错误。

我是否遗漏了 Android 需要执行此命令的部分内容?

【问题讨论】:

  • 如果 bookId 不存在,是否插入值。?
  • 不,它没有插入。我从模拟器中导出了数据库,并从字面上运行了应用程序运行的相同 SQLite 语句并且它可以工作。 (我将每条语句记录到 logcat 中)。
  • 您使用哪个代码来执行此操作,execSQL()rawQuery()?或者您可以发布 sn-p 以在 Android 中插入您的数据吗? (另外,看this
  • 如果它没有给出错误,那么必须插入数据,你确定你已经使用了 beginTranstion 并提交了它。
  • @AndrewT。 - 我正在使用 rawQuery。将其更改为 execSQL 并且可以正常工作。你能提供这个作为答案,以便我选择它吗?

标签: android sqlite


【解决方案1】:

根据问题cmets,问题是rawQuery()只是编译了你传入的SQL,并没有执行。要执行使用 rawQuery() 编译的 SQL,您通常会在返回的 Cursor 上发出 moveTo...() 调用之一。

在这种情况下,要编译和执行 SQL,请使用 execSQL()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-02-11
    • 2019-11-21
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多