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

Langage Java Discussion :

[shell] Execution script sql et JAVA


Sujet :

Langage Java

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut [shell] Execution script sql et JAVA
    Bonjour,

    Je voudrais pourvoir créer des bases de données à la demande de l'utilisateur et j'ai pour cela un fichier .sql qui contient les tables que la base de données doit contenir.

    J'ai essayé la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("mysql -hlocalhost -uroot -ptest test < C:\createTable.sql)"
    Mais cela ne fonctionne pas...

    J'utilise déjà la fonction exec() pour faire un dump et je trouve aussi des problèmes dès que je veux utiliser "<" ou ">" on dirait...

    Quelqu'un pourrait-il m'aider ? N'y a-t-il pas un moyen de lire un script avec une connexion JDBC par hasard ?

    Et enfin dernière question, est-ce que, selon vous, je peux créer la base en même temps dans le script sachant que le nom de cette base sera donnée par l'utilisateur ?

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Au pire tu parses ton fichier selon les points virgules et tu exécutes les requètes à l'affilée, ça doit pas être la mort tout de même
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    C'est une solution mais vu que le serveur est distant et que le fichier se trouve sur le même serveur que la base mysql, je voudrais lire directement le fichier comme ca on garderaiun temps de traitement assez faible, plutot que d'effectuer les 30 requêtes à la suite apres avoir téléchargé le fichier sur le serveur etc...

    Mais au pire il y a cette solution en effet.

    Quelqu'un aurait une autre idée ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Personne n'a d'autres solutions à me proposer ?

  5. #5
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    plutot que de passer une String en paramète du exec, essais de passer un tableau de Strings. J'ai eu il y a peu un problème similaire ou une redirection ne fonctionnais pas.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String [] maCommande={"mysql","-hlocalhost","-uroot","-ptest test","<","C:\createTable.sql"};
    Runtime.getRuntime().exec(maCommande);
    EDIT, ce sont des virugules et non des points-virgule pour séparer les éléments

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    merci pour ta réponse mais le fichier n'est toujours pas pris en compte par mysql ... je vais bientot attaquer cette partie donc je vais faire comme l'a suggérer sinok je pense...

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Sinon il y a une erreur dans ta commande, pour mettre le caractère '\' dans une chaine de caractères, il faut passer par le caractère d'échappement '\', il faut donc le doubler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String [] maCommande={"mysql","-hlocalhost","-uroot","-ptest test","<","C:\\createTable.sql"};
    Runtime.getRuntime().exec(maCommande);

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Oui oui je l'avais rajouté

    J'ai utilisé la méthode citée plus haut, ca donne ca

    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
    java.io.FileReader reader = new java.io.FileReader(chemin);
    			java.io.BufferedReader br = new java.io.BufferedReader(reader);
    	        String cmd="";
    	        String ligne="";
    	        do {
    	        	ligne = br.readLine();
    	        	cmd += ligne;
     
    	        	if (ligne!= null && ligne.length()!=0 && ligne.substring(ligne.length()-1).equals(";")) {
    	        		bdd.executeCmd(cmd);
    	        		cmd="";
    	        	}
     
    	        } while (ligne!=null); // tant que l'on est pas à la fin du fichier
    	        reader.close();
    Bien sur les ";" doivent obligatoirement être en fin de ligne (c'était le cas dans mon fichier donc j'ai fait comme ca) et on ne doit pas trouver de ";" dans les valeurs à insérer par exemple.

    Je vais le modifier encore mais bon la ca fonctionne au moins lol

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

Discussions similaires

  1. Execution script SQL avec paramètres
    Par cell dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 06/09/2011, 17h50
  2. calcul durée execution script sql en secondes
    Par thefreeman62 dans le forum SQL
    Réponses: 5
    Dernier message: 16/08/2010, 17h01
  3. Execution requete SQL en JAVA
    Par absot dans le forum Général Java
    Réponses: 7
    Dernier message: 17/02/2010, 22h28
  4. Executer script sql
    Par Shadow aok dans le forum VBScript
    Réponses: 6
    Dernier message: 06/07/2008, 19h24
  5. [VB6]Executer script sql
    Par issaines dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/04/2006, 17h59

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