Probleme avec prepareStatemet

Résolu
Signaler
Messages postés
2
Date d'inscription
dimanche 22 mai 2011
Statut
Membre
Dernière intervention
23 novembre 2011
-
Messages postés
2
Date d'inscription
dimanche 22 mai 2011
Statut
Membre
Dernière intervention
23 novembre 2011
-
Bonjour,

Je fais appel à vous car je sèche vraiment sur une requête qui me simple pas si compliqué que ca mais le problème c'est qu'elle ne fonctionne pas :/

Voici le bout de code :
PreparedStatement ps = connexion.prepareStatement("SELECT * FROM ? ");
ps.setString(1,"client");
ResultSet rs = ps.executeQuery();
while(rs.next()){
     int i = rs.getInt(1);
     String s = rs.getString(2);
     String ville = rs.getString(3);
     System.out.println(i+" "+s+" "+ville);
}

et mon erreur est :
java.sql.SQLException: Syntax error or access violation,  message from server: "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 ''client'' at line 1"


Je vous remercie d'avance,
RYL

8 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Bonjour,

La méthode setString modifie ta requete en ajoutant le string passé en paramètre et en l'entourant avec des ''. Il est donc normal que tu ais des erreurs.

Je pense que tu utilises mal les preparedStatement. Ce ne sont pas des objets à utilisez systématiquement mais seulement quand le besoin s'en fait sentir et pas sur une requete aussi simple.

Sinon tu n'as besoin dans ton application pour exécuter toutes tes requetes que d'un preparedStatement "SELECT ? FROM ? WHERE ?=? AND ?=?".

Le but de preparedStatement est de t'aider à paramétrer tes requetes, les ? sont plus a utiliser comme ceci : SELECT * FROM table WHERE id = ?

Donc, place directement le nom de ta table dans ta requete.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Pas de réaction ??

C'est bien quand on a un retour quand même ...
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
;o) il a due trouver ;o) hihi
arf!! les ingrats ;o)


GodConan ;o)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Oui, j'espère pour lui que maintenant son problème est résolut.

Ce n'est pas compliqué de dire un merci, ca marche maintenant et de cliquer sur réponse acceptée (d''ailleurs, je vais le faire pour lui)
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
tricheur ;o)

GodConan ;o)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
hé hé hé

A un époque, je renommais les sujets mal titrés et j'acceptais les réponses qui me semblaient valables pour que les pages cs sortent plus facilement sur google mais ca m'a un peu lassé, je devrais peut être reprendre ca.

Ce qui est étonnant c'est que de nombreux sujets sont résolus mais que soit les titres sont pourris soit l'auteur n'accepte pas la réponse qui l'a aidé.

Et c'est pour ca que sur google, on tombe assez rarement sur les pages cs
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
en meme temps!! les forum qui resorte sur google sont souvent pourris ;o)

GodConan ;o)
Messages postés
2
Date d'inscription
dimanche 22 mai 2011
Statut
Membre
Dernière intervention
23 novembre 2011

Je suis vraiment désolé pour le temps que j'ai mis à répondre.
J'ai posté le sujet sur plusieurs forum ... Ne m'en voulez pas :)

Je vais quand même expliqué comment j'ai fais:

j'ai simplement construit ma requête pas à pas. Je vais donner un exemple ca sera plus simple :
string sql="Select * from ";
String nom=getNomTable();
Sql=sql+nom;

Et pour l'affichage, j'ai utilisé l'objet ResultSetMetaData qui me permet de récupérer le type
ResultSetMetaData rsmd;

rsmd = results.getMetaData();

int type= rsmd.getColumnType(); // qui retourne un entier

Et en fonction du type, j'utilise différent getter.

Voila,
J’espère que j'ai répondu asser précisément,
Encore désolé pour le temps que j'ai mis à répondre.
A bientot
RYL