【问题标题】:How to get last inserted row id from sqlite in phonegap android如何从phonegap android中的sqlite获取最后插入的行ID
【发布时间】:2013-10-24 09:53:57
【问题描述】:

我正在创建一个在表中插入数据的应用程序。在表中插入数据后,我想获取该行的 id,以便我可以根据它进行进一步的操作。 我尝试使用 sqlite 的 last_insert_rowid() 功能,但没有运气。 任何人都可以告诉哪个是获取最后插入的行ID的最佳方法。 任何想法都值得赞赏。 提前致谢。

【问题讨论】:

  • last_insert_rowid() 应该有效。你的插入通过了吗?
  • 希望您使用正确的查询 SELECT last_insert_rowid()。不要包含表名
  • 我可能会以错误的方式使用它,你能给我一个例子以及如何将结果传递给变量。

标签: cordova android-sqlite lastinsertid


【解决方案1】:

您的表中有名为 rowid、oid 或 _rowid_ 的列吗?如果这样做,那将导致last_insert_rowid() 按预期工作出现问题。见here

解决方法: 如果您有一个自动递增的 ID 列,您可以使用以下 SQL 获取最后一个条目。

SELECT * FROM yourTable ORDER BY yourIdColumn DESC LIMIT 1

这很hacky,但它会工作。

【讨论】:

  • 如果您还从数据库中删除记录,这将不起作用。新记录采用已删除记录的 id
【解决方案2】:

您可以像这样在表上获取最后插入的 id -

tx.executeSql("INSERT INTO profile('name','label','list_order','category') values(?,?,?,?)", 
    [currentProfile.name, currentProfile.label, currentProfile.list_order, currentProfile.category], 
    function(tx, results){
        var lastInsertId = results.insertId; // this is the id of the insert just performed
    }, 
    failCB
)

WebSQL 中的results.insertId 类似于 MySQL 中的mysql_insert_id() -

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());

【讨论】:

  • 正是我想要的。你可能知道我怎样才能从这个结果集中获取我刚刚插入的行数据。
  • @Neil 在上面的示例中,您可以引用currentProfile 对象。我想在你的情况下你可能有这个循环。在这种情况下,您可以将 tx.executeSql 包装在闭包内,以便它保持 currentProfile 对象的范围。
  • 很遗憾没有。就我而言,它不在for循环中。但数据是从所有文本框对象中检索的。问题是大约有 20 个。并且希望有一种简单的方法来获取一个资源对象,该资源对象已经从结果集中设置了所有属性。因为我将成功事件中创建的对象传递给查看页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2014-09-10
  • 1970-01-01
  • 2019-11-21
  • 2019-05-28
  • 1970-01-01
相关资源
最近更新 更多