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 :

Impossible de se connecter à une base oracle (la config semble ok)


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut Impossible de se connecter à une base oracle (la config semble ok)
    Bonjour,

    Bon depuis maintenant une petite heure j'essais de me connecter à mon SGBD Oracle Express 10.2.0.1.0. J'ai téléchargé le bon driver que j'ai ensuite ajouté au classpath du projet.

    Le constructeur créé donc une connection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public DbConnection(String driver, String url, String dataBaseUserName, String dataBaseUserPassword) {
    		try {
    		    Class.forName(driver); //we select the correct JDBC driver to open the database
    		    DriverManager.setLoginTimeout(5); 
    		    connection = DriverManager.getConnection(url, dataBaseUserName, dataBaseUserPassword);
    		    dataBaseMetaData = connection.getMetaData();
    			statement = connection.createStatement();
    		}catch(ClassNotFoundException e) {
    		    System.out.println("Error when loading the driver : " + e.toString());
    		}catch(SQLException e) {}
    	}
    Je créé une instance de ma classe comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbConnection = new DbConnection("oracle.jdbc.OracleDriver", "jdbc:oracle:thin:@//127.0.0.1:8080:XE", "le_login", "le_password");
    et je test la connection avec la méthode de la FAQ:

    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
    19
    20
    public boolean connexionIsValid() { //we test if the connexion has been made or not by pinging the DBMS
    	   if(connection == null)
    	      return false;
    	   ResultSet ping = null;
    	   try{
    	      if(connection.isClosed()) 
    	    	  return false;
    	      ping = connection.createStatement().executeQuery("SELECT 1");
    	      return ping.next();
    	   }catch(SQLException sqle){
    	      return false;
    	   }
    	   finally{
    	      if(ping != null) {
    	    	  try{
    	    		  ping.close();
    	    	  }catch(Exception e){}
    	      }
    	   }  
    	}
    Résultat: impossible de se connecter. J'ai pourtant donc le bon driver que j'ai bien ajouté au projet. D'après la FAQ sur le site d'Oracle j'utilise la bonne URL, etc. Mon firewall est désactivé.

    Où est donc l'erreur ?

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    A chaque fois que tu interceptes des Exceptions SQL, tu les oublies dans la nature...

    Fais au moins des "e.printStrackTrace()" et/ou des "System.err.println(e.getMessage())": tu en apprendras beaucoup sur ce qui se passe mal.

    Et si malgré ça ta connexion ne marche pas, on pourra plus facilement t'aider si tu nous transmets ces informations...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Citation Envoyé par CyberChouan
    A chaque fois que tu interceptes des Exceptions SQL, tu les oublies dans la nature...

    Fais au moins des "e.printStrackTrace()" et/ou des "System.err.println(e.getMessage())": tu en apprendras beaucoup sur ce qui se passe mal.

    Et si malgré ça ta connexion ne marche pas, on pourra plus facilement t'aider si tu nous transmets ces informations...
    Ben rien de plus à dire que +1 !

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut
    Oui tout à fait, désolé.

    En rajoutant "e.printStackTrace()" dans l'exception SQL du constructeur j'obtient:
    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
    19
    20
    21
    22
    java.sql.SQLException: Exception d'E/S: Socket is not connected
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
    	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
    	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
    	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at db.DbConnection.<init>(DbConnection.java:24)
    	at graphical.all.Login.initialize(Login.java:86)
    	at graphical.all.Login.<init>(Login.java:71)
    	at graphical.all.Login$1.run(Login.java:62)
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Traduction rapide de ton message d'erreur: ton programme n'arrive pas à se connecter à ta base de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbConnection = new DbConnection("oracle.jdbc.OracleDriver", "jdbc:oracle:thin:@//127.0.0.1:8080:XE", "le_login", "le_password");
    La structure du code me paraît correcte... je penche plutôt pour une erreur dans cette ligne:

    - pourquoi //127.0.0.1? essaye plutôt jdbc:oracle:thin:@127.0.0.1 [etc...] voire utilise directement le nom localhost
    - port 8080 pour une base de données Oracle?... Tu es sûr du numéro du port? tu as installé Oracle sur un port exotique ou tu l'as modifié exprès en postant ce message?
    - XE: es-tu sûr d'avoir le bon SID pour ta base?
    - Vérifie les login/mot de passe (encore que vu l'expetion, je penche plutôt pour une erreur dans les autres paramètres)
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut
    Merci bien CyberChouan.

    En fait c'est les "//" en trop qui n'était pas bon (je sais pas pourquoi mais j'avais cru lire qu'il les fallait). Pour le port j'avais essayé avec plusieurs différents, le 8080 étant mon dernier essais (en fait c'est celui du serveur http pour configurer le SGBD via un explorateur...). J'ai donc mis celui par défaut et c'est bon.
    En fait j'avais pourtant essayé auparavant avec la bonne combinaison mais je me basé sur la veleur renvoyé par la méthode de vérification de connection de la FAQ. Or cette méthode me dit que je ne suis pas connecté alors que c'est faux puisque j'ai récupéré un petit SELECT * d'une table et ça marche très bien.

    Et donc quand je fais appel à cette méthode via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(!dbConnection.connexionIsValid()) {
    					try{ 
    						UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    					}catch(Exception e){ e.printStackTrace(); } 
    					JOptionPane.showMessageDialog(null, "Impossible to connect to the database", "Error", JOptionPane.ERROR_MESSAGE);
    					System.exit(0);
    				}
    et bien la valeur retourné via connexionIsValid() est false puisque le message apparaît.

    En fait cela vient, je viens de le voir, de "SELECT 1". Je ne pige pas tout à fait cela. J'ai testé avec un "vrai" SELECT propre à ma base et là pas de problème.
    En fait ce que j'aimerais savoir c'est comment le next() de ping peut-il renvoyé "true" avec un "SELECT 1" ?!

    Merci encore pour votre aide.

Discussions similaires

  1. [Oracle] [OCI] Impossible de se connecter à une base 8 avec l'sdk fournit par Oracle
    Par localhost dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/11/2008, 11h24
  2. [PEAR][DB] Impossible de me connecter à une base mssql
    Par VincenzoR dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 22/07/2006, 08h35
  3. [VBA]Connecter une base oracle depuis Excel
    Par roadster62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2006, 14h34
  4. [Oracle 9i] Connection à une base Oracle
    Par be_tnt dans le forum Connexions aux bases de données
    Réponses: 5
    Dernier message: 24/11/2005, 12h28
  5. les users connectés à une base oracle
    Par progima dans le forum Oracle
    Réponses: 8
    Dernier message: 08/11/2005, 17h43

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