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.)
Maintenant je bloc sur la partie importation.
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 ); }
le compte testeur dispose de tout les droits sur la base DBtest. dans un terminal, l'importation fonctionne en faisant :
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 : Sélectionner tout - Visualiser dans une fenêtre à part mysql -utesteur -ppassword DBtest < DBtest.sql
code version 1 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part Runtime.getRuntime().exec( "mysql -utesteur -ppassword DBtest < DBtest.sql" );
code version 2 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part Runtime.getRuntime().exec( "konsole -e mysql -utesteur -ppassword DBtest < DBtest.sql" );
code version 3 :
Même ainsi la base de données n'est pas importée.
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 );
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.
Partager