【发布时间】:2011-01-23 21:05:49
【问题描述】:
我想使用 sqlite(使用 Java JDBC,不确定是否重要)向数据库添加或替换新行,并返回自动生成的行 ID,但我不知道该怎么做高效/干净。
表定义有 >= 3 列:
- 自动生成的整数
ID - 唯一的密钥字符串(我们称之为
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。
【问题讨论】:
-
OMG - Java 是一个完全有效的标签。可能有 Java 框架特定的解决方案(例如休眠)。
-
@cyberkiwi:这个问题与 java 无关——完全是 SQL。不会改变您回滚我的编辑以使问题更具可读性的事实。您有权编辑问题 - 开始负责任地使用它并成长。
-
@OMG - 问题指出,我引用
using Java JDBC..replace a new row to a database, and return the autogenerated ID of the row。对此有 Java 框架解决方案。你从哪里得到"not related to Java"位。它可以按原样阅读,除非您无法辨别间隙和两者之间的“或” -
看,感谢 @OMG Ponies 的帮助,但我同意 @cyberkiwi 并且您不必添加额外的格式。这很清楚,恕我直言
-
@cyber:这就是为什么你需要删除我所有的编辑?你在这里只是因为我在。