Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 16h38   #1
Membre régulier
 
Avatar de the watcher
 
Inscription : juillet 2003
Messages : 356
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 356
Points : 81
Points : 81
Envoyer un message via MSN à the watcher Envoyer un message via Yahoo à the watcher Envoyer un message via Skype™ à the watcher
Par défaut Numérotation des occurences retournées

Bonjour les amis,
Pour numéroter les occurrences retournée par ma requête, j'ai mis en place cette requête qui fonctionne bien dans phpmyadmin :
Code :
1
2
3
4
5
SET @currentRow=0;
SELECT @currentRow := @currentRow +1 AS num_ligne, NOMETU, PRENETU,MATRICULE
FROM ETUDIANT E,INSCRIPTION I WHERE E.NUMETU = I.NUMETU AND ANNEEACA = '2010/2011'
AND NOMCLASSE = '6ème A'
ORDER BY NOMETU LIMIT 0 , 30
Mais lorsque je l'intègre dans java sous formes de string et que je l'exécute,
Code :
1
2
3
4
5
6
String req1 = "SET @currentRow=0;\n";
String req2	= "SELECT @currentRow := @currentRow +1 AS num_ligne, NOMETU,PRENETU,MATRICULE"+" "
+"FROM ETUDIANT E,INSCRIPTION I"+" "
+"WHERE E.NUMETU = I.NUMETU AND ANNEEACA = '"+nANNEE+"'"+" "
+"AND NOMCLASSE = '"+this.NOMCLASSE+"'"+""
+"ORDER BY NOMETU LIMIT 0 , 30";
Le programme me signale erreur de syntaxe .
Citation:
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 'SELECT @currentRow := @currentRow +1 AS num_ligne, NOMETU,PRENETU,MATRICULE FROM' at line 2
...
Pourtant dans phpMyAdmin ça marche sans problème.
Pouvez-vous m'aider s'il vous plaît ?
__________________
L'important n'est pas de tout savoir mais de savoir où tout se trouve !
the watcher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h35   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Je sais qu'en PHP, il faut envoyer une requête au serveur à la fois mais si elles sont envoyées dans la même connexion, elles s'enchaînent comme dans ton script. C'est sans doute ce que fait phpMyAdmin quand il envoie ton script à MySQL, il découpe le script en autant de requêtes.

C'est peut-être pareil en Java ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 12h03   #3
Membre régulier
 
Avatar de the watcher
 
Inscription : juillet 2003
Messages : 356
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 356
Points : 81
Points : 81
Envoyer un message via MSN à the watcher Envoyer un message via Yahoo à the watcher Envoyer un message via Skype™ à the watcher
Merci CinePhil,

Avec l'aide de mon ami pursang le problème a été résolu :

En fait, dans phpmyadmin, la réalisation de ce qui est décrit n'est autre que la réalisation d'un batch constitué de deux requetes SQL distinctes exécutées l'une après l'autre. PhpMyadmin sait le faire.
Hors, la méthode executeQuery en Java ne permet d'éxécuter qu'une seule requete à la fois, et comme je concatène deux requetes, il est normale que j'obtiennes une erreur de syntaxe SQL.
Dans ce cas, il faut exploiter la méthode addBatch(String sql) de l'objet Statement.
Il faut alors fait :
LeStatement.addBatch(req1);// SET @currentRow=0;
LeStatement.addBatch(req2);// SELECT ......
LeStatement.executeBatch();

En définitif on a :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
String req1 = "SET @currentRow=0";
state.addBatch(req1);
state.executeBatch();
 
String requete	= "SELECT @currentRow:=@currentRow +1 AS num_ligne, NOMETU,PRENETU,MATRICULE"+" "
	      +"FROM ETUDIANT E,INSCRIPTION I"+" "
	      +"WHERE E.NUMETU = I.NUMETU AND ANNEEACA = '"+nANNEE+"'"+" "
	      +"AND NOMCLASSE = '"+this.NOMCLASSE+"'"+""
	      +"ORDER BY NOMETU LIMIT 0 , 30";
 
ResultSet res = state.executeQuery(requete);
...
Merci à tous.
__________________
L'important n'est pas de tout savoir mais de savoir où tout se trouve !
the watcher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 23h45   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
OK.
Au passage, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h21.


 
 
 
 
Partenaires

Hébergement Web