IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

lancer sql loader dans un programme java


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut lancer sql loader dans un programme java
    Bonjour à tous !

    Je développe une application java batch, qui doit entre autre appeler un autre programme, sql loader, pour remplir une table à l'aide d'un fichier de données en entré.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Runtime runtime = Runtime.getRuntime();
     
    		String[] exec = new String[] {
    				"sqlldr.exe",
    				"userid=" + Main.user + "@" + Main.baseInstance + "/"
    						+ Main.motDePasse,
    				"control=../conf/control.txt",
    				"log=../log/sqlloaderLog.log",
    				"bad=../log/sqlloaderBad.log",
    				"discard=../log/sqlloaderDiscard.log",
    				"data="
    						+ nomFichierCasia };
     
    		try {
    			Process process = runtime.exec(exec);
    			process.waitFor();
    			logger.log(Level.INFO, "un certain nombre a été chargé ... ");
    			System.out.println("un certain nombre a été chargé ... ");
    		} catch (IOException e) {
     
    		} catch (InterruptedException e) {
     
    		}
    Quand je lance ce programme, avec un fichier de donné relativement petit, c'est à dire à peu près 100 lignes, il n'y a pas de problème, la table se charge.

    Mais lorsque le fichier de données est plus conséquent, à peu près 800 lignes, le programme se bloque à la ligne process.waitFor(); et je suis obligé d'arréter le processus.

    Par ailleurs, si je lance sql loader seul, avec le même gros fichier de données, il n'y a pas de problème, la table se charge en quelques secondes.

    Ce qui est bizarre, c'est que quand le programme se bloque, je vais voir dans la table qui doit se charger, et il y a effectivement 318 lignes qui ont déjà été chargées. Ce nombre est invariable avec le temps.

    Lorsque j'arrête le processus JAVA, ce nombre s'élève instantanément à 754, c'est à dire qu'en fait toutes les données sont chargées à ce moment là.

    J'espère que je me suis bien fait comprendre, je crois que j'ai oublié de faire quelque chose vers la ligne process.waitFor();

    Donc le problème c'est que le programme se bloque, et ne peut se terminer correctement.

    Je vous remercie de vos conseils, et vous souhaite une bonne journée.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faut toujours traiter tous les flux d'entrée/sorties des programmes lancés depuis Java !

    Dans le pire des cas si tu veux les ignorer il faut les fermer...

    Un peu de lecture :


    a++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    Nickel, merci des infos.

  4. #4
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'ai le même soucis! et je ne vois pas comment résoudre le problème !!
    Merci pour votre aide,

  5. #5
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Voilà une autre façon pour lancer SQL loader et qui marche très bien, je me suis insprier du script de la partie "Using the process builder" de la page suivante :
    http://www.rgagnon.com/javadetails/java-0014.html

    Le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    String[] exec = new String[] {"sqlldr","facture/bismilah","control=c:\\users\\Ilias\\desktop\\Version1\\controle\\Fichier_Controle_Fcontrole.txt"
    					};// il est possible de rajouter les autres argument de la commande ..
    					ProcessBuilder builder = new ProcessBuilder(exec);
    					Map<String, String> environ = builder.environment();
    					builder.directory(new File(System.getenv("temp")));
     
    					System.out.println("Directory : " + System.getenv("temp") );
    					final Process process = builder.start();
    					InputStream is = process.getInputStream();
    					InputStreamReader isr = new InputStreamReader(is);
    					BufferedReader br = new BufferedReader(isr);
    					String line;
    					while ((line = br.readLine()) != null) {}
    					System.out.println("Program terminated!");
    Voilà, et bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler sql loader dans un script perl
    Par k6971 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 14h58
  2. [Debutant]jouer un son midi dans un programme Java
    Par Ghurdyl dans le forum Multimédia
    Réponses: 2
    Dernier message: 14/12/2006, 17h57
  3. SQL Dynamique dans un programme cobol
    Par genio dans le forum DB2
    Réponses: 14
    Dernier message: 04/12/2006, 11h23
  4. DataSource dans un programme java
    Par soumou dans le forum JDBC
    Réponses: 1
    Dernier message: 28/11/2006, 11h44
  5. Réponses: 5
    Dernier message: 16/03/2006, 00h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo