sqlite:lookup-or-replace

时间:2011-01-23 21:05:50

标签: java sqlite jdbc

我想使用sqlite(使用Java JDBC,不确定是否重要)向数据库添加或替换新行,并返回行的自动生成ID,我不知道如何执行此操作有效/干净。

表定义有> = 3列:

  • 自动生成的整数ID
  • 唯一键字符串(我们称之为key
  • 其他元数据

我可以想到两种一般方法:

  1. SELECT ID FROM myTable WHERE key = ?
  2. 如果没有匹配项,请插入新行,然后重复步骤#1以获取自动生成的ID
    1. INSERT OR REPLACE INTO myTable (key, metadata) VALUES (?, ?)
    2. SELECT ID FROM myTable WHERE key = ?
    3. 我该怎么办?不确定两种方法是否都是原子事务。 (好吧,第一个不是,不确定第二个)


      编辑:我刚刚尝试了INSERT OR REPLACE方法,并且“工作”,除了它还用新的ID替换ID,这不是我想要发生的。我想保留现有的ID。

2 个答案:

答案 0 :(得分:2)

使用PreparedStatement可以返回生成的插入键,这样就不需要在插入后运行select语句来获取密钥。

要做到这一点:

  • 准备语句时,请使用 允许您指定它的方法 返回生成的密钥。
  • 在语句对象上运行更新调用“getGeneratedKeys()”。

答案 1 :(得分:1)

有一个SQLITE函数用于获取最后插入的自动ID

SELECT last_insert_rowid()

不确定它是否适用于更新