2009-05-21 6 views
0

Quelqu'un pourrait-il s'il vous plaît suggérer une meilleure conception pour le scénario suivant:conception d'un scénario

Il y a beaucoup de chiffres dans un fichier, le fichier ressemble un peu:

-1100 
-1101 
-1102 
-1103 
-1104  
- 
- 
- 
- 
-To 9999 
  • Concevoir et développer un programme en JDBC qui va lire tous les numéros du fichier et insérer dans une table à la base de données.

Note: Je ne veux pas lire le fichier mille fois et insérer le feu mille fois la déclaration.

+0

Pourquoi pas? Il résout le problème, la lecture d'un fichier texte 1000 fois n'est pas tellement de travail (tant que vous gardez le fichier ouvert) et autant que je sache, vous ne pouvez pas faire des insertions en vrac dans une table de base de données sauf si vous insérez une autre table de base de données. – Sekhat

+0

Je voulais juste vérifier avec d'autres s'ils ont de très bonnes idées pour concevoir/développer ce genre de scénarios. S'il vous plaît laissez votre suggestion si vous en avez. –

Répondre

1

algorithme:

  • Utilisez un BufferedFileReader pour lire la ligne de fichiers en ligne.
  • Faites une déclaration préparée avec l'insertion dont vous avez besoin.
  • Pour chaque ligne, liez le paramètre de l'instruction préparée avec l'analyseur de données du fichier. Execute
  • utilisez executeBatch toutes les x lignes ou plus pour faire les insertions.

  • profit!

+0

Donnez du sens à monsieur, quelque chose de rapide et de solution optimisée si vous pouvez y penser? –

+0

Si j'avais le temps je l'aurais posté la morue réelle :-(Il est assez facile de le faire.Il suffit de chercher des exemples de code de BufferedFileReader, PreparedStatement et executeBatch et vous serez en mesure de le faire. –

1

Ne pouvez-vous pas utiliser un chargeur de masse? Voici un exemple pour Sql Server:

BULK 

INSERT BulkTest 

FROM ‘c:\file.txt’ 

WITH 

(

ROWTERMINATOR = ‘\n’ 

) 

GO

Voici une autre option, au moins avec Sql Server 2008, insérez plusieurs lignes avec 1 déclaration:

Insert into table(id, country) 
Values 
(1,‘USA’), –-Row 1 
(2,‘UK’), –-Row 2 
(3,‘France’) –-Row 3