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

Signaler
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008
-
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008
-
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 ?
A voir également:

9 réponses

Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
17
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"
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008

@ 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
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
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...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
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...
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008

C'est simple temp contient le chemin du fichier sql
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
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...
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008

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
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
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...
Messages postés
5
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
19 novembre 2008

Merci pour ton aide dvoraky

Je me contentrai de ça il parait