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 :

tester la connectivité d'un base de donnée


Sujet :

JDBC Java

  1. #1
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut tester la connectivité d'un base de donnée
    Bonjour,
    je travaille sur une appli qui se connecte via jdbc à une base db2 sur serveur.

    Je veux tester la connectivité de la base.

    POue cela, j'ai crée une classe extends JLabel qui fait clignoter deux images : une verte quand la connexion est bonne. UNe rouge qaund c''est pas le cas.

    POur tester cette connectivité, je n'ai trouvé qu'un seul moyen : tous les 200 cycles du timer(environ 100s),je cloture ma connexion, et je la redémarre.

    Ca implique d'arréter ce timer dès que le programe envoie une transaction, en testant si la connexion est bonne(on pourrait tomber juste au moment ou la déconnexion est effectuée par le timer).

    Y ' a t'il un autre moyen??

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut petit problème
    Salut,

    en effet ca parait out con!!

    Je ne peut pas ecrire ca, il me sort une erreur, apparement ca n'existe pas??!?

    Je te donne mon code pour ouvrir la connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    static public void open_connexion(){
        Connection con = null;
        Statement s;
        String url ="jdbc:odbc:";
        url += "INFRACAB";
        try{
            try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            } catch(ClassNotFoundException e) {
                System.out.println(e.toString());
            }
            con = DriverManager.getConnection(url,"user","111111");
            s = con.createStatement();
            connectivity = true;
        } catch(SQLException e) {
            connectivity = false;
        }
    }
    Je comprend pas??

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    Je ne peut pas ecrire ca, il me sort une erreur, apparement ca n'existe pas??!?
    Effectivement cette méthode n'est disponible que depuis Java 6, si tu utilises une version antérieure c'est normal qu'il ne la trouve pas.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut pourtant non
    C:\Documents and Settings\CuyenBoy>java -version
    java version "1.6.0_07"
    Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
    Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)

    et pareil pour les lib sur l'EDI...

    Je mets à jour tout le temps l'environement java, car j'ai déjà eu des problèmes...

    Déja je ne vois pas isValid dans le menu déroulant (aide de JBuildder), ce qui n'est pas normal.

    Je me pose des questions...

    Help Pleaze

  6. #6
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Il ne suffit pas d'avoir une JVM 1.6, il faut que le driver JDBC utilisé soit suffisamment récent, et supporte ces méthodes disponibles à partir de la norme JDBC 3.0.
    Sinon est-ce bien ta JVM 1.6 que tu utilises pour la compilation ? Dans Eclipse par exemple, tu peux configurer que la compilation est en 1.4 alors que dans le PATH, c'est la 1.6 par défaut. Je suppose que JBuilder doit faire pareil.

  7. #7
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut niquel
    C'était bien ça!! Merci

    Pour ceux que ça interesse, sous JBuilder 2007, il faut d'abord aller dans java/compilateur, passer en 6.0, puis cliquer en bas sur build path, et ne pas ou blier de changer les jars!!! ce que j'avais pas fait. et la isValid(arg0) est proposé.

    Merci tt le monde, j'ai pas encore testé mais on est obligé de mettre un arg0? j'ai déjà fait une classe avec un timer...
    Manque plus que isValid()...

  8. #8
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Problème
    Quand je l'utilise, ca s'execute, mais ca mets dans la console :

    java.lang.UnsupportedOperationException...

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    driver pas compatbile avec cette version de jdbc ou l'implémente pas totalement, regarde si un driver plus récent existe. Sinon, accessoirement, "à l'ancienne" la méthode pour tester une connection etait simplement de faire une requete neutre sur la db, requete type select qui doit renvoyer au moins une ligne. Avec oracle, par exemple, çà aurait put etre
    qui renverrait une ligne de une colonne contenant 69. Pour te donner une idée, les connecteur jdbc de tomcat accepetent un parametre "validation query" qui est exactement utilisé comme çà

    et ca marche avec toutes les db, le tout c'est de trouver une requete pour ta db (select sur une table à un élément, select sur une table virtuelle, etc)

  10. #10
    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, avec DB2, le "select 69 from dual" ne va pas fonctionner.
    Tu peux par contre faire tout simplement
    qui renverra 1 mais en passant par la DB (et ça marche même avec Oracle )

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

  11. #11
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut merci
    Ouais j'y avait pensé, mais ça fait pas très "propre" quand même...

    le driver jdbc est compris dans les jdk non?
    si je suis en 1.6.07, je comprend pas pourquoi ca marche pas...

    J'aimerai vraiment me servir de isValid.

    Comment faire pour utiliser un driver jdbc plus récent?

    Merci

  12. #12
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut J'ai essayé
    J'ai essayé

    res = s.executeQuery("SELECT 1");

    Ca marche pas, erreur SQL...
    Il faut créer une table spécifique pour ca?
    pas de FROM SCHEMA.TABLE???

  13. #13
    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
    Citation Envoyé par donnadieujulien Voir le message
    Ouais j'y avait pensé, mais ça fait pas très "propre" quand même...
    Question de point de vue...
    Personnellement, je trouve ça bon et ça répond au besoin de tester la validité d'une connexion.
    Citation Envoyé par donnadieujulien Voir le message
    le driver jdbc est compris dans les jdk non?
    si je suis en 1.6.07, je comprend pas pourquoi ca marche pas...
    Les drivers JDBC sont souvent fournis par le vendeur de la base de données.
    Même s'il existe un driver générique, rien ne dit qu'il fonctionnera avec une base particulière
    Citation Envoyé par donnadieujulien Voir le message
    J'aimerai vraiment me servir de isValid.
    Comment faire pour utiliser un driver jdbc plus récent?
    Regarde si le driver fourni avec DB2 Express V9 inclut la fonction

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

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    pas très propre? en tout cas, t'as pas besoin des dernier drivers pour çà, faut pas perdre de vue qu'entre la norme jdbc et les driver propriétaires, y a un temps de réaction. De plus, les derniers drivers qui implementent les dernières spécificités jdbc sont souvent limités aux dernières version de la database....

    Je trouve la requete le plus propre, car finalement, çà garanti qu'on saura exécuter des requetes sql. Dans un cas idéal, tu ferais meme un select sur une table réelle, histoire de garantir que t'as aussi les droit d'accès nécessaires sur cette table :p

  15. #15
    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
    Citation Envoyé par donnadieujulien Voir le message
    J'ai essayé

    res = s.executeQuery("SELECT 1");

    Ca marche pas, erreur SQL...
    Il faut créer une table spécifique pour ca?
    pas de FROM SCHEMA.TABLE???
    T'as raison, ça ne fonctionne pas (ni avec Oracle) !
    (tellement l'habitude d'utiliser MySQL qu'on prend de mauvaises habitudes)
    Ceci dit, rien ne t'empêche d'adapter avec une table à toi

    Encore désolé
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    trouvé sur le net pour db2, çà vaut ce que çà vaut:

    select current_timestamp from sysibm.sysdummy1

  17. #17
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Ok
    Merci de votre aide,

    j'ai donc créé une table WATCH_CONNECTIVITY avec un seul champ pour tester la connexion.

    Au niveau des droits, de toute façon j'utilise une table à cet effet(login,password,admin_level), donc j'aurais pas de problème à ce niveau la.

    Je laisse tomber donc tomber isValid(), et de toute façon de vous à moi, j'suis pas trop un adepte du code "propre", je serai plutôt bordelique!!!!!!

    Donc c'était pour permettre une meilleur relecture...
    con.isValid() ca parle plus que s.executeQ(...), mais bon...

    à bientôt sur le forum!

  18. #18
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut derniere question
    Mon problème était plutôt au niveau des ressources, de ne pas trop encombrer le reseau...(des table de millions de lignes sur serveur en plus plusieurs users en même temps,bonjour les dégats...)

    Qu'est ce qui consomme le plus de ressources, isValid() ou un select???

    POur ma part, je pense que select en consome plus, c'est bien pour ca qu'ils ont prévus une méthode isValid(), non?

  19. #19
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    Qu'est ce qui consomme le plus de ressources, isValid() ou un select??? Pour ma part, je pense que select en consome plus, c'est bien pour ca qu'ils ont prévus une méthode isValid(), non?
    Vu que c'est implémenté dans le Driver, rien ne te dis que la stratégie utilisée ne sera pas justement d'émettre un ordre SQL ... L'ordre SQL ne sera pas consommateur s'il est très simple de toute façon, et c'est la technique utilisée aujourd'hui sur la plupart des pools de connexion pour valider une connexion et en recréer une au besoin.

  20. #20
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut ok
    Merci

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

Discussions similaires

  1. Tester un champ dans une base de données
    Par Bebete dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/05/2008, 10h30
  2. Tester la disponibilité d'une base de données
    Par seko dans le forum Administration
    Réponses: 6
    Dernier message: 15/05/2008, 09h49
  3. [MySQL] Tester l'existance d'une table dans une base de données
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/12/2006, 20h27
  4. [MySQL] Tester l'existence d'une base de données
    Par loukili81 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/05/2006, 11h40
  5. Réponses: 2
    Dernier message: 20/05/2005, 11h18

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