java - sqlite:查找或替换

标签 java sqlite jdbc

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

表定义有 >= 3 列:

  • 自动生成的整数 ID
  • 唯一的 key 字符串(我们称之为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 = ?

我该怎么办?不确定这两种方法是否是原子事务。 (好吧,第一个不是,不确定第二个)


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

最佳答案

使用 PreparedStatement,您可以为插入返回生成的键,因此无需在插入后运行 select 语句来获取键。

为此:

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

关于java - sqlite:查找或替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776506/

相关文章:

java - 将类的方法调用到接口(interface)中

java - KafkaProducer 在应用程序启动时停止,说 "Closing the Kafka producer with timeoutMillis = 30000 ms"

java - 将特定子项获取到 Firebase RecyclerView

iphone - 从 SQLITE 数据库中删除数据的 Objective-C 问题 - 结果代码 5

Java Apache POI 和 JDBC : Smart way to fetch huge amount of data into Excel

java - 在 ResultSet 中搜索特定值方法?

java - 前端实例小时数 Google App Engine

android - Android 中的绑定(bind)数据

android - 如何快速添加新项目到 ListView

java - 如何从 Oracle JDBC PreparedStatement 对象获取绑定(bind)参数的值