【问题标题】:how can we get the id of a row that we insert through code我们如何获取通过代码插入的行的 id
【发布时间】:2019-04-21 07:36:40
【问题描述】:

我需要检索刚才插入的行的 id。即,我有一个单词表和一个含义表。我需要我在单词表中插入的单词的 wordId,并且该 wordId 用于在含义表中插入含义。谁能帮帮我??

我认为我可以使用触发器并尝试了触发器:

“如果不存在 word_insert_trigger 则创建触发器 AFTER INSERT ON tb_words BEGIN select NEW.word_id from tb_words; END;”

像这样。我在 sqlite dbbrowser 中试过这个。但它没有成功。

当我插入这样的行时,我需要行 ID:"insert into tb_words(word_name) values('test');"

如何在不使用“SELECT last_insert_rowid()”的情况下做到这一点?就像在下面的链接中: How to retrieve the last autoincremented ID from a SQLite table?

【问题讨论】:

  • Android sqlite 绑定不提供sqlite3_last_insert_rowid() 的包装器吗?
  • @SamiKuhmonen 我已经看到了那个答案,实际上我想要一个除此之外的答案。这就是为什么我再次在这里问这个问题
  • 你能解释一下为什么你想要其他答案而不是有效的答案吗?
  • 对不起,实际上这是一个思维错误,我认为如果我们一次输入两个单词,我们只会得到最后一个单词的 id。但我忘了这是我们的本地数据库,我们不能在这里一次输入两个单词。我不应该提到 SQLite,如果我们通过 api 直接插入到服务器,我们就不能使用那个答案。存在一次两行的问题。

标签: android mysql sqlite


【解决方案1】:

不需要触发器。使用 SQliteDatabase insert 方法。它返回 id(作为 long)(更准确地说,它返回 rowid 并假设 word_id 列已被定义为 rowid 列的别名,则返回值将是分配给 word_id 列的值)。

如果 word_id INTEGER PRIMARY KEY 被编码,则定义 rowid 列的别名(可以使用 AUTOINCREMENT 键,但通常不应使用)。

您不妨阅读SQLite AUTOINCREMENT 和/或Rowid Tables

而不是类似的东西:-

db.execsql("insert into tb_words(word_name) values('test');");

你会使用类似的东西:-

ContentValues cv = new ContentValues();
cv.put("word_name","test");
long word_id = db.insert("tb_words",null,cv);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2011-07-24
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    相关资源
    最近更新 更多