Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jdbc+oracle, ref cursor как out-параметр процедуры, интересную фигню обнаружил 
:(
    Опции темы
KostenkoSergey
Дата 18.3.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



Есть хранимая процедура(оракл), в качестве оут-параметра возвращает курсор (ref cursor).
Так вот на thin драйвере не работает метод ResultSet.isBeforeFirst()... вернее возвращает false, в то время, как на oci - отрабатывает нормально... 

Может кто сталкивался, хелп ?  Это баг драйвера али так и должно быть .....  smile 
PM ICQ   Вверх
KostenkoSergey
Дата 18.3.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



закачал последний драйвер - сичас вообще пишет:

java.sql.SQLException: Закрытая команда: next 

Таких приколов ещё не видел....
PM ICQ   Вверх
KostenkoSergey
Дата 10.4.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



совсем запутался... 
взял ждбс от 9-ки - вернуло тру, как и положено ... может кто даст линк на стабильный драйвер какой нить.. буду оч. признателен.

Чтот пугает меня разное поведение от драйвера к драйверу ... :(

Это сообщение отредактировал(а) KostenkoSergey - 10.4.2008, 12:33
PM ICQ   Вверх
mbasil
Дата 10.4.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Приведенный ниже фрагмент работает с тонким драйвером. С OCI не могу проверить нет под руками.
К сожалению действительно - тонкий драйвер в такой ситуации создает курсоп, скроллируемы только в одном направлении. Если надо все-же скролировать набор туда и обратно попробуйте закинуть данные из ResultSet  в OracleRowSet. С год назад пробовал - его вовсе можно отсоединить от базы и в файл записать.
Код

import java.sql.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
import oracle.jdbc.*;

class ExApp_4
{
 private Connection conn;
 private static Properties connInfo;
 private static final String driverName = "oracle.jdbc.driver.OracleDriver";
 private String dbUrl = "jdbc:oracle:thin:@localhost:1521/XE";
 private Locale defLoc = Locale.getDefault();
//-------------------
public void selDept()
{
 if (conn == null) {
         System.out.println("NULL Connection in callEmp() !" );
         System.exit( 0 ); 
     }
 SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
 CallableStatement cstmt = null;
 ResultSet rset = null;
 String block = "begin open ? for select ename, hiredate from emp; end;";
 try {
     cstmt = conn.prepareCall( block );
     cstmt.registerOutParameter( 1 );
     cstmt.execute();
     rset = ((OracleCallableStatement)cstmt).getCursor(1);
     if (rset != null) checkWarnings( rset.getWarnings() );
     System.out.println("============== first time ===============");
     while( rset.next() ) {
        java.sql.Date dt = rset.getDate(2);
        System.out.println( rset.getString(1) + "   " + df.format(dt) );
       }
     System.out.println("========================================");
  }
 catch ( SQLException eSQL ) { ptintSQLExceptions( eSQL ); }
 catch ( Exception e ) { System.out.println("Error: " + e); }
 finally {
   try {
         if (rset != null) rset.close();
         if (cstmt != null) cstmt.close();
         if (conn != null) conn.close();
       } catch (Exception e) {}
  }
}
//--------------------
public void getConn()
{
 try {
      Locale.setDefault( Locale.US );
      conn = DriverManager.getConnection( dbUrl, connInfo );
      if (conn != null) checkWarnings( conn.getWarnings() );
 //     if( defLoc != null )  Locale.setDefault( defLoc );
  }
 catch ( SQLException eSQL ) { ptintSQLExceptions( eSQL ); }
 catch ( Exception e ) { System.out.println("Error: " + e); }  
}
//-------------------------------------------------
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();
 }
}
//--------------------------------------
public void checkWarnings( SQLWarning p_warn )
{
 if( p_warn != null ) {
   while( p_warn != null ) {
    System.out.println("Warning code :" + p_warn.getErrorCode());
    System.out.println("Msg : " + p_warn.getMessage()); 
    System.out.println( "SQL State : " + p_warn.getSQLState());
        p_warn = p_warn.getNextWarning();
   } 
 }
}
//======================================
public static void main (String args [])
{
  connInfo = new Properties();
  connInfo.put( "user", "scott" );
  connInfo.put( "password", "tiger" );
  try {
        Class.forName( driverName ).newInstance();
   }
  catch (Exception e) { 
      System.err.println (
    "ERROR: Driver <" + driverName + "> not found");
      System.exit(0);
   }
   ExApp_4 a = new ExApp_4();
      a.getConn();
      a.selDept();
}
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.