Script SQL ne s'éxècute pas sous java [Résolu]

Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention - 19 nov. 2008 à 11:34 - Dernière réponse : Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

9 réponses

sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 19 nov. 2008 à 14:04
+3
Utile
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"
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sheorogath
Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention - 19 nov. 2008 à 14:47
+3
Utile
@ 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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Nidhal_Asma
dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention - 19 nov. 2008 à 14:53
+3
Utile
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...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dvoraky
dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention - 19 nov. 2008 à 11:42
0
Utile
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...
Commenter la réponse de dvoraky
Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention - 19 nov. 2008 à 11:50
0
Utile
C'est simple temp contient le chemin du fichier sql
Commenter la réponse de Nidhal_Asma
dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention - 19 nov. 2008 à 11:54
0
Utile
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...
Commenter la réponse de dvoraky
Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention - 19 nov. 2008 à 12:11
0
Utile
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
Commenter la réponse de Nidhal_Asma
dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention - 19 nov. 2008 à 13:35
0
Utile
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...
Commenter la réponse de dvoraky
Nidhal_Asma 5 Messages postés mardi 8 mai 2007Date d'inscription 19 novembre 2008 Dernière intervention - 19 nov. 2008 à 15:07
0
Utile
Merci pour ton aide dvoraky

Je me contentrai de ça il parait
Commenter la réponse de Nidhal_Asma

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.