Comment tester la connexion à la base de données Oracle à l'aide de Java


Existe-t-il un moyen de tester ma connexion à la base de données Oracle en utilisant Java? Voici mon code.

public class OracleConnection {

    public static void main(String[] args) throws Exception {
        //connect to database
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String serverName = "00.000.0.000";
        String portNumber = "1521";
        String sid = "My Sid";
        String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
        String username = "UNAME";
        String password = "PASSWORD";
        Connection conn = DriverManager.getConnection(url, username, password);
    }
}

Ce que je veux faire, c'est tester la base de données si elle est accessible et si ce n'est pas le cas, le programme se connectera à la base de données suivante. J'ai 8 base de données de production.

Author: Bimbz, 2013-09-12

9 answers

Ne réinventez pas la roue. Le pilote JDBC d'Oracle a déjà cette fonctionnalité intégrée.

Ceci est utile: http://www.orafaq.com/wiki/JDBC

import java.util.ArrayList;
import java.sql.*;

public class OracleConnection {

    public static void main(String[] args) throws Exception {
        //connect to database
        Class.forName("oracle.jdbc.driver.OracleDriver");
        ArrayList<String> serverNames = new ArrayList<String>();
        serverNames.add("yourhostname1");
        serverNames.add("yourhostname2");
        serverNames.add("yourhostname3");
        serverNames.add("yourhostname4");
        String portNumber = "1521";
        String sid = "ORCLSID";
        String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)(FAILOVER=ON)" ;
        for (String serverName : serverNames) {  
            url += "(ADDRESS=(PROTOCOL=tcp)(HOST="+serverName+")(PORT="+portNumber+"))";
        }
        url += ")(CONNECT_DATA=(SID="+sid+")))";
        String username = "USERNAME";
        String password = "PASSWORD";
        // System.out.println(url); // for debugging, if you want to see the url that was built
        Connection conn = DriverManager.getConnection(url, username, password);
    }
}

Le code ci-dessus construit et utilise réellement une URL qui ressemblait à ceci (comme exemple ci-dessous). Je l'ai obtenu explicitement en décommentant la ligne de débogage près de la fin du code:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
    (LOAD_BALANCE=ON)(FAILOVER=ON)
    (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname1)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname2)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname3)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname4)(PORT=1521))
  )(CONNECT_DATA=(SID=ORCLSID)))
 3
Author: Joshua Huber, 2014-06-17 17:16:30

DriverManager#getConnection il tente lui-même d'établir une connexion à l'URL de base de données donnée. Le DriverManager tente de sélectionner un pilote approprié dans l'ensemble des pilotes JDBC enregistrés. et thorws SQLException si une erreur d'accès à la base de données se produit.

, Vous pouvez tester votre connexion est valide ou non avec Connection#isValid(int timeout) retourne true si la connexion n'a pas été fermé et est toujours valide.

...
Connection conn = DriverManager.getConnection(url, username, password);
boolean reachable = conn.isValid(10);// 10 sec
 15
Author: Subhrajyoti Majumder, 2013-09-12 05:49:09

Code Java simple pour vérifier la connexion à Oracle DB:

import java.sql.*;    
public class Test {
  private final static String DB_URL = "jdbc:oracle:thin:@//192.168.1.105:1521/MYORA";
  private final static String USER = "myuser";
  private final static String PASS = "mypwd";

  public static void main(String[] args) {
    Connection conn = null;  
    try {    
      Class.forName("oracle.jdbc.driver.OracleDriver");    
      System.out.println("Connecting to database...");    
      conn = DriverManager.getConnection(DB_URL,USER,PASS);    
    } catch (Exception e) {    
      e.printStackTrace();    
    } finally {    
      if (conn != null) {    
        try {    
          conn.close();    
        } catch (SQLException e) {    
          // ignore    
        }    
      }    
    }            
  }    
}
 7
Author: xDBA, 2016-06-21 14:06:40

Vous pouvez avoir un tableau des adresses IP de votre serveur de base de données et les parcourir. Pour chaque tentative de connexion échouée, vous pouvez passer à l'adresse IP suivante du tableau et réessayer. En cas de connexion réussie, vous y rompez la boucle et utilisez la connexion actuelle qui a été établie.

 0
Author: SudoRahul, 2013-09-12 05:41:29

Peut-être que vous devriez ping l'adresse IP du serveur. Tu devrais vérifier ça: La fonction Ping renvoie que toutes les adresses IP PING sont accessibles

 0
Author: Lei Leyba, 2017-05-23 11:54:26

Vous pouvez attraper SQLException à partir de DriverManager.getConnection() et cherche ORA-12543.
Lisez la documentation SQLException sur le code du fournisseur.

 0
Author: Luca Basso Ricci, 2013-09-12 05:44:38
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(“url”,”username”,”password ″); 

Plus Regarder ici:http://leezk.com/tag/jdbc

 0
Author: liunkor, 2013-09-12 05:56:11

"... et si ce n'est pas le cas, le programme se connectera au suivant ..." Je me demande si une chaîne de connexion de cluster contenant plusieurs adresses de serveur pourrait fonctionner pour vous. (Je n'ai pas essayé moi-même.) Regardez Chaîne de connexion Oracle pour l'environnement RAC.

 0
Author: halfbit, 2017-05-23 12:34:15

J'ai écrit une mini application en ligne de commande pour faire ce que font les exemples de code ci-dessus.

Https://github.com/aimtiaz11/oracle-jdbc-tester

Enregistre toute personne qui le code. Juste construire (avec maven) et de l'exécuter.

 0
Author: RogerIsDead, 2018-03-29 22:55:26