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


Автор: KISha 16.10.2008, 12:55
Народ помогите,
при запуск ява код
дает такую ошибку --->  java.sql.SQLException: NL Exception was generated
в чем проблема? понятие не имею. smile 
установлен jdk 1.5, jdbc драйвер ojdbc5.jar и Oracle 9.2i
PL/SQL работает.
Помогите пожалуйста в чем причина ?  smile  smile 

Автор: seth 16.10.2008, 13:23
Цитата(KISha @ 16.10.2008,  12:55)
Народ помогите,
при запуск ява код
дает такую ошибку --->  java.sql.SQLException: NL Exception was generated
в чем проблема? понятие не имею. smile 
установлен jdk 1.5, jdbc драйвер ojdbc5.jar и Oracle 9.2i
PL/SQL работает.
Помогите пожалуйста в чем причина ?  smile  smile

Гугл - первая сцылко: 
http://forums.oracle.com/forums/thread.jspa?messageID=2693825
Цитата

I had the same problem.
This was caused by my JDBC-string. I used a string like "jdbc:oracle:thin:@DESCRIPTION = (ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = ......
and I should have used "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = ......
Note that there is a '(' before DESCRIPTION.

т.е. должна быть ( перед DESCRIPTION в строке соединения

Автор: KISha 16.10.2008, 13:43
Нет у меня проблема не в этом, я так пробовал!
все равно ругает!
Код

....
try      {      Class.forName("oracle.jdbc.driver.OracleDriver");    }  
    catch(Exception e)    {  System.out.println("Calass is not finded!!! "+e); }
     try 
        {    
     con=DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION =" +
                  "(ADDRESS_LIST =" +
                         "(ADDRESS = (PROTOCOL = TCP)"+
                                      "(HOST = iomm87)"+
                                      "(PORT = 1521)"+
                           ")"+
                           "(CONNECT_DATA ="+
                              "(SERVER = DEDICATED)" +
                              "(SID = mybase)"+
                             ")"+
                     ")"  );
         
         Statement  sq=con.createStatement();
     ResultSet r=sq.executeQuery("select * from gm");
            md = r.getMetaData(); int NColumns =  md.getColumnCount();
      for(int i = 1; i <=NColumns; i++) 
           { 
                dtm.addColumn(md.getColumnName(i)); 
            }
    
       int k=0;
      String[] sd=new String[1000];
      int i1; 
          while(r.next())
          {
           for (i1 = 1; i1 <NColumns+1; i1++)   
              { 
                 sd[i1-1]=r.getString(i1);   
               }
                dtm.addRow(sd) ;
           
          }
        con.close();
       } catch(SQLException e) {   System.out.println("Error to connect !!!"+ e);  }  
...


Добавлено @ 13:51
пробовал так 
con=DriverManager.getConnection("jdbc:oracle:thin:@iomm87:1521:mybase","user","123");
но витоге ругает так 
Error to connect !!!java.sql.SQLException: Исключение ввода/вывода: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093888)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))


Автор: mbasil 16.10.2008, 14:08
Вынесите попытку подключения в отдельные блоки  try... catch, чтобы быть точно уверенным, что проблема не в дальнейшем коде, а именно в механизме подключения. И попробуйте обработать исключение примерно так:

Код

public void ptintSQLExceptions( SQLException p_ex )
{
 while (p_ex != null) {
   System.out.println( "Error code :" + p_ex.getErrorCode());
   System.out.println( "Msg : " + p_ex.getMessage()); 
   System.out.println( "SQL State : " + p_ex.getSQLState());
        p_ex = p_ex.getNextException();
 }
}

Автор: seth 16.10.2008, 14:27
Ну ошибка уже явно другая ;)
меня еще ojdbc5.jar смущает - попробуйте с сайта оракла скачать что то типо classes12.jar smile

Автор: KISha 16.10.2008, 15:24
Скачать драйвера для Oracle9i там дафига,
например:
Oracle9i 9.2.0.4 
Oracle9i 9.2.0.3 
Oracle9i 9.2.0.1 
Oracle9i 9.2.0.5  и т.д какой драйвер из них мне подходящий тут понятие не имею, smile 
думаю у меня проблема из за такого бардака,
может кто ни-будь скажет мне , какой из них мне подходят и как можно узнать  подходящий драйвера?  smile 




Автор: mbasil 16.10.2008, 15:33
classes12.jar  это вообще старье.

Проверил в документации ojdbc5.jar должен работать. 

Автор: KISha 16.10.2008, 15:54
mbasil у меня должно быть jdk1.2 или jdk1.3  для ojdbc5.jar?

Добавлено через 2 минуты и 43 секунды
Когда включаю classes12.jar дает такую ошибки
Error to connect !!!java.sql.SQLException: недействительные аргументы в вызове

Автор: mbasil 16.10.2008, 15:59
Цитата

JDBC Thin for All Platforms: 
 ojdbc5.jar (1,890,499 bytes) - Classes for use with JDK 1.5. It contains the JDBC driver classes, except classes for NLS support in Oracle Object and Collection types. 

 
Проблема скорее всего с сетью, LISTENER'ом или URL подключения

Автор: KISha 16.10.2008, 16:01
еще уменя есть j2sdk1.4.2_01 это считается как jdk1.4?

Автор: mbasil 16.10.2008, 16:05
Цитата

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

Автор: KISha 16.10.2008, 16:07
mbasil ты думаешь все это из за сеть ?
С сеткам все ОК!  

Автор: mbasil 16.10.2008, 16:16
В ошибке сказано же - LISTENER  не понимает SID : проверьте название экземпляра базы и его описание в процессе прослушивания. Кстати SID это не название базы, а название экземпляра, работающего с этой базой (у них могут быть разные названия). 
И вообще можно ли по этому адресу подключиться не из Java а с обычного клиента. 
Содержит ли файл LISTENER.ORA описание этого экземпляра и т.в. То есть дело не в драйвере.

Проверьте файл listener.log на сервере

Автор: KISha 17.10.2008, 08:56
у себя я не нашел listener.log файл а на сервере нет доступа!

Автор: mbasil 17.10.2008, 10:04
Тогда надо вступить в диалог с администратором сервера. Сообщите ему об  ORA-12505 покажите адрес :

iomm87:1521:mybase

скажите, что mybase это должен быть SID и попроcите проверить его правильность.

Автор: KISha 17.10.2008, 12:39
Они сказали iomm87:1521:mybase правильно.

У меня еще одна не понятное вещь,
когда я убираю ТНС файл из папки  ..\ora92\network\ADMIN все равно могу зайти 
в Developer (PL/SQL) т.е без ТНС файлом и тут совсем не понятно!

Добавлено через 1 минуту и 8 секунд
теперь, что мне сделать ?

Автор: mbasil 17.10.2008, 13:19
Что касается Developer (PL/SQL) у него могут быть свои сетевые настройки.
Вторая возможность у вас в файле sqlnet.ora картина, отличающаяся от следующей:

Код
NAMES.DIRECTORY_PATH= (TNSNAMES)


то есть не используется файл TNSNAMES. Однако все это не должно никак влиять на Java приложение.

По косвенной информации можно понять, что у вас стоит клиент, который может подключаться к серверу.
Очевидно это клиент под Windows? Запустите sqlplusw и попробуйте подключиться из него.
Или используйте утилиту 

Код
>TNSPING xxx 4


Где xxx  ссылка на вход в TNSNAMES, вспомните ваш код
Код

con=DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION =" +
                  "(ADDRESS_LIST =" +
                         "(ADDRESS = (PROTOCOL = TCP)"+
                                      "(HOST = iomm87)"+
                                      "(PORT = 1521)"+
                           ")"+
                           "(CONNECT_DATA ="+
                              "(SERVER = DEDICATED)" +
                              "(SID = mybase)"+
                             ")"+
                     ")"  );


Кстати на всякий случай уберите фразу  (SERVER = DEDICATED).

Если у вас IP адреса статические можно использовать вместо имени хоста IP адрес.

Но, вообще говоря все это для меня пока остается загадкой. Если клиент с этой машины и с использованием этого адреса коннектится, то и Java приложение тоже должно.

Автор: KISha 17.10.2008, 14:12
убрал (SERVER = DEDICATED) и место хоста поль-ся IP адрес
все ровно регает 
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

Не ужели не получается, не думал что так случиться, вот почему большинство программистов не исполь-ся Java, для новичков как я это как геморой, если честно я устал от такого мелочи.
сделал то что смог! Надо было заняться с С#! тогда не будет ни каких проблем!
Спасибо васем за помощь!

Автор: mbasil 17.10.2008, 14:34
Не сдавайтесь, это лишь досадная препона, которую вы должны победить.
.NET не наше решение !
Вы проверили, обычный клиент подключается?

Кроме того, за умение решать такие проблемы нам и платят зар.плату! 

Автор: KISha 17.10.2008, 17:27
Спасибо за моральную потдержку, я не сдаюсь, но что же мне сделать если ни чего не получится? да .NET не наш стиль, Когда я в первые раз пробовал на Access -е все было как в сказке, но с Оракл-ом почему-то не везъет.Сейчась я на www.oracle.com и там обсуждаем!

Автор: mbasil 17.10.2008, 20:00
Oracle это весьма "крутая" система. Первое своё серьёзное приложение я писал вслепую и только после того, как (по настоянию руководства) начал читать курсы по администрированию Oracle, я начал кое-что понимать (хочу отметить: кое-что).
Существует негласный некий "мейнстрим" и его следует придерживаться (именно негласный). 
Народ спорит доказывает ту или иную правоту. Ищите "мейнстрим" и не ошибётесь.
На сегодня "мейнстрим" это Oracle + JEE (пусть не ругают меня поборники других технологий, я вовсе не отрицаю их, а лишь говорю о "мейнстриме" в разработке технологий).

Чтобы научиться писать СИСТЕМЫ на Oracle требуются годы, но это окупается.

Ваша проблема, скорее всего очень проста, но её трудно "ухватить за хвост". решите проблему подключения и дальше все пойдет проще. К сожалению такую проблему трудно решать удалённым образом.

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