Question

Je veux insérer beaucoup de lignes dans une table qui génère les clés automatiquement. JDBC ne garantit pas que la remise des clés générées fonctionnera sur une mise à jour batch.

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

J'ai deux choix. Insérez chaque ligne séparément et obtenir le key.Or faire une insertion de lot puis requête pour les touches.

Pour éviter déclenchement rond pour interroger plusieurs clés que je pourrais utiliser cette approche ici . Ayant par exemple 5 préparé des déclarations de différentes tailles. Et puis briser ma « requête de traitement par lots » dans la plus petite déclaration possible.

Quelle est la méthode plus rapide?

Était-ce utile?

La solution

Cela dépend.

Je n'ai pas le nombre si executeBatch() est plus rapide que d'utiliser un PreparedStatement à plusieurs reprises, donc ma suggestion est la suivante:

  1. Essayez si fonctionne getGeneratedKeys() pour votre pilote JDBC. Si elle ne fonctionne pas, les inserts ne fonctionnera pas par lots pour vous de toute façon.

  2. Ecrire un test pour les deux et mesurer la performance. Cela vous donne des données réelles pour fonder votre décision sur. Tout le reste est juste devinettes (et le mal 90% du temps).

[EDIT] Si vous voulez garder votre application db agnostique, ajoutez le test à votre application et l'exécuter sur une table temp / test. Si le test réussit, a choisi une mise en œuvre que les utilisations mises à jour par lots, sinon revenir à la force brute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top