如果记录不存在,我需要在表中插入记录,如果表中存在记录,则需要更新记录。 当然,我可以写: 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中
答案 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 EXISTS
或WHERE NOT EXISTS
答案 2 :(得分:2)
您使用的数据库可能具有插入或更新功能,可以自动为您解决此问题。在DB2中,您可以使用MERGE INTO。见here
答案 3 :(得分:1)
这可能是切换到流行的ORM解决方案之一(Hibernate,Toplink,iBatis)的原因。这些工具“知道”各种SQL方言并且可以优化您的查询。