wake-up-neo.net

So testen Sie die Verbindung zu Oracle Database mit Java

Gibt es eine Möglichkeit, meine Verbindung zur Oracle-Datenbank mit Java zu testen? Hier ist mein 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);
    }
}

Was ich tun möchte, ist die Datenbank zu testen, wenn sie erreichbar ist, und wenn nicht, dann stellt das Programm eine Verbindung zur nächsten Datenbank her. Ich habe 8 Produktionsdatenbank.

10
Bimbz

Das Rad nicht neu erfinden. Der JDBC-Treiber von Oracle verfügt bereits über diese integrierte Funktionalität.

Dies ist nützlich: 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);
    }
}

Der obige Code erstellt und verwendet eine URL, die so aussah (als Beispiel unten). Ich habe dies explizit erhalten, indem ich die Debugging-Zeile am Ende des Codes dekommentiert habe:

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 es versucht selbst, eine Verbindung zur angegebenen Datenbank-URL herzustellen. Der DriverManager versucht, aus der Gruppe der registrierten JDBC-Treiber einen geeigneten Treiber auszuwählen. und thorws SQLException, wenn ein Datenbankzugriffsfehler auftritt.

sie können testen, ob die Verbindung gültig ist oder nicht. Mit Connection#isValid(int timeout) wird true zurückgegeben, wenn die Verbindung nicht geschlossen wurde und noch gültig ist.

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

Einfacher Java-Code zum Überprüfen der Verbindung zu 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    
        }    
      }    
    }            
  }    
}
8
xDBA

"... und wenn nicht, dann verbindet sich das Programm mit dem nächsten ..." Ich frage mich, ob eine Cluster-Verbindungszeichenfolge mit mehreren Serveradressen für Sie funktionieren könnte. (Ich habe es nicht selbst versucht.) Schauen Sie unter Oracle Connection String für RAC-Umgebung .

0
halfbit

Zum Testen der Verbindung werde ich zwei Methoden erstellen und verwenden: für die Verbindung zu db und zum Testen dieser Verbindung:

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 () - Standardverbindung zu Ihrer Datenbank. Werte von IP, Port, DB-Name, Benutzername und Kennwort werden von Ihnen übernommen.

isConnected () - erster Teil überprüfen Sie Ihre Verbindung und zweitens Teil überprüft die Richtigkeit der Arbeit mit der Datenbank. Da kann eine Verbindung sein, aber keinen Zugriff für Anfragen.

Sie können ein Array Ihrer Datenbankserver-IPS erstellen und diese überarbeiten. Bei jedem fehlgeschlagenen Verbindungsversuch können Sie mit der nächsten IP des Arrays fortfahren und es erneut versuchen. Im Falle einer erfolgreichen Verbindung unterbrechen Sie die Schleife dort und verwenden die aktuelle Verbindung, die hergestellt wurde.

0
SudoRahul

Vielleicht sollten Sie die IP-Adresse des Servers anpingen. Sie sollten dies überprüfen: Die Ping-Funktion gibt an, dass alle Ping-IP-Adressen erreichbar sind.

0
Lei Leyba

Sie können SQLException von DriverManager.getConnection() abfangen und nach ORA-12543 suchen.
Lesen Sie die SQLException-Dokumentation zum Herstellercode.

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

mehr dazu hier: http://leezk.com/tag/jdbc

0
liunkor

Ich habe eine Mini-Befehlszeilen-App geschrieben, um die oben genannten Codebeispiele auszuführen. 

https://github.com/aimtiaz11/Oracle-jdbc-tester

Spart jeden, der es verschlüsselt. Einfach (mit Maven) bauen und ausführen.

0
RogerIsDead