2011-06-06 59 views
10

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

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

回答

10

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

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

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

4

你可能想看看使用DBMS做一个语句中的检查,即使用SQL EXISTS条件:WHERE EXISTSWHERE NOT EXISTS

2

也许你正在使用的数据库有一个插入或更新功能,它会自动为您解决这个问题。在DB2中,可以使用MERGE INTO作为例子。请参阅here

1

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