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.