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 :

Connexion vers deux bases de données


Sujet :

JDBC Java

  1. #1
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut Connexion vers deux bases de données
    Bonjour à tous,

    J'ai besoin de faire quelques choses de plutot particulier... à savoir envoyer une requête de type "select" sur des infos provenant de deux bases differentes...
    Visiblement c'est possible en VB, mais j'avoue qu'en java je sèche un peu
    En VB, le principe est le suivant :
    -On crée une connexion avec un canal d'ouvert vers la première base
    -On stipule que cette connexion doit également établir un canal vers la seconde base
    -Puis on peut lancer une requetes du genre :
    "SELECT base1.table1.attr1, base1.table2.attr1, base2.table1.attr1.. FROM xxxx"

    Aujourd'hui la seul facon que je connais en java pour communiquer avec une base c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection conn = DriverManager.getConnection (url, userName, password);
    Existe-t-il , d'une façon ou d'une autre, un moyen pour réaliser cette "double" connexion ??

    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    bonjour a tous,

    c'est parail en java ,tu doit utiliser :
    Connection conn = DriverManager.getConnection (url, userName, password);
    pour etablire une connexion et dans t requêt

    query="SELECT base1.table1.attr1, base1.table2.attr1, base2.table1.attr1.. FROM xxxx"
    et t doit executer ton requêt de facon trés simple
    PreparedStatement pstmt = con.prepareStatement(query);
    ResultSet rs=pstmt.executeQuery();

  3. #3
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    J'avoue que je n'arrive pas très bien à voir comment cela va résoudre mon problème...

    si je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection conn = DriverManager.getConnection (url, userName, password);
    J'établis une connexion vers 1 base de données...
    Les deux bases qui m'interessent sont sur deux serveur complètement différent....

    En gros, ce qu'il me faudrait, c'est un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Connection conn = Connection.add(DriverManager.getConnection (url, userName, password));
    conn = Connection.add(DriverManager.getConnection (url2, userName2, password2));
    Malheureusement "Connection.add(Connection conn)" ca n'existe pas....

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Je ne sais pas quelle est ta base mais par exemple avec Oracle tu as la possibilité de faire un DBLink (ça se passe dans la base directement) qui te permet d'accéder aux tables de plusieurs bases en même temps.

    A vois s'il existe une telle solution pour la base que tu utilises. Dans ce cas tu n'as qu'à te connecter sur la base qui possède le dblink.

    sinon, par Java je ne cois pas trop. Peux être qu'avec 2 rowset déconnectés tu as moyen de faire des requêtes mais ça va être hyper lourd.

    Bref, essaie de voir si tu as une solution au niveau de la base directement

  5. #5
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    arf, pas glop...

    C'est la que ca se complique
    l'une des bases est MySQL, l'autre c'est Oracle

    L'histoire du dblink ne me semble pas adapté... mon besoin premier est de faire de la synchro de donnée entre ma base Oracle (qui me sert de base "centrale") et mes milliers de base MySQL installé en local sur des postes nomades....

    La structure des bases étant identiques, pouvoir faire une requetes croisé entre ces deux bases me permettrait d'obtenir rapidement la liste des enregistrements non présent sur mes bases locales. (la synchro se fait uniquement de la base centrale vers les bases locales...)

    Va falloir que j'approfondisse encore un peu mes recherches

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut Quel SGBD
    Dis-nous quels sont les SGBD à utiliser.

    Par exemple en SQL Server, c'est très facile (c'est prévu dans le T-SQL)

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    mon dernier message a croisé le tien

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    Quand tu dis
    mes milliers de base MySQL installé ...
    Est-ce que ce sont vraiment des milliers ?

    Surtout, quand tu vas faire ces mises à jour, est-ce que toutes les bases MySQL seront identiques (cas d'un catalogue articles par exemple)
    ou bien chaque base, bien qu'ayant la même structure, n'aura pas les mêmes informations (cas de bases pour voyageurs de commerce, ayant chacune les infos spécifiques au commercial)

  9. #9
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    oui ce sont vraiment des milliers (environ 2500 pour être plus précis)
    Mais comme je disais, la synchro ne se fait que dans un sens...
    En gros les bases locale sous MySQL sont toutes identiques et sont toujours après synchro, une réplique de la base centrale.
    Les bases sous mysql ne changeront pas entre deux synchro.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut Méthode de bourin ...
    Si toutes les bases sont identiques, je crois que tu auras plus vite fait de
    vider la base MySQL (en conservant la structure des tables) puis de
    faire un export de la base Oracle vers la base MySQL.
    Et enfin de diffuser cette base MySQL.

    Je ne suis pas un spécialiste MySQL et Oracle mais je crois qu'utiliser Java dans
    ce cas n'est pas productif.

    Il serait étonnant qu'Oracle n'ait pas d'outil d'exportation / chargement vers une base MySQL.

    Sinon, il y a la solution chic et élégante d'utiliser Talend pour transférer des données entre deux systèmes.

  11. #11
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Vider toutes les bases et les re remplir, ca ne me parait pas très simple quand même.... le but est kan même de limiter le nombre de requêtes... la je vais traiter des milliers d'enregistrements...
    Tout doit être géré au travers de l'application Java, pas moyen que ca se fasse par un système autre...

    Je viens de regarder Talend, ca à l'air très puissant, mais j'ai encore du mal à voir comment cela fonctionne concrètement...

    Quelqu'un à déjà testé ce truc ?
    Des retour d'expérience m'interesse !

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    Je ne pensais pas vider toutes les bases mais :
    1. utiliser une base vide avec la bonne structure de tables
    2. la remplir avec un export Oracle vers MySQL
    3. envoyer cette base aux 2500 postes nomades


    Ce système existe sur MS SQL server (on appelle ça des lots DTS).
    On le déclenche à volonté depuis une application Java ou Access ou VB.

    J'imagine qu'il doit aussi exister sur Oracle un système d'export qui ira plus vite qu'une appli Java. Ce type de système est construit pour transférer des paquets de milliers/millions d'enregistrements.
    Si ta base n'a pas de triggers ou de contrôles d'intégrité référentielle, la mise à jour se ferait alors en quelques instants.

    Cela vaut le coup que tu mettes un post dans le forum Oracle pour demander si on peut
    enregistrer dans une procédure stockée (Oracle) un système d'export vers MySQL (quitte à faire faire la procédure par un DBA).
    Après, tu n'aurais plus qu'à appeler cette procédure à volonté depuis Java (execute statement) et le tour est joué

  13. #13
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Malheureusement cette solution ne peux pas fonctionner dans mon cas...
    Il m'est impossible d'avoir une base MySQL sur un serveur.... sinon j'aurais directement utilisé MySQK plutot que de me compliquer la vie avec Oracle

    Ensuite, ce qui me pose problème c'est bien ce principe "d'envoyer ma base au poste client"... c'est un peu se principe que j'aurais aimé valider et en particulier avec la possibilité de me connecter à deux base en meme temps en java...

    On m'a parlé d'un "multi base request"... mais je ne trouve pas d'objet associé... je vais continuer mes recherches;

    En tout cas déjà merci pour les idées

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    J'ai du mal à comprendre...
    Il m'est impossible d'avoir une base MySQL sur un serveur
    Dans ce cas, comment tu fais pour accéder à la base MySQL ?
    J'ai du mal à imaginer que tu veuilles mettre les 2500 bases à jour l'une après l'autre ?

    Bon sinon, j'ai vu qu'il y a une discussion ici sur la possibilité d'intégrer
    un job de Talend (du genre transfert / mise à jour de données) dans une appli Java.

    Cela peut être une piste.

  15. #15
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Les bases MySQL se situe sur les postes de chaque client en locale.
    Chaque utilisateur peut travailler de facon "deconnecte"
    Des administrateurs s"occupe de mettre à jour la base centrale "oracle", et lorsque les utilisateurs ont du réseau, il se connecte à ce serveur centrale pour récupérer les mises à jour.....

    Les 2500 bases ne seront donc pas mise à jour les unes après les autres, mais un peu n'importe quand....

    En ce qui concerne Talend, j'ai commencé à jouer un peu avec mais je ne pense pas que ça répondra à mon besoin...
    Le système de mise à jour que j'ai décrit est une version vraiment très simplifié de ce qu'il va se passer.... c'est un peu plus compliqué qu'une simple réplication de base... quand j'ai vu que talend générais plus de 1500 lignes de codes juste pour recopier les informations d'une table oracle dans une table mysql... ca serait trop compliqué à maintenir... Mais c'est quand meme très puissant comme outils et je te remercie de me l'avoir fait découvrir

    Mon besoin de base était de pouvoir éxecuter une requêtes sur deux bases en simultané... visiblement ceci est malheureusement impossible à faire en Java

    Je vais devoir plancher sur un algo digne de se nom qui répondra à mon besoin

    Merci pour vos conseils !

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut On continue ...
    Est-ce que par hasard il y a un champ [Date de mise à jour] dans les tables Oracle ?

  17. #17
    Membre éclairé Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Points : 690
    Points
    690
    Par défaut
    Personnellement je gere ce style de problème avec une classe connexion spécifique où je peux définir "n" connexons vers des bases différentes (je gere cela dans une collection).

    Cela me permet entre autre de faire lire d'un coté et d'ecrire de l'autre pour réaliser par exemple une synchro entre Mysql et DB2, ou de les comparer entre elles.

  18. #18
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    Cela me permet entre autre de faire lire d'un coté et d'ecrire de l'autre pour réaliser par exemple une synchro entre Mysql et DB2, ou de les comparer entre elles.
    Le problème posé est de faire une seule requête qui interroge deux serveurs différents
    afin d'utiliser le SQL pour détecter les mises à jour à faire.
    Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT A.ID, A.Nom, A.Prénom
    FROM   ServeurOracle.BaseRef.Clients As A LEFT JOIN
              ServeurMySQL.BaseEmbarquée.Clients As B ON A.Id = B.Id
    WHERE B.Id IS NULL

    C'est beaucoup plus économique en code que d'utiliser Java.

  19. #19
    Membre éclairé Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Le problème posé est de faire une seule requête qui interroge deux serveurs différents
    afin d'utiliser le SQL pour détecter les mises à jour à faire.

    C'est beaucoup plus économique en code que d'utiliser Java.
    Oui mais cela implique un logiciel pour "federer" les bases de données de type différent et je ne pense pas que cela soit gratuit chez Oracle (ou ailleur...).

  20. #20
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut En effet
    Je dirais même plus (comme dirait Dupont) !

    Comme la requête est exécutée par le SGBD, il faut que ce soit le serveur qui autorise ce genre de connexion.
    Par exemple, SQL Server y parvient avec son système de serveur lié ou encore avec des instructions spécifiques T-SQL
    permettant de faire "comme si" une table sur un serveur distant était une table locale.
    Ce n'est pas très rapide, mais ça marche.

    Dans le cas qui occupe maloups, il ne peut même pas demander à Oracle de se connecter avec la base MySql
    car il y a 2500 bases à mettre à jour.

    Il lui faudra peut-être un serveur dédié du genre GlassFish
    avec plein d'EJB destinés à mettre à jour les bases distribuées.

    Un champ [Date de mise à jour] présent dans les tables Oracle permettrait de limiter le temps de traitement.

Discussions similaires

  1. Connexion entre deux bases de données
    Par kimTunisia dans le forum Installation
    Réponses: 3
    Dernier message: 18/08/2011, 11h55
  2. Réponses: 1
    Dernier message: 09/04/2010, 13h38
  3. Réponses: 0
    Dernier message: 08/06/2009, 19h28
  4. [Conception] connexion de deux bases de données dans une page en php
    Par leclone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/04/2007, 14h59
  5. Réponses: 13
    Dernier message: 10/12/2005, 13h34

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