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

Eclipse Java Discussion :

Threads et JDBC en mode Debug


Sujet :

Eclipse Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Threads et JDBC en mode Debug
    Bonjour,

    J'ai un petit programme qui boucle auour de select en JDBC. Lorsque je le fais tourner en mode debug, l'onglet du meme nom me montre un nombre impressionnant de threads par moment. Le nombre fluctue. Je n'utilise aucune thread, pas de runnable dans mon propre programme. Qu'est-ce qui pourrait expliquer ces threads ?

    Merci d'avance,

    KMp

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Si tu ouvres des connections dans tous les sens ou que tu ne fermes pas les ResultSet (et autres), c'est possible que le driver lance un thread pour fermer les ressources au bout d'un certain temps d'inactivité.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Un grand merci pour ta reponse, the-gtm.

    J'ai encore verifie et je ferme tout ce que j'ouvre (ResultSet, PreparedStaement, Connection) juste apres l'avoir utilise et avant d'appeler une autre methode qui accede a la BD.
    Par contre effectivement j'ouvre sans doute des connections dans "tous les sens" (peux tu preciser ce que tue entends par la stp).
    Etant donne que mon programme se resume a une grosse boucle autour de 4 select , cela fait beaucoup de connections qui s'ouvrent et se ferment rapidement...

    Quelle serait la solution pour faire cette sorte de selection en batch ?
    Faudrait-il que je "reutilise" au mieux une unique connection en la passant entre les methodes chargees des requetes?

    merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    L'idéal c'est d'avoir une seule connection, et d'utiliser des PreparedStatement. Ca permet de créer des requêtes auxquelles on affecte ensuite des paramêtres, tu peux donc les conserver tout au long de ta boucle.
    La seule chose non réutilisable c'est le ResultSet (forcèment ...)

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Un grand merci pour les conseils !
    J'utilise deja des prepared statement meme si j'ai du mal a voir qui gere quoi mais , c'est un autre probleme .

    Tu me conseilles donc de garder une unique connection ouverte et de la passer entre les methodes ? (dans mon code, une methode = 1 requete).

    En gros:

    1/ J'ouvre la connection dans ma methode "principale"
    2/ Je passe la connection a chaque methode chargee d'executer une requete
    qui la passe evenetuellement a une autre methode charge de .... etc...
    elles ouvrent des statement, recuperent des resultsets font leur job et les ferment... (mais pas la connection)
    3/ Lorsque je n'ai plus d'"enregistrement" a gerer, je ferme la connection...

    Ca ressemble a ca ?
    Ca devrait effectivement etre plus rapide de ne pas ouvrir et fermer tant de connections

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Juste une modif, les statement n'ont pas besoin d'être ouverts à chaque fois. Si tu as 4 requêtes, il te suffit d'ouvrir les 4 statements correspondants au début. Sinon c'est ça l'idée.

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci *beaucoup* !

    Je viens de passer en mode une seule connection et ca fuse (comme un pet sur toile ciree!!!) !
    Encore une fois, un grand merci

    J'en profite pour t'emmerder avec les prepared statements, si je comprends bien, en JDBC "normal" (sans pool), si on perd la reference a l'objet PreparedStatement, on perd le gain de l'avoir "prepare" ? Du coup, il faut lui donnee une duree de vie la plus large possible ?

    Ca ressemble a ca ?

    Mais bon, avec du coup de:main, on progresse

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Et niveau nombre de threads, y'a toujours un peu du monde mais c'est plus la queue !

    MERCI!

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    edit: une fois la dernire bourde reparee, plus qu"une en plus de main() !


    MERCI!!!!

  10. #10
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Le mieux en JDBC pour éviter les multiples connexions et tout ...
    Tu te crée une classe avec des méthodes statiques qui interfèrent avec la base de données. En utilisant le pattern singleton ca te permet d'avoir une seule connexion (appelé uniquement à l'execution de la première requète).

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2015, 12h22
  2. Réponses: 3
    Dernier message: 24/11/2008, 14h35
  3. Mode debug
    Par sivaller dans le forum Assembleur
    Réponses: 9
    Dernier message: 12/10/2004, 13h33
  4. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05
  5. Recupération lors d'un plantage (en mode debug)
    Par aRCHiMeD dans le forum MFC
    Réponses: 3
    Dernier message: 15/01/2004, 17h09

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