Подключение Java к Oracle Grid - строка подключения к БД - PullRequest
1 голос
/ 22 июля 2011

Это строка подключения БД к Oracle

ABCSERVICE =
 (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = servername1-vip.test.ampf.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = servername2-vip.test.ampf.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = servername3-vip.test.ampf.com)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = ABCSERVICE)
)
)

Я использовал один из серверов, и соединение работает. Мне нужна помощь в создании строки подключения для вышеуказанной сетки Oracle один, чтобы в случае сбоя следующий сервер был выбран

Строка подключения для одного сервера

JDBC: оракул: тонкий: @ // servername1-vip.test.ampf.com/ABCSERVICE

Программа для одного сервера

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

public class DBConnection {

public static void executeQuery(final Connection connection) throws SQLException
  {
      try{

            // test the conenction here and it works

            }

        }catch (SQLException e) {
            System.out.println(e);
        }
  }



public static void main(final String[] args) throws Exception{

Connection connection = null;
try {
    // Load the JDBC driver
    String driverName = "oracle.jdbc.driver.OracleDriver";
    Class.forName(driverName);

    // Create a connection to the database
    String serverName = "servername1-vip.test.ampf.com";
    String portNumber = "1521";
    String serviceName = "ABCSERVICE";

    String url = "jdbc:oracle:thin:@//" + serverName + ":" + portNumber + "/" + serviceName;
    System.out.println(url);
    String username = "userName";
    String password = "passWord";
    connection = DriverManager.getConnection(url, username, password);

    executeQuery(connection);
} catch (ClassNotFoundException e) {
    System.out.println(e);
} catch (SQLException e) {
    // Could not connect to the database
    System.out.println(e);
}

}
     }

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

В URL JDBC просто замените все после '@' строкой, начинающейся с "(ОПИСАНИЕ". Т.е.:

jdbc:oracle:thin:@(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = servername1-vip.test.ampf.com)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = servername2-vip.test.ampf.com)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = servername3-vip.test.ampf.com)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = ABCSERVICE)
    )
)

Вы также можете настроить файл tnsnames и вместо этого относятся к , но я только смутно знаком с этим подходом.

0 голосов
/ 29 июля 2013

Вы можете использовать следующий метод, чтобы получить строку соединения оракула.hostPortMap - это карта имени сервера и порта.Итак, используя значение из вашего примера

Map<String, String> hostPortMap  = new HashMap();
hostPortMap.put("servername1-vip.test.ampf.com", "1521");
hostPortMap.put("servername2-vip.test.ampf.com", "1521");
hostPortMap.put("servername3-vip.test.ampf.com", "1521");


    public static String getOracleConnectionString(Map<String, String> hostPortMap, String serviceName){

        String connectionURLTemplate =  "jdbc:oracle:thin:@(description ={0}(connect_data=(service_name={1})))";
        String addressTemplate = "(address = (protocol = tcp)(host = {0})(port = {1}))";


        StringBuilder addresses = new StringBuilder();
        for (Map.Entry<String, String> entry : hostPortMap.entrySet()){
             addresses.append(MessageFormat.format(addressTemplate, new Object[]{entry.getKey(), entry.getValue()})) ;
        }
        String connectionURL = MessageFormat.format(connectionURLTemplate, new Object[]{addresses, serviceName});
        System.out.println(connectionURL);
        return connectionURL;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...