Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не подключается к базе Oracle


Автор: worsvch 9.11.2013, 15:08
Написал програмку.
Результат:

jdbc:oracle:thin:@xx.xx.xx.xx:1521:test
Исключение: oracle.jdbc.driver.OracleDriver
Не могу подключиться к БД

При этом подключение проходит, если 
делать так:
sqlplus system/system@test

Подскажите, пожалуйста, где поменять, чтобы подключиться?

Код

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

// import java.sql.*;
// import oracle.jdbc.driver.*;

public class OraLogger {
    final private static String server = "xx.xx.xx.xx";
    final private static String sid = "test";
    final private static String user = "system";
    final private static String passw = "system";
    final private static String port = "1521";
    final private static String driverName ="oracle.jdbc.driver.OracleDriver";
    private static String url;
    private static Connection connection;
    private static boolean isConnected = false;
    String startMsg = "Выберите данные, которые Вы хотите получить: ";

    private static boolean connect() {
        try {
            url = "jdbc:oracle:thin:@"+server+":"+port+":"+sid;
            System.out.println(url);
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection(url,user,passw);
            if (connection.equals(null))
                isConnected = false;
            else 
                isConnected = true;
        }
        catch (ClassNotFoundException e) {
            System.out.println("Исключение: " + e.getMessage());
            isConnected = false;
        }
        catch (SQLException e) {
            System.out.println("Исключение: " + e.getMessage());
            isConnected = false;
        }
        
        return isConnected;
    }
    
    public static void main(String[] args) {
        if (connect())    System.out.println("Успешное подключение к БД");     
        else System.out.println("Не могу подключиться к БД");
    }

}

Автор: Pawl 9.11.2013, 22:08
Хмм, с виду, вроде, правильно... Может, приведете подробный стек ошибки?

Автор: LSD 11.11.2013, 15:15
Цитата(worsvch @  9.11.2013,  16:08 Найти цитируемый пост)
sqlplus system/system@test

Ну тогда уже неплохо было бы и tnsnames.ora показать.

Автор: worsvch 12.11.2013, 11:40
Цитата(Pawl @ 9.11.2013,  22:08)
Хмм, с виду, вроде, правильно... Может, приведете подробный стек ошибки?

Джаву изучаю недавно, не подскажете как это сделать?

Добавлено @ 11:45
Цитата(LSD @ 11.11.2013,  15:15)
Цитата(worsvch @  9.11.2013,  16:08 Найти цитируемый пост)
sqlplus system/system@test

Ну тогда уже неплохо было бы и tnsnames.ora показать.

test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = test)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )


Автор: LSD 12.11.2013, 13:00
Код

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

Автор: worsvch 12.11.2013, 15:41
Цитата(LSD @ 12.11.2013,  13:00)
Код

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

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:141)
        at OraLogger.connect(OraLogger.java:32)
        at OraLogger.main(OraLogger.java:48)

Понял что класс не найден, хотя на машине cтоит oracle 10g, а как же тогда быть, где его взять?

Автор: Pawl 12.11.2013, 18:04
Попробуйте глянуть http://www.sql.ru/forum/191834-a/oracle-jdbc-driver-oracledriver-ne-zagruzhen ссылку. Там была похожая проблема, решилась при помощи добавления нужных библиотек и установки ClassPath.
http://javarevisited.blogspot.com/2012/12/classnotfoundexception-oracle-jdbc-driver-oracledriver.html еще ссылка на ту же тему, где предлагается похожее решение, правда, на английском.

Автор: worsvch 13.11.2013, 15:38
Цитата(Pawl @ 12.11.2013,  18:04)
Попробуйте глянуть http://www.sql.ru/forum/191834-a/oracle-jdbc-driver-oracledriver-ne-zagruzhen ссылку. Там была похожая проблема, решилась при помощи добавления нужных библиотек и установки ClassPath.
http://javarevisited.blogspot.com/2012/12/classnotfoundexception-oracle-jdbc-driver-oracledriver.html еще ссылка на ту же тему, где предлагается похожее решение, правда, на английском.

Добавил classpath, но теперь другая проблема:
Exception in thread "main" java.lang.NoClassDefFoundError: OraLogger
Caused by: java.lang.ClassNotFoundException: OraLogger
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: OraLogger.  Program will exit.
Хотя ведь в java-файле есть такой класс

Автор: worsvch 13.11.2013, 17:21
С этой проблемой разобрался, теперь успешно подключается к экземпляру, но только к локальному,
Подключаюсь к удаленному, такая ошибка:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

хотя через sqlplus подключаюсь без проблем с этим пользователем/паролем@сидом

Добавлено через 5 минут и 39 секунд
Цитата(worsvch @ 13.11.2013,  17:21)
С этой проблемой разобрался, теперь успешно подключается к экземпляру, но только к локальному,
Подключаюсь к удаленному, такая ошибка:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

хотя через sqlplus подключаюсь без проблем с этим пользователем/паролем@сидом

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)