IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Probleme PreparedStatement java


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut Probleme PreparedStatement java
    Bonjour à tous,

    J'ai un problème sur un développement que j'effectue en entreprise, le but est pour chaque table, effectué une requête.

    Je possède toutes les tables nécessaire dans un tableau, et la requête est identique pour chaque unes d'entre elles.

    J'ai donc décider d'utiliser un PreparedStatement,
    Pour simplifier de ce type là : " SELECT COUNT(*) FROM ? "

    Lorsque j'effectue :
    preparedStatement.setString(1, "NomTable")
    Jusque la tout marche, mais quand j'effectue ensuite ma requête j'ai un message d'erreur (désolé je ne suis pas sur mon poste donc je n'ai pas l'erreur exact) du type : nom de table ambigu, ou mauvais nom de table.

    J'ai tester en dur ma requête, et elle marche très bien. J'ai fini par en déduire que lorsqu'on fait un setString, le String insérer prend par défaut des cote 'NomTable', ce qui n'est pas bon pour la requête.

    Pour info ce qui donnerai : SELECT Count(*) From 'NomTable', au lieu de SELECT Count(*) From NomTable

    Comment je peux faire pour effectuer un PreparedStatement avec ? pour le nom de la table.


    Merci à vous de votre aide,

    Nono

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    dans une vie antérieure j'ai réalisé un interrogateur SQL: une requête préparée était faite pour éviter de calculer un plan d'optimisaiton à chaque fois. Mais ceci n'est vrai que si le "? " remplace une valeur; pas une table ou un nom de champ.
    Si des interrogateurs le permettent sur des noms de table je ne vois qu'un intérêt très limité (et le résultat d'une interprétation très laxiste: il est vrai que tous les produits SQL se moquent allègrement des normes ... au fait que dit la norme? je ne m'en souviens pas).
    Bref un "?" sur un nom de table me semble ne pas avoir d'effet notable sur les plans d'optimisation et donc autant lancer une nouvelle requête en générant la chaine à chaque fois.
    (il est bien possible qu'un base l'admette mais que le driver le rejette)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut
    Merci de ta reponse,

    Tu dis que l'interrogateur sur le nom de table aurait un intérêt très limité, au contraire ma requête n'est pas aussi simple que cela, il y a beaucoup d'interrogateur dans ma suite pour les paramètres, mais je ne les ai pas mit pour ne pas embrouiller!

    Pour info, cette requête permet d'effectuer un Reporting de l'activité de mon equipe et concerne une 20aines de tables (nombre grandissant), et est effectuée dans une page jsp, je voulais rendre cette requête générique a toutes ces tables pour faciliter le developpement. Car si on doit ajouter une requête de 3 lignes à chaque nouvelle interface, je ne te dis pas la tête de la page jsp par la suite. Ceci permettrait donc que chaque nouvelle interface soit prise en compte par défaut!

    Au vu de mes recherches j'ai l'impression que c'est impossible, et c'est bien dommage!

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je pense que vous avez un problème de design à la base. Etes vous en train de crée N tables à la structur identique donc le nom est du style Table_Machin_novembre_2010 ? Si oui, la structure correcte devrait être Table_Machin avec un colonne mois et une colonne année

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut
    Bien vu mais non aucun probleme de design. Au faite on a une table par interface qui contiennent des champs commun (comme la date) mais plusieurs champs totalement différents. Ma requête prends en compte ces champs commun, mais j'avais mis aussi un identificateur pour les spécifités de chaques tables.

    Aucun besoin de changer la structures des tables!
    C'est juste que la requête est presque identique pour chacune des tables, donc dans une boucle avec un identificateur par table ça aurait allégé considérablement le code.

    Merci quand même!

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu as le controle sur le nom de table, faire un 'debut'+tableName[i]+'fin' est tout aussi valable. Les requetes paramétrées servent
    -> a précompiler la requete sur le serveur, mais ça nécessite de connaitre les tables
    -> à passer des paramètres dans lesquels on a pas confiance
    -> à rendre les requtes plus lisible

    Il n'y a que le dernier point qui vus concerne

Discussions similaires

  1. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 18h19
  2. probleme avec java.util.Scanner
    Par d-a-v-e dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/05/2006, 22h08
  3. Probleme Programation JAVA débutant
    Par tomtom62136 dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2006, 12h07
  4. Probleme applet java sur mon site
    Par halo90 dans le forum Applets
    Réponses: 5
    Dernier message: 01/02/2006, 16h18
  5. probleme securite java
    Par ghan77 dans le forum Langage
    Réponses: 2
    Dernier message: 20/01/2006, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo