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

JDBC Java Discussion :

Exécuter import MySql depuis application Java


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Exécuter import MySql depuis application Java
    Bonjour,

    ma demande ne concerne pas directement le JDBC mais l'interactivité entre JAVA et my sql.

    Je peux lire et écrire dans ma base de données depuis mon application java.

    Je voudrais pouvoir exporter et importer ma base de données via mon application au lieu de devoir utiliser les commandes mysql dans un terminal.

    A force de recherche et de test j'ai déjà réussi a coder la partie exportation :

    Un JFileChooser, pour que l'utilisateur choisisse le nom et l'emplacement du fichier, et pour filtrer sur l'extension .sql. Puis runtime.getruntime().exec("mysqldump ...
    pour exporter la base de données.

    Voici une version simplifiée du code ( le nom du fichier et son emplacement ne sont pas paramétrable mais l’exportation fonctionne.)

    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
     
    int BUFFER = 1024;
     
    try
    {
    	File sortie = new File("DBtest.sql");
     
            Process p = Runtime.getRuntime().exec("mysqldump -utesteur -ppassword DBtest");
     
    	InputStream in = p.getInputStream();
    	BufferedReader br = new BufferedReader(new InputStreamReader(in));
     
    	StringBuffer temp = new StringBuffer();
     
    	int count;
    	char[] cbuf = new char[BUFFER];
     
    	while ((count = br.read(cbuf, 0, BUFFER)) != -1)
    		temp.append(cbuf, 0, count);
     
    	br.close();
    	in.close();
     
    	byte[] donnees = ( temp.toString() ).getBytes();
     
    	FileOutputStream out = new FileOutputStream( sortie );
    	out.write( donnees );
    	out.close();			
    }
    catch( IOException IOe )
    {
    	System.err.println( "erreur IO : " + IOe );
    }
    Maintenant je bloc sur la partie importation.

    le compte testeur dispose de tout les droits sur la base DBtest. dans un terminal, l'importation fonctionne en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -utesteur -ppassword DBtest < DBtest.sql
    Donc j'ai voulu recopier cette commande dans un runtime.exec, c'est encore une version test le nom et l'emplacement du fichier sont inscrit dans le code. J'indique DBtest.sql dans les exemples suivants mais dans mon code il y a le chemin complet du fichier :

    code version 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec( "mysql -utesteur -ppassword DBtest < DBtest.sql" );
    bien évidemment ça ne fonctionne pas, après recherche j'ai trouver que '<' ne peut pas être utiliser directement dans runtime.exec. il faudrait ouvrir un terminal et ensuite lui envoyer la commande mysql.

    code version 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec( "konsole -e mysql -utesteur -ppassword DBtest < DBtest.sql" );
    ne fonctionne toujours pas. Finalement, je suis tombé sur un article qui conseillait de remplacer le runtime().exec( String ) par runtime.exec( String[] ) quand on passe par un terminal.

    code version 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] cmd = { "konsole", "-e", "mysql -utesteur -ppassword DBtest < DBtest.sql" };
    Runtime.getRuntime().exec( cmd );
    Même ainsi la base de données n'est pas importée.

    Je vais continuer a faire des recherches de mon côté mais si quelqu'un peut m'orienter sur mon erreur, ce serait vraiment aimable.

    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Juin 2010
    Messages : 108
    Points : 190
    Points
    190
    Par défaut
    Bonsoir

    réalise un script shell (mysql -h ,,,, -u .... -p ..... < $1)

    puis exécute ce script avec le bon paramètre dans exec /path/scriptshell /path/fichier.sql

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    OK, j'ai essayé et ça fonctionne voici le code java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] cmd = { "konsole", "-e", "cd PATH", "./script.sh" };
    Runtime.getRuntime().exec( cmd );
    et le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -utesteur -ppassword DBtest < PATH/DBtest.sql
    Il faudrait maintenant que je construise le script dynamiquement pour indiquer le nom et l'emplacement du fichier que l'utilisateur aura choisi avec le JFile Chooser. Je pense pouvoir m'en sortir tout seul pour la conception du script, mais j'ai encore 2 petites questions sur l'utilisation d'un script avec Runtime.exec() :

    1 ) Est-ce que je suis obligé de passer par un terminal pour exécuter le script depuis java ?

    2 ) Et si je peux lancer le script directement depuis java, est ce que je suis obligé d'enregistrer le script que j'aurai créé sur le disque dur ou est ce que je peux le passer en variable ?

    EDIT :

    tout est OK, voici la solution que j'ai retenu :

    code java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String nom_fichier = "DBtest.sql";
    String PATH_fichier = "PATH";
    String user = "testeur";
    String password = "password";
     
    Runtime.getRuntime().exec( "sh script.sh " + PATH_fichier + nom_fichier + " " + user + " " + password );
    script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -u$2 -p$3 DBtest < $1
    Comme ça le script est assez général pour être utiliser quelque soit l'OS, le PATH et le nom du fichier. je n'ai pas besoin de le créer, je peux l'avoir avec le reste de mon programme.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2013, 19h08
  2. Réponses: 2
    Dernier message: 08/05/2008, 11h30
  3. Accéder une base mysql depuis un .java
    Par AlKoLiK dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 05/02/2008, 03h11
  4. Exécuter du javascript depuis java
    Par Shivacdbs dans le forum Général Java
    Réponses: 3
    Dernier message: 24/11/2006, 12h32
  5. Import / export depuis java
    Par rach375 dans le forum DB2
    Réponses: 5
    Dernier message: 19/07/2006, 10h03

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