web-dev-qa-db-fra.com

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

Est-il possible 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.

10
Bimbz

Ne réinventez pas la roue. Le pilote JDBC d’Oracle intègre déjà cette fonctionnalité.

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 crée et utilise en fait une URL ressemblant à ceci (par exemple, belows). Je l'ai explicitement obtenu en supprimant la mise en commentaire de la ligne de débogage vers 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)))
7
Joshua Huber

DriverManager#getConnection it self tente d'établir une connexion avec l'URL de la base de données donnée. 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 vérifier si votre connexion est valide ou non avec Connection#isValid(int timeout) renvoie true si la connexion n'a pas été fermée et est toujours valide.

...
Connection conn = DriverManager.getConnection(url, username, password);
boolean reachable = conn.isValid(10);// 10 sec
17

Code Java simple pour vérifier la connexion à la base de données Oracle:

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    
        }    
      }    
    }            
  }    
}
8
xDBA

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

0
halfbit

Pour tester la connexion, je vais créer et utiliser 2 méthodes: pour la connexion à la base de données et pour tester cette connexion:

Class Connector {
private static final String CONNECTION_STRING = "jdbc:Oracle:thin:@//%s:%d/%s";
private static final String QUERY_IS_CONNECTED = "SELECT * FROM table WHERE field = 'example'";
private static final Log LOG = LogFactory.getLog(Connector.class);

public Connection createConnection() {
    Connection connection = null;
    try {
        Class.forName("Oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection(String.format(CONNECTION_STRING, "127.0.0.1", "1521", "dbName"), "userName", "password");
    } catch (Exception e) {
        LOG.error("createConnection: connection error");
    }

 return connection;
}

public boolean isConnected() {

        try (Connection connection = createConnection()) {
            if (connection.isClosed()) {
                    return false;
            }

            try (Statement statement = connection.createStatement();
                 ResultSet resultSet = statement.executeQuery(QUERY_IS_CONNECTED)) {
                if (resultSet == null) {
                    return false;
                }
            } catch (Exception e) {
                LOG.error("isConnected: Query error", e);
                return false;
            }
        } catch (Exception e) {
            LOG.error("isConnected: Check connection error", e);
            return false;
        }

        return true;
    }
}

createConnection () - connexion par défaut à votre base de données. Valeurs de ip, port, nom_base, nom_utilisateur et mot de passe vous appartiendront.

isConnected () - vérification de la première partie de votre connexion et seconde une partie vérifie si le travail avec la base de données est correct. Comme il peut être une connexion, mais ne pas être un accès pour les demandes.

Vous pouvez avoir un tableau des ips de votre serveur de base de données et les parcourir par-dessus. Pour chaque tentative de connexion échouée, vous pouvez passer à l'ip suivante du tableau et réessayer. En cas de réussite de la connexion, vous interrompez la boucle et utilisez la connexion actuelle établie.

0
SudoRahul

Peut-être devriez-vous envoyer une requête ping à l'adresse IP du serveur. Vous devriez vérifier ceci: La fonction Ping indique que toutes les adresses IP cinglées sont accessibles

0
Lei Leyba

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

0
Luca Basso Ricci
Class.forName("Oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(“url”,”username”,”password ″); 

regardez plus ici: http://leezk.com/tag/jdbc

0
liunkor

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 quiconque le codant. Il suffit de construire (avec maven) et l’exécuter.

0
RogerIsDead