cual es mejor de las dos

hola a todos, espero me puedan colaborar con esta duda que tengo, lo que sucede es que tengo que insertar varios registros en una tabla y he encontrado dos formas de hacer pero no se cual de las dos es mas optima, a continuacion las expongo:

esta es la primera utilizando la funcion batch del jdbctemplate:

nivelEsc.getEspNivel() tiene una cadena de la siguiente forma: "01, 02, 03, 04, 05" por asi decirlo

List<Object[]> batch = new ArrayList<Object[]>();
for (String especialidad : nivelEsc.getEspNivel().split(", ")) {
batch.add(new Object[] { nivelEsc.getCodNivel(), especialidad });
}
sql = "insert into cfgnivel_especialidad set codigo_nivel = ?, codigo_especialidad = ?;";
template.batchUpdate(sql, batch);

la segunda forma es esta:

sql = "insert into cfgnivel_especialidad set codigo_nivel = ?, codigo_especialidad = ?;";

for (String especialidad : nivelEsc.getEspNivel().split(", ")) {
      template.update(sql, nivelEsc.getCodNivel(), especialidad);
 }

le agradezco mucho a la persona que me pueda colaborar..

muchas gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Re: cual es mejor de las dos

La mejor forma es la que haga exactamente lo que necesites. Se parecen mucho los métodos no parece cambiar mucho (según yo).

0_o

A mi parecer...

Que tal hendaviher

Yo no he usado

batchUpdate de JdbcTemplate,

Pero alguna vez usé

executeBatch() de Statement

Me parece que el concepto es el mismo:

Ejecutar varias sentencias de actualización de manera eficiente, cuando lo ocupé actualizaba cientos de registros en tablas y precisamente para esto se usa el batch, para agilizar el proceso.

Por lo que a mi parecer tu primera opción es la óptima, sólo que te recomendaría que hicieras pruebas de tu código, porque me llama la atención que en tu sentencia sql

sql = "insert into cfgnivel_especialidad set codigo_nivel = ?, codigo_especialidad = ?;";

colocaste al final de tu insert el signo de punto y coma (;)

El punto y coma te sirve para separar tus sentencias sql en programas cliente que lanzan consultas de prueba hacia una base de datos,pero dentro de tu código java ya NO es necesario, de hecho cuando lo vayas a montar en un server casi estoy seguro que te lanzará algún error por eso, sólo quítale ese punto y coma.

Saludos.

En principio debería de ser

En principio debería de ser batchUpdate, pero si estas insertando 1- 10 registros quizá no haya mucha diferencia. De todas formas mide el tiempo que se tarda uno y otro y saca tus propias conclusiones. Y nos cuentas! :)

Imagen de ezamudio

La primera

Definitivamente la primera. Incluso sin contexto (porque no ofreces ninguno por cierto), si ese objeto template maneja internamente conexiones a la base de datos, tal parece que batchUpdate hará todos los inserts con la misma conexión, mientras que update podría abrir una conexión, hacer el insert y cerrarla (o devolverla a un pool si hay uno). Pero aunque hubiera un pool de conexiones a BD, update seguramente tendrá que crear un PreparedStatement para cada insert, mientras que batchUpdate puede reutilizar el mismo PreparedStatement para todos los inserts.