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 :

preparedstatement ou statement avec requete optimisé ?


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Par défaut preparedstatement ou statement avec requete optimisé ?
    Bonjour,

    vaut-il mieux utiliser un preparedstatement ou
    un unique statement qui renvoie toutes les données utile et que l'on
    stocke et manipule avec un hashMap ?

    ex

    prepared statement avec la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.a2, a.a1 from a where a2 = ?
    et boucler avec 'toto', 'titi', 'tutu'

    ou

    statement avec la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.a2, a.a1 from a where a2 = 'toto' or a2 = 'titi' or a2 = 'tutu'
    Pourquoi ?

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Pour moi le PreparedStatement est le mieux...car les 'or' niveau performance, c'est pas super...si tu pose un index sur le champs a2, avec le PS ca sera ultra rapide (enfin, tout ca dépend bien sur de la base, de la quantitée de donnée, etc...)

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    En l'occurrence, la question est un peu vague, tu peux utiliser les 2 de la même manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Statement stmt = connection.createStatement();
    ResultSet rs = null;
     
    for ( int i = 0; i < refs.length; i++ )
    {
       rs = stmt.executeQuery("select * from Table where a2 = " + refs[i]);
       if ( rs.next() )
       {
          ...
       }
    }
    Et à mon avis, ça devrait être très proche en terme d'exécution...
    Maintenant, si a2 est une chaîne de caractères (avec ' en plus), il est certain que le PreparedStatement est mieux...

    Sinon, tu peux peut-être utiliser un argument Array directement dans ta requête PreparedStatement, ça reviendrait à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PreparedStatement pstmt = connection.prepareStatement("select * from Table where a2 in (?)");
    pstmt.setArray(1, refs);
    ResultSet rs = pstmt.executeQuery();
    while (rs.next())
    {
       ...
    }
    Là, ça devrait être optimal en performances...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Par défaut
    Merci pour vos reponses.

    je vais essayer d'etre plus clair dans l'explication de mon probleme.

    Actuellement j'ai un programme qui fait exclusimenet des preparedStatement cree au debut de la methode et ferme a la fin avec DES boucles.

    Le temps d'execution est tres long.

    Est ce que je peux espere avoir un gain de performances en utilisant un statement qui remonte toute les donnees necessaires à la place ?

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    En utilisant la méthode avec "in" tu devrais avoir les meilleurs temps de réponse possibles, certainement mieux qu'avec une suite de "or".

    Sinon, tu peux générer toi-même la requête avec "in (v1, v2...)" et utiliser un Statement (moins bon à mon avis, sur certaine DB, il y a une limite sur le nombre de valeurs de la clause)

    Dans tous les cas, une requête unique (avec ou sans "or") devrait être plus performante que N requêtes...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Personnellement j'ai testé les deux et n'ai pas constaté de différence notable dans le temps de traitement par contre dans la gestion des valeurs envoyées la solution PS est mieux quoi que...
    Si tu as un pb de temps de traitement ta solution est dans la gestion des index et là c'est à taton en éxécutant n fois la même rqte en comparant les tps de traitement que l'on trouve une solution faite de compromis.
    De toute façon plus les rqtes sont simples et plus rapide sera le traitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. BCB6 & Mysql(api) :pb avec requete
    Par o_live dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/03/2005, 15h12
  2. TreeView avec requete, pb de paramètre
    Par marie253 dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/08/2004, 08h14
  3. Bug avec requete
    Par arsgunner dans le forum ASP
    Réponses: 8
    Dernier message: 14/06/2004, 16h25
  4. Pb avec requetes SQL
    Par Furtif_00 dans le forum Bases de données
    Réponses: 15
    Dernier message: 22/03/2004, 20h14
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

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