2011-06-06 9 views
10

necesito para insertar un registro a la tabla si el registro no existe, y para actualizar un registro si el registro existe en la tabla. Por supuesto, se puede escribir: p-código:JDBC inserción o actualización práctica

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

Sin embargo, no creo que el código es elegante. Alternativamente, también puede escribirlo de esta manera: p-código:

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

¿Cree que esta última forma es mejor y más rápido? ¡Gracias!

EDIT: En MySQL

Respuesta

10

Depende del tipo de base de datos que esté utilizando y de si puede aprovechar o no las características específicas de la base de datos. MySQL, por ejemplo, le permite hacer lo siguiente:

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

Sin embargo, lo anterior no es estándar (SQL-92) compatible. Es decir, es muy probable que no funcione en todas las bases de datos. En otras palabras, tendrías que seguir con el código como lo has escrito. Puede que no se vea tan elegante, pero probablemente sea la solución más segura.

4

Es posible que desee buscar en el uso del DBMS para hacer el cheque dentro de una única instrucción es decir, utilizar el SQL existe una condición: WHERE EXISTS o WHERE NOT EXISTS

2

Tal vez la base de datos que está utilizando tiene un insertar o actualizar función que resuelve esto automáticamente para usted. En DB2 puede usar MERGE INTO por ejemplo. Ver here

1

Esta es probablemente la razón de cambiar a uno de soluciones ORM populares (Hibernate, Toplink, iBatis). Estas herramientas "conocen" varios dialectos de SQL y optimizan sus consultas de forma fraudulenta.

Cuestiones relacionadas