¿Cómo puedo ejecutar el siguiente SQL de forma escalable usando JdbcTemplate ejecutándose en mySQL. En este caso, los medios escalables:Insertar varias filas usando JdbcTemplate
- Sólo una declaración SQL se ejecuta en el servidor
- funciona para cualquier número de filas.
Aquí está la declaración:
INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")
Supongamos que tengo una lista de POJO de foo
con bar
y campos. Soy consciente de que solo yo podría iterar sobre la lista y ejecutar:
jdbcTemplate.update("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMap)
pero eso no significa no cumple con el primer criterio.
creo que yo también podría ejecutar:
jdbcTemplate.batchUpdate("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMapArray)
pero por lo que puedo decir, que se acaba de compilar el SQL de una vez y ejecutarlo varias veces, en su defecto el primer criterio de nuevo.
La última posibilidad, que parece superar ambos criterios, sería simplemente construir el SQL yo mismo con un StringBuffer
, pero me gustaría evitar eso.
¿Podemos hacer lo mismo usando sólo JDBC? ? –
Esto no tiene nada que ver con JdbcTemplate, o incluso con JDBC. No puede hacer esto en SQL, punto (o SQL estándar, de todos modos), por lo que ciertamente no puede hacerlo en JdbcTemplate. – skaffman
@skaffman: He actualizado mi pregunta para decir que estoy usando mySQL. Tal vez es una función mySQL-only, pero se describe en http://dev.mysql.com/doc/refman/5.1/en/insert.html aproximadamente un cuarto del camino hacia abajo: "Las instrucciones INSERT que usan la sintaxis VALUES pueden insertarse Para hacer esto, incluya varias listas de valores de columna, cada uno entre paréntesis y separados por comas. Ejemplo: " –