JDBC插入或更新实践

时间:2011-06-06 13:49:15

标签: java jdbc insert-update

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

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代码:

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

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

编辑:在MYSQL中

4 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

您使用的数据库可能具有插入或更新功能,可以自动为您解决此问题。在DB2中,您可以使用MERGE INTO。见here

答案 3 :(得分:1)

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