繁体   English   中英

JDBC 插入或更新实践

[英]JDBC insert or update practice

如果记录不存在,我需要将记录插入到表中,如果记录存在于表中,我需要更新记录。 当然,我可以写:p-code:

SELECT * FROM table1 WHERE id='abc' by JDBC
if(exists)
   UPDATE table1 SET ... WHERE id='abc' by JDBC;
else
   INSERT INTO table1... by JDBC;

但是,我认为代码并不优雅。 或者,我也可以这样写:p-code:

int row = Statement.executeUpdate("INSERT INTO table1...", 2);
if(row==0)
  update table1 SET ... WHERE id='abc' by JDBC;

您认为后一种方式更好更快吗? 谢谢!

编辑:在 MYSQL

这取决于您使用的数据库类型以及您是否可以利用数据库的特定功能。 例如,MySQL 允许您执行以下操作:

INSERT INTO territories (code, territory) VALUES ('NO', 'Norway')
ON DUPLICATE KEY UPDATE territory = 'Norway'

但是,上述内容不符合标准 (SQL-92)。 也就是说,它很可能不适用于所有数据库。 换句话说,您必须坚持使用您编写的代码。 它可能看起来不那么优雅,但它可能是 go 最安全的解决方案。

您可能希望查看使用 DBMS 在单个语句中进行检查,即使用 SQL EXISTS 条件: WHERE EXISTSWHERE NOT EXISTS

也许您正在使用的数据库具有插入或更新功能,可以自动为您解决这个问题。 例如,在 DB2 中,您可以使用 MERGE INTO。 这里

这可能是切换到流行的 ORM 解决方案(Hibernate、Toplink、iBatis)之一的原因。 这些工具“了解”各种 SQL 方言并相应地优化您的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM