Bonjour à tous,
Je rencontre actuellement un problème avec des lignes de commandes dos... En gros, j'ai fait 3 scripts SQL :
1 qui modifie la structure de la table T1 (exemple : ajout de prenom à la table [nom])
1 qui crée une deuxième table T2 d'audit pour savoir qui a touché à la première (exemple : [nom, prenom, action, date, utilisateur])
1 qui crée des triggers pour que T2 se remplisse automatiquement à partir de T1
Je les exécute en ligne de commande, avec isql. Quand je les exécute directement d'après une ligne de commande dos (Exécuter > cmd), les scripts marchent nickel. Par contre quand je les fais exécuter par Java, on dirait qu'il les appelle dans le désordre...
En gros quand il essaye de faire le trigger, il met "invalid column prenom"... Comme s'il essayait de l'exécuter avant les autres...
Voici le code de ma fonction qui exécute :
Je me demandais s'il fallait que je rajoute quelque chose genre wait() pour être sur que la première commande a fini de s'exécuter avant de passer à la suivante, etc ?
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 private static void execCmd(String[] args, String dirname, String sep) { try { final Process ps = Runtime.getRuntime().exec(args); new Thread() { public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(ps.getInputStream())); try { while((ligne = reader.readLine()) != null) { } } finally { reader.close(); } } catch(IOException ioe) { ioe.printStackTrace(); } } }.start(); // Consommation de la sortie d'erreur de l'application externe dans un Thread separe new Thread() { public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(ps.getErrorStream())); try { while((reader.readLine()) != null) { // Traitement du flux d'erreur de l'application si besoin est } } finally { reader.close(); } } catch(IOException ioe) { ioe.printStackTrace(); } } }.start(); } catch (FileNotFoundException e) { logger.error("Unable to find the script file : "+e); } catch (IOException e) { logger.error("Unable to read the script file : "+e); } }
Avez-vous une idée svp ?
Partager