Java - Insertar en una BD varias consultas al mismo tiemp

 
Vista:

Insertar en una BD varias consultas al mismo tiemp

Publicado por javi (7 intervenciones) el 07/03/2008 12:56:32
Hola, me gustaría saber si alguien sabe como puedo en java ejecutar varias consultas de inserción con una sola llamada.El código que uso es el siguiente

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
conexion = DriverManager.getConnection(CONNECTION_URL, DB_USER, DB_PASSWORD);
s = conexion.createStatement();
s.executeUpdate(sentencia);

Siendo sentencia lo siguiente
INSERT INTO Purchase(price_purchase,date_purchase,payment_purchase,login_client) VALUES (120.2,SYSDATE(),'contraReemoblos','i12merej');
INSERT INTO PurchaseArticle(SELECT LAST_INSERT_ID(),'6',1);
INSERT INTO PurchaseArticle(SELECT LAST_INSERT_ID(),'11',1);
INSERT INTO PurchaseArticle(SELECT LAST_INSERT_ID(),'1',3);

y me da fallo, mientras que si hago la sentencia anterior en mysql, no a través de java, sino a través de su editor de SQL si me va bien.

Alguien sabe como puedo hacerlo?

Muchas gracias de antemano y un saludo

Javier Mejías
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Insertar en una BD varias consultas al mismo ti

Publicado por Franklin Gamboa (21 intervenciones) el 07/03/2008 16:41:24
Claro que va a dar error, por que para el JDBC esas 4 inserts los v aa ver como uno y a compilar como uno.

Yo lo que haría si realmente ocupas que sea en un llamado es hacer un SP (Stored Procedure) que haga ese insert y que reciba los parámetros a insertar, entonces sólo haces un llamado desde la aplicación java; pero si puedes hacer varios [ s.executeUpdate(sentencia); ] y le cambias el valor a sentencia conforme vaya haciendo los inserts de tu sentencia, es una alternativa viable y a mi gusto mucho mejor que el SP.

Si definitivamente estas dos opciones no son viables, contestá este post diciendo por que para poder buscar una alternativa mas viable a tus reglas de negocio.

Espero haberte ayudado.

Saludos ,

Franklin Gamboa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar en una BD varias consultas al mismo ti

Publicado por javi (7 intervenciones) el 08/03/2008 19:02:15
Hola.
Lo primero de todo darte las gracias por preocuparte.
El problema que tengo es que a partir de la primera sentencia las otras consultas hacen uso de la función LAST_INSERT_ID() que devuelve el último id generado automaticamente por el SGBD, es decir un AUTO INCREMENT, y me tengo que asegurar que no va a devolver un id que no sea el correcto, por lo que entre la primera sentencia y la ultima tengo que asegurarme que siempre devuelva el mismo id y que ningún otor usuario haga una inserción en la tabla, es decir, la exclusión mutua.
Me han dicho que una solución podría ser mediante la utilización de transacciones, pero no se bien como hacerlo, si me pudieras ayudar te lo agradecería.

Muchas gracias

Un saludo
Javier Mejías
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar