Java JDBC插入或更新实践

Java JDBC插入或更新实践,java,jdbc,insert-update,Java,Jdbc,Insert Update,如果记录不存在,我需要在表中插入一条记录;如果记录存在于表中,我需要更新一条记录。 当然,我可以写: p代码: 然而,我认为代码并不优雅。 或者,我也可以这样写: p代码: 你认为后一种方式更好更快吗?谢谢 编辑:在MYSQL中,您可能希望使用DBMS在一条语句中执行检查,即使用SQL EXISTS条件:存在的地方或不存在的地方可能您正在使用的数据库具有插入或更新功能,可以自动为您解决此问题。例如,在DB2中可以使用MERGE-INTO。请参见这取决于您使用的数据库类型以及是否可以利用特定于数据

如果记录不存在,我需要在表中插入一条记录;如果记录存在于表中,我需要更新一条记录。 当然,我可以写: p代码:

然而,我认为代码并不优雅。 或者,我也可以这样写: p代码:

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


编辑:在MYSQL中,您可能希望使用DBMS在一条语句中执行检查,即使用SQL EXISTS条件:
存在的地方
不存在的地方
可能您正在使用的数据库具有插入或更新功能,可以自动为您解决此问题。例如,在DB2中可以使用MERGE-INTO。请参见

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

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

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

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

int row = Statement.executeUpdate("INSERT INTO table1...", 2);
if(row==0)
  update table1 SET ... WHERE id='abc' by JDBC;
INSERT INTO territories (code, territory) VALUES ('NO', 'Norway')
ON DUPLICATE KEY UPDATE territory = 'Norway'