我想使用 sqlite(使用 Java JDBC,不确定这是否重要)向数据库添加或替换新行,并返回该行的自动生成 ID,但我不确定如何执行此操作高效/干净地。
表定义有 >= 3 列:
- 自动生成的整数
ID
- 唯一的 key 字符串(我们称之为
key
) - 其他元数据
我可以想到两种通用方法:
SELECT ID FROM myTable WHERE key = ?
- 如果没有匹配项,插入一个新行,并重复步骤 #1 以获取自动生成的 ID
或
INSERT OR REPLACE INTO myTable (key, metadata) VALUES (?, ?)
SELECT ID FROM myTable WHERE key = ?
我该怎么办?不确定这两种方法是否是原子事务。 (好吧,第一个不是,不确定第二个)
编辑:我刚刚尝试了 INSERT OR REPLACE 方法,它“有效”,除了它还用新 ID 替换了 ID,这不是我想要发生的事情。我想保留现有 ID。
最佳答案
使用 PreparedStatement,您可以为插入返回生成的键,因此无需在插入后运行 select 语句来获取键。
为此:
- 准备语句时,使用 允许您指定它的方法 返回生成的 key 。
- 在对语句对象运行更新调用“getGeneratedKeys()”之后。
关于java - sqlite:查找或替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776506/