Базы данных Oracle - статьи

         

Пример программирования в Java


В клиентской программе на Java обращаться к БД через ссылку на курсор можно с помощью собственных расширений, сделанных фирмой Oracle в реализации ею драйвера JDBC. В программе ниже предполагается имя СУБД MYDB. Обратите внимание, что текст с запросом SQL передается нашему пакету объектом класса CallableStatement, а извлечение в программу ссылки на курсор делается после приведения этого объекта к сугубо Oracle’овскому классу OracleCallableStatement.

Получение в программу ссылки на курсор соответствует формированию объекта класса ResultSet, обработка которого делается стандартно.

Выдача второго запроса в программе ниже демонстрирует возможность использования одного и того же пакета для получения результата разной структуры. Очевидно, по своей гибкости эта техника находится посередине между тем, что имеется в PL/SQL и в SQL*Plus.

Подготовим файл GenericRefCursor.java: import java.sql.DriverManager; import java.sql.Connection; import java.sql.CallableStatement; import java.sql.ResultSet; import oracle.jdbc.driver.OracleCallableStatement; import oracle.jdbc.driver.OracleTypes;public class GenericRefCursor

{public static void main ( String[] args ) {

try { DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver ( ) );

Connection cn; cn = DriverManager.getConnection ( "jdbc:oracle:oci:@mydb", "scott", "tiger" );

CallableStatement cst; OracleCallableStatement ocst; ResultSet rs;

cst = cn.prepareCall ( "BEGIN generic_ref_cursor.get_ref_cursor ( ?, ? ); END;" ); cst.setString ( 1, "SELECT sal FROM emp" ); cst.registerOutParameter ( 2, OracleTypes.CURSOR );

cst.execute ( );

ocst = ( OracleCallableStatement ) cst;

rs = ocst.getCursor ( 2 );

while ( rs.next ( ) ) { System.out.println ( rs.getInt ( 1 ) ); }

/* Новый запрос ... */ cst.setString ( 1, "SELECT dname, loc FROM dept" ); cst.execute ( ); rs = ocst.getCursor ( 2 ); while ( rs.next ( ) ) { System.out.println ( rs.getString ( 1 ) + rs.getString ( 2 ) ); }

/* ... и так далее, запрос за запросом */ cst.close ( ); } catch ( Exception e ){System.out.println ( e ); } }

}

В ОС оттранслируем класс GenericRefCursor и выполним программу: >javac GenericRefCursor.java >java GenericRefCursor



Содержание раздела