Подключение к оракловой базе из консольного и GUI приложения
От: Александр  
Дата: 17.08.09 10:04
Оценка:
Среда разработки NetBeans 6.7 RC1 (также пробовал 6.5)
jdk1.6.0_14

ОС winXP SP3

При подключении к оракловой базе через консольное приложение проблем не возникает. А при создании приложения с графическим интерфейсом, тот же класс зависает на подключении и где-то через минуту выдаёт эксепшен:
java.sql.SQLException: Исключение ввода/вывода: The Network Adapter could not establish the connection

Всё стопорится на DriverManager.getConnection(this.dbURL, properties);

При этом на компах с 2003 сервером программа работает и с графическим интерфейсом

куда хотяб копать? Может, NetBeans настроить надо как-то по особенному?

Конструктор класса :

    /**
     * Конструктор получает логин, пароль, адрес базы данных 
     * @param login логин базы данных
     * @param pass пароль базы данных
     * @param dbURL адрес базы данных "@//путь:порт/инстенс"
     * @param log указатель на лог файл
     */
    public DataBaseRW(String login, String pass, String dbURL, LAVFileWriter log) {
        if (log != null) {
            log.writeToFile("Подготовка данных для подключения к базе...");
        }
        this.setLogin(login);
        this.setPass(pass);
        //"jdbc:oracle:thin:@//sdsl-test:1521/sdsltest";
        this.setDbURL("jdbc:oracle:thin:" + dbURL);
        this.log = log;

        // инициализировать и загрузить драйвер JDBC
        try {
            Class.forName("oracle.jdbc.OracleDriver");
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            if (log != null) {
                log.writeToFile(ex.getLocalizedMessage());
            }
            return;
        }
        try {
            Properties properties = new Properties();
            properties.setProperty("user", this.login);
            properties.setProperty("password", this.pass);

            if (log != null) {
                log.writeToFile("Попытка подключиться к базе данных...");
            }

            this.conList = DriverManager.getConnection(this.dbURL, properties);

//*** На этом всё и останавливается ***

        this.stmtList = conList.createStatement(); 
            if (log != null) {
                log.writeToFile("Подключено успешно.");
            }

        } catch (SQLException ex) {
            Logger.getLogger(DataBaseRW.class.getName()).log(Level.SEVERE, "Ошибка при подключении к базе данных", ex);
            if (log != null) {
                log.writeToFile("Ошибка при подключении к базе данных: " + ex.getLocalizedMessage() + " = " + ex);
            }
            this.close();
            this.stmtList = null;        
        }
    }
netbeans oracle
Re: Подключение к оракловой базе из консольного и GUI прилож
От: KRA Украина  
Дата: 17.08.09 10:12
Оценка:
Здравствуйте, Александр, Вы писали:

А>куда хотяб копать? Может, NetBeans настроить надо как-то по особенному?


Я бы для начала исколючил две возможных проблемы
1. разные username/password/dburl при запуске гуи и негуи.
2. блокирование javaw.exe файрволом.
Re: Подключение к оракловой базе из консольного и GUI прилож
От: PAS_Tor Германия http://passtor.blogspot.com/
Дата: 17.08.09 10:26
Оценка:
Здравствуйте, Александр, Вы писали:

А>java.sql.SQLException: Исключение ввода/вывода: The Network Adapter could not establish the connection


А>Всё стопорится на DriverManager.getConnection(this.dbURL, properties);


Коннекты не теряете (правильно ли закрываете все коннекции в случае любых исключений)? Возможно кол-во открытых потеряных коннекций превышает соответствующий лимит базы — соответственно она больше не даёт выделять новые?
Follow my blog @ http://passtor.blogspot.com/
Re[2]: Подключение к оракловой базе из консольного и GUI при
От: Александр  
Дата: 17.08.09 10:27
Оценка:
Здравствуйте, KRA, Вы писали:

KRA>Здравствуйте, Александр, Вы писали:


А>>куда хотяб копать? Может, NetBeans настроить надо как-то по особенному?


KRA>Я бы для начала исколючил две возможных проблемы

KRA>1. разные username/password/dburl при запуске гуи и негуи.

Они одинаковые.

KRA>2. блокирование javaw.exe файрволом.


Вообще отключил фаервол, тожесамое.
Re[3]: Подключение к оракловой базе из консольного и GUI при
От: KRA Украина  
Дата: 17.08.09 10:32
Оценка:
Здравствуйте, Александр, Вы писали:

А>Здравствуйте, KRA, Вы писали:


KRA>>Здравствуйте, Александр, Вы писали:


А>>>куда хотяб копать? Может, NetBeans настроить надо как-то по особенному?


KRA>>Я бы для начала исколючил две возможных проблемы

KRA>>1. разные username/password/dburl при запуске гуи и негуи.

А>Они одинаковые.


KRA>>2. блокирование javaw.exe файрволом.


А>Вообще отключил фаервол, тожесамое.


Тогда ставить tcp proxy между приложением и БД. Перенаправить jdbc url так, чтоб связь была через прокси и смотреть, идёт ли траффик с клиента, отвечает ли сервер, и по этому делать вывод кто виноват, клиент или сервер.
Re[3]: Подключение к оракловой базе из консольного и GUI при
От: KRA Украина  
Дата: 17.08.09 10:34
Оценка:
Здравствуйте, Александр, Вы писали:

А>Здравствуйте, KRA, Вы писали:


KRA>>Здравствуйте, Александр, Вы писали:


А>>>куда хотяб копать? Может, NetBeans настроить надо как-то по особенному?


KRA>>Я бы для начала исколючил две возможных проблемы

KRA>>1. разные username/password/dburl при запуске гуи и негуи.

А>Они одинаковые.


KRA>>2. блокирование javaw.exe файрволом.


А>Вообще отключил фаервол, тожесамое.


Если запускать приложение не из нетбинса, работает?
Re[2]: Подключение к оракловой базе из консольного и GUI при
От: Александр  
Дата: 17.08.09 10:38
Оценка:
Здравствуйте, PAS_Tor, Вы писали:

PAS>Здравствуйте, Александр, Вы писали:


А>>java.sql.SQLException: Исключение ввода/вывода: The Network Adapter could not establish the connection


А>>Всё стопорится на DriverManager.getConnection(this.dbURL, properties);


PAS>Коннекты не теряете (правильно ли закрываете все коннекции в случае любых исключений)?


При выходе везде юзаю метод:

    public void close() {
        try {
            if (this.stmtList != null) {
                this.stmtList.close();
            }
            if (this.stmtList != null) {
                this.conList.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


+ На сервере по таймауту 5 минут до кика.
Re[4]: Подключение к оракловой базе из консольного и GUI при
От: Александр  
Дата: 17.08.09 10:41
Оценка:
Здравствуйте, KRA, Вы писали:

KRA>Если запускать приложение не из нетбинса, работает?


Графическое нет.

Но консольное то работает. Подключается, данные пишет.
Re[3]: Подключение к оракловой базе из консольного и GUI при
От: PAS_Tor Германия http://passtor.blogspot.com/
Дата: 17.08.09 10:48
Оценка:
Здравствуйте, Александр, Вы писали:

1. По коду, который вы привели close() дергается только в случае SQLException, а в случае успешного выполнения или другого исключения нет. В данномм случае finally хороший тон.

2. В приведенном ниже коде копи-пастная опечатка?

А>При выходе везде юзаю метод:


А>
А>    public void close() {
А>        try {
А>            if (this.stmtList != null) {
А>                this.stmtList.close();
А>            }
А>            if (this.stmtList != null) {
А>                this.conList.close();
А>            }
А>        } catch (Exception e) {
А>            e.printStackTrace();
А>        }
А>    }
А>


А> + На сервере по таймауту 5 минут до кика.


Да, все мои рассуждения были основаны на том, что вам таки удавалось хоть иногда из графического приложения получить коннект.

А вообще, правильно говорят выше — надо сначала узнать где ошибка, доходит ли запрос до БД, что она отвечает, ну и логи в зубы
Follow my blog @ http://passtor.blogspot.com/
Re: Подключение к оракловой базе из консольного и GUI прилож
От: toxel Россия http://myalfresco.blogspot.com
Дата: 18.08.09 14:38
Оценка:
Здравствуйте, Александр, Вы писали:

проверьте в tnsnames на каком хосте и порту база,
сделайте tnsping sdsl-test — точно ли listener слушает подключения к БД
Re[2]: Подключение к оракловой базе из консольного и GUI при
От: Александр  
Дата: 21.08.09 04:40
Оценка:
Здравствуйте, toxel, Вы писали:

T>Здравствуйте, Александр, Вы писали:


T>проверьте в tnsnames на каком хосте и порту база,

T>сделайте tnsping sdsl-test — точно ли listener слушает подключения к БД

Всё работает.

TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 21-└┬├-20
09 08:35:46

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

╚ёяюы№чютрэ√ Їрщы√ ярЁрьхЄЁют:
E:\oracle\ora92\network\admin\sqlnet.ora

╚ёяюы№чютрэ рфряЄхЁ HOSTNAME фы  ЁрчЁх°хэш  яёхтфюэшьр
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SID=*)(SERVICE_NAME=sdsl-test)
)(ADDRESS=(PROTOCOL=TCP)(HOST=sdsl-test)(PORT=1521)))
OK (30 ьёхъ)


Проблема где-то в jave. Т.к. консольное приложение с базой работает без проблем. А построенное в визуальном редакторе нетбинсов не хочет...
Re: Подключение к оракловой базе из консольного и GUI прилож
От: Vampiro  
Дата: 24.08.09 17:14
Оценка:
Здравствуйте, Александр, Вы писали:

А>Среда разработки NetBeans 6.7 RC1 (также пробовал 6.5)

А>jdk1.6.0_14

Вы не одиноки в своей проблеме, люди тоже жалуются на NetBeans.

посмотрите здесь http://www.java-forums.org/web-frameworks/2946-problems-connecting-oracle-db-netbeans.html
Re[2]: Подключение к оракловой базе из консольного и GUI при
От: Vampiro  
Дата: 24.08.09 17:21
Оценка:
Здравствуйте, Vampiro, Вы писали:

V>Здравствуйте, Александр, Вы писали:


А>>Среда разработки NetBeans 6.7 RC1 (также пробовал 6.5)

А>>jdk1.6.0_14

V>Вы не одиноки в своей проблеме, люди тоже жалуются на NetBeans.


V>посмотрите здесь http://www.java-forums.org/web-frameworks/2946-problems-connecting-oracle-db-netbeans.html


вот еще по теме(гугл кстати переполнен этой проблемой)

http://forums.netbeans.org/topic9318.html

и убедитесь что пользуете правильный драйвер — http://wiki.netbeans.org/DatabasesAndDrivers#section-DatabasesAndDrivers-OracleDriverForTheOracle10.xDatabase
Re[3]: Подключение к оракловой базе из консольного и GUI при
От: Vampiro  
Дата: 24.08.09 17:24
Оценка:
обратите внимание на свою версию JDK и то, какой ей драйвер сопоставим — для примера : ojdbc5.jar (JDK 1.5), ojdbc6.jar (JDK 1.6)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.