java.net.UnknownHostException при попытке подключения к базе данных

2

Я пытаюсь подключиться к базе данных Oracle через Java с помощью драйвера JDBC Oracle со следующим кодом (скрывая хост, службу, пользователя и пароль):

import java.sql.*;

public class Main {
    public Main () {
        try {
            String host = "HOST_NAME";
            String port = "1521";
            String service = "SERVICE_NAME";
            String user = "SCHEMA_USER";
            String password = "SCHEMA_PASSWORD";

            Class.forName("oracle.jdbc.driver.OracleDriver");

            Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + 
                        host + 
                        ")(PORT=" + 
                        port + 
                        ")))(CONNECT_DATA=(SERVICE_NAME=" + 
                        service + 
                        ")))", 
                        user, 
                        password);

            connection.close ();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main (String args) {
        new Main ();
    }
}

Однако, я получаю следующую ошибку:

java.sql.SQLException: IO Error: The Network Adapter could not establish the connection
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.acxiom.axle.reporting.database.DatabaseConnection.connect(DatabaseConnection.java:23)
    at com.acxiom.axle.reporting.Reporting.establishDatabaseConnection(Reporting.java:53)
    at com.acxiom.axle.reporting.Reporting.beginReporting(Reporting.java:20)
    at com.acxiom.axle.reporting.Entry.<init>(Entry.java:28)
    at com.acxiom.axle.reporting.Entry.main(Entry.java:118)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:434)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:687)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:247)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
    ... 11 more
Caused by: java.net.UnknownHostException: null
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$2.lookupAllHostAddr(Unknown Source)
    at java.net.InetAddress.getAddressesFromNameService(Unknown Source)
    at java.net.InetAddress.getAllByName0(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:117)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
    ... 16 more

Странно, я могу подключиться к базе данных от PL/SQL Developer, я могу выполнить ping удаленный хост, и я могу telnet на удаленном хосте на порту 1521.

Почему только Java, похоже, дает исключение UnknownHostException, но я могу подключиться и выполнить ping-хост с другими приложениями?

EDIT: я удалил "hr/hr" из строки подключения выше. Я пробовал соединение как есть, удалив его и все еще получаю ту же ошибку. Я также попытался изменить строку подключения в соответствии с версией morgano, указанной в его ответе, с тем же результатом. Наконец, я попытался изменить номер порта на порт, который я знаю, что он не прослушивает, и он по-прежнему получает ту же ошибку.

  • 0
    читать здесь stackoverflow.com/questions/12574414/…
  • 0
    @PeterMmm Я уверен, что исключил три причины, перечисленные EJP в этом вопросе. База данных, безусловно, работает, так как я могу подключиться к ней через PL / SQL Developer и telnet, что также исключает проблему с брандмауэром. Что касается URL-адреса, я скопировал его непосредственно из tnsnames.ora, поэтому тот же URL-адрес, который использует PL / SQL Developer.
Показать ещё 4 комментария
Теги:
unknown-host

1 ответ

0

Ваш URL-адрес JDBC ошибочен, согласно документации, он должен выглядеть примерно так:

JDBC: оракул: driver_type: [имя пользователя/пароль] @//host_name: port_number/service_name

В вашем случае ваш код будет выглядеть примерно так:

import java.sql.*;

public class Main {

    public Main () {
        try {
            String host = "HOST_NAME";
            String port = "1521";
            String service = "SERVICE_NAME";
            String user = "SCHEMA_USER";
            String password = "SCHEMA_PASSWORD";

            Class.forName("oracle.jdbc.driver.OracleDriver");

            Connection connection = DriverManager.getConnection(
                "jdbc:oracle:thin:@//" + host
                + ":" + port + "/" + service, user, password);

            connection.close ();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main (String args) {
        new Main ();
    }
}
  • 0
    Я попытался указать это так же, как в вашем примере, но я все еще получаю те же ошибки. Моя исходная строка подключения была отформатирована в том же формате, что и в файле tnsnames.ora
  • 0
    Грива драйвера, попробуйте: oracle.jdbc.OracleDriver вместо oracle.jdbc.driver.OracleDriver

Ещё вопросы

Сообщество Overcoder
Наверх
Меню