Domanda

Voglio inserire molte righe in una tabella che genera automaticamente le chiavi. JDBC non garantisce che ottenere le chiavi generate funzionerà su un aggiornamento batch.

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

Ho due scelte. Inserire ogni riga separatamente e ottenere il Key o fare un inserto batch e quindi interrogare per i tasti.

Per evitare il viaggio di andata e ritorno per interrogare più chiavi, potrei usare questo approccio qui. Avere dichiarazioni EG 5 preparate con dimensioni diverse. E poi rompere la mia "query batch" nella più piccola affermazione possibile.

Qual è il metodo più veloce?

È stato utile?

Soluzione

Dipende.

Non ho numeri se executeBatch() in realtà è più veloce che usare un PreparedStatement ripetutamente, quindi il mio suggerimento è questo:

  1. Prova se getGeneratedKeys() Funziona per il tuo driver JDBC. Se non funziona, gli inserti in lotta non funzionano comunque per te.

  2. Scrivi un caso di prova per entrambi e misura le prestazioni. Questo ti dà dati reali su cui basare la tua decisione. Tutto il resto è solo congetture (e sbagliato il 90% delle volte).

MODIFICARE Se vuoi mantenere la tua app DB Agnostic, aggiungi il test alla tua app ed eseguilo su una tabella temperatura/test. Se il test ha successo, ha scelto un'implementazione che utilizza aggiornamenti batch, altrimenti rientrare alla forza bruta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top