Pregunta

Quiero insertar muchas filas en una tabla que genera las teclas automáticamente. JDBC no garantiza que obtener las claves generadas funcione en una actualización por lotes.

It is implementation-defined as to whether getGeneratedKeys will return generated values after invoking the executeBatch method. (JDBC 4.0 Especificación 2006, p. 135).

Tengo dos opciones. Inserte cada fila por separado y obtenga la tecla. O haga un inserto por lotes y luego consulte las teclas.

Para evitar la excursión para consultar múltiples claves, podría usar este enfoque aquí. Con EG 5 declaraciones preparadas con diferentes tamaños. Y luego romper mi "consulta por lotes" en la declaración más pequeña posible.

¿Cuál es el método más rápido?

¿Fue útil?

Solución

Eso depende.

No tengo números si executeBatch() en realidad es más rápido que usar un PreparedStatement repetidamente, entonces mi sugerencia es esta:

  1. Intentar si getGeneratedKeys() Funciona para su controlador JDBC. Si no funciona, los insertos por placas no funcionarán para usted de todos modos.

  2. Escriba un caso de prueba para ambos y mida el rendimiento. Eso le brinda datos reales para basar su decisión. Todo lo demás es solo conjeturas (y el 90% incorrecto del tiempo).

EDITAR Si desea mantener su aplicación DB agnóstico, agregue la prueba a su aplicación y ejecútelo en una tabla de Temp/Prueba. Si la prueba tiene éxito, elija una implementación que utilice actualizaciones por lotes, de lo contrario recurrir a la fuerza bruta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top