Les différentes modalités d'exécution de l'instruction bulk insert dans la base de données à partir d'une application java
Je suis à la recherche de façons différentes pour procéder à l'instruction bulk insert dans la base de données (par exemple, SQL Server 2012) à partir d'une application Java. J'ai besoin d'insérer beaucoup d'entités dans la base de données de manière très efficace sans faire autant d'appels à la base de données qu'il y a des entités.
Mon exigence est d'effectuer une insertion en bloc d'entités, d'où l'insertion de l'entité dans la base de données qui pourrait impliquer l'insertion de données dans une ou plusieurs tables. Voici les deux façons dont je peux penser:
-
Générer dynamiquement un lot d'instructions SQL et de l'exécuter sur la base de données par les indigènes charge JDBC.
-
Construire une représentation XML de toutes les entités, puis appeler une procédure stockée en passant par le XML généré. La procédure stockée qui prend soin de l'analyse du XML et de l'insertion des entités de la base de données.
Je suis nouveau sur Java et de ne pas avoir assez de connaissance de la disposition des cadres. L'OMI, les deux approches ci-dessus semble être très naïf et ne pas tirer parti de la disposition des cadres. Je demande des experts à partager sur les différents moyens de parvenir à l'insertion en bloc, avec ses avantages et ses inconvénients. Je suis ouvert à MyBatis, Printemps-MyBatis, Printemps-JDBC JDBC, etc qui résout le problème d'une manière efficace.
Grâce.
- Vous pouvez essayer de l'exécution du lot, comme indiqué dans l'exemple de code
demo
posté dans une des réponses, et voir si cela fonctionne assez rapide pour vous. - Oui, bien sûr.
Vous devez vous connecter pour publier un commentaire.
J'ai un démo ,JDBC traitement par lots
file:demo.txt
Le contenu
1899942 ,demo1
1899944 ,demo2
1899946 ,demo3
1899948 ,demo4
Insérer les données de lit le contenu du fichier
mon code:
Parler pour la première fois, j'espère que je peux aider
Je suis la démo ci-dessus l'utilisation PreparedStatement [Lire les données des appels d'un PreparedStatement one-off insérer]
JDBC lot Il y a 3 façons
1.utilisation PreparedStatement
démonstration:
2.Instruction d'utilisation.addBatch méthodes
démonstration:
3.L'utilisation directe de la Déclaration
démonstration:
À l'aide de la méthode ci-dessus, Insérer l'100000 morceaux de données de Temps:
méthode 1:17.844 s
méthode 2:18.421 s
méthode 3:16.359 s
MS JDBC versions plus tard 4.1 ont SQLServerBulkCopy classe que je suppose est équivalente à l'un de disponible en .Net et, théoriquement, il devrait fonctionner aussi vite que bcp utilitaire de ligne de commande.
https://msdn.microsoft.com/en-us/library/mt221490%28v=sql.110%29.aspx
vous pouvez personnalisé votre code avec JDBC,il n'y a pas de cadre de soutien à votre exigence