Script SQL ne s'éxècute pas sous java

Résolu
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008 - 19 nov. 2008 à 11:34
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008 - 19 nov. 2008 à 15:07
Bonjour à Tous,

Bon voilà j'ai un problème assez bizarre,

Je veux exécuter un script SQL depuis mon application java, dans mon code je crée ma connexion, j'instancie un nouveau statement et puis j'exécute ma requête qui débute par "source"

try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost/mysql", "root", "");
Statement statement = connection.createStatement();
statement.execute(temp);
} catch (Exception e) {
System.out.println("Exception : "+e.getLocalizedMessage());
e.getStackTrace();
}

Le résultat est que le problème me génère une exception :

Exception : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source C:/test/BaseFour.sql' at line 1

Ce qui est n'est pas compréhensible que lorsque j'éxècute manuellement le script dans MySQL avec l'instruction 'source C:/test/BaseFour.sql', le script s'exécute sans aucun problème...

Quelqu'un pourrait me dire où pourrait être le problème ?

9 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
19 nov. 2008 à 14:04
si tu veux executer un fichier:

1- tu es oblige de lire ligne parligne le fichier pour executer les lignes (par ligne comprendre requete)
2- tu dois, selon les requetes, executer tel ou tel methodes java

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
3
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 14:47
@ dvoraky

En fait une requête du genre "create database xxxx" marche et sans problème dans le même code....

J'ai vu sous un autre site qu'il faut passer dans execute ou executeupdate etc... des requetes elementaires et que les requetes de type source ne marche pas...

J'aimerai bien etre sur de cette information....

-----------------------------------------

@ sheorogath

Merci mais c'est intuitive comme solution
en fait c'est mon programme qui a créé ce fichier script....

J'ai déja une version qui execute le script ligne par ligne mais je veux faire ce genre de solution pour voir si je gagne en terme de vitesse d'execution du programme car je fais ça sur une grande quantité d'information et que la premiere solution met à peu près 10 mn pour tout finir
3
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
19 nov. 2008 à 14:53
Oui, je ne pense pas que cela fonctionne.

Je te conseille de faire ce que je te disais au début, à savoir, parcourir ton fichier ligne par ligne afin de créer ta requête dans une String.
Ensuite, tu passes cette String en paramètre du execute et roules ma poule.
Moi perso, j'ai les mêmes besoin que toi et je fais ça.

Comme tu veux tester les perf par un autre biais, alors je ne sais guère quoi te conseiller... Essaie en passant par les executeUpdate... pourquoi pas, mais je ne te garantie absolument rien...

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
3
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
19 nov. 2008 à 11:42
Salut,

Peux tu nous dire ce qu'est la variable "temp", s'il te plaît?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 11:50
C'est simple temp contient le chemin du fichier sql
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
19 nov. 2008 à 11:54
Ok,
Je ne pense pas qu'il faille mettre un path fans "execute"...
Enfin, c'est pas "je pense pas", c'est j'en suis sûr.

Regarde la Javadoc pour la méthode "execute" de la classe Statement... il attend en paramètre une String contenant la requête SQL, genre "SELECT * FROM toto" et non le chemin vers ton fichier SQL, genre ce que tu fais.

Donc tu as 2 possibilités:
   - soit tu parcours le fichier et tu récupères son contenu que tu mets dans une et une seule String (je recommande)
   - soit tu peux essayer de faire une commande SQL de genre :
         statement.execute("start " + temp);
         Mais bon je suis pas sûr que tous les SGBD puissent faire cela.

Voilà

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 12:11
En fait je voulais dire que temp est une concaténation du mot clé "source " et du chemin du fichier sql...

J'ai essayé avec la méthode proposé j'arrive toujours pas à éxècuter le script
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
19 nov. 2008 à 13:35
ba visiblement, il aime pas...

Tu as essayé de mettre, à la place de temp, une chaine de caractère genre "SELECT * FROM nom_d_une_table" ?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
Nidhal_Asma Messages postés 5 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 15:07
Merci pour ton aide dvoraky

Je me contentrai de ça il parait
0
Rejoignez-nous