Выбрать главу

myStatement и myConnection:

□ myStatement.close();

myConnection. c lo s e ( );

Обычно объекты типа Statement и Connection следует закрывать во

фразе finally. Любой помещенный в нее код будет выполнен вне зависимости

от того, как управление будет передаваться из оператора try. Если нужно

добавить к вашим объектам Statement или Connection фразу finally, эти

объекты должны быть объявлены до первого оператора try/catch, используемого

для перехватывания исключительных ситуаций. В следующем

примере показано, как следует структурировать метод main(), чтобы можно

было закрыть объекты Statement и Connection во фразе finally:

□ p u b lic s t a t i c void main (S t r in g args [] {

/ / объявите объекты Connection и Statement

Connection myConnection = null;

Statement myStatement = null;

t r y { , .

/ / зарегистрируйте драйверы JDBC Oracle

Drive rManage r . reg is te rDr ive r (

new o ra c le , jd b c .d r iv e r .O r a c le D r iv e r ( )

);

/ / подключитесь к базе данных как store,

/ / используя тонкий драйвер JDBC Oracle

myConnection = DriverManager.getConnection(

«jdb c :o r a c le : th in :@ lo c a lh o s t :1521:ORCL»,

«store»,

«store_password»

);

/ / создайте объект Statement

myStatement = myConnection.createStatement();

/ / далее следует остальная часть вашего кода

} catch (SQLException е) {

е . printS tackTrace ( ) ;

} f i n a l l y {

t r y {

/ / закройте объект Statement, используя метод c lo s e ( )

i f (myStatement != n u l l ) {

myStatement. c lo s e ( );

}

/ / закройте объект Connection, используя метод c lo s e ( )

i f (myConnection != n u l l ) {

myConnection. c lo s e ();

}

} catch (SQLException e) {

574 Глава 15

е. p r in tS ta c kT ra ceO;

}}

} / / конец main()

Обратите внимание: код из фразы finally проверяет, не равны ли объекты

Statement и Connection NULL, прежде чем закрыть их с помощью метода

closeQ. Если они равны NULL, необходимость в их закрытии отпадает. Поскольку

код из фразы finally является последним выполняемым фрагментом

кода и так как он будет гарантированно выполнен, объекты Statement

и Connection будут в случае необходимости закрыты, независимо от того,

что произошло в программе. Для краткости фраза finally, которая закрывает

объекты Statement и Connection, включена только в первую программу,

показанную в этой главе.

Вы увидели, как писать выражения JDBC для подключения к базе данных,

исполнения выражений DML и DDL, управления транзакциями, обработки

исключений и закрытия объектов JDBC. В следующем разделе содержится

целая программа, которая иллюстрирует использование JDBC.

Пример программы: BasicExamplel.java

Программа BasicExamplel.java, показанная в приведенном ниже листинге,

является полной программой на Java, использующей JDBC для получения

доступа к таблицам базы данных, которыми владеет пользователь store.

Эту программу и другие программы, приведенные в этой главе, можно

найти в папке Java, куда вы записали Zip-файл для этой книги. Все программы

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

□ /.

Программа Bas icExample l. java показывает, как

— импортировать пакеты JDBC

— загружать драйверы JDBC Oracle

— подключаться к базе данных

— выполнять операторы DML

— управлять транзакциями

— использовать объекты ResultSet для выборки строк

- - использовать методы получения (get)

— выполнять операторы DDL

*/

/ / импортируйте пакеты JDBC

import j a v a . s q l . *;

p u b lic c la s s BasicExamplel {

p u b lic s t a t i c void main (S t r in g args [ ] ) {

//объявите объекты Connection и Statement

Connection myConnection = null;

Statement myStatement = null;

t r y {

/ / зарегистрируйте драйверы JDBC Oracle

Выполнение SQL с использованием Java 575

DriverManager. re g is te rD r iv e r (

new o r a c le . jd b c .O r a c le D r iv e r ( )

);

//ОТРЕДАКТИРУЙТЕ В СЛУЧАЕ НЕОБХОДИМОСТИ ДЛЯ СОЕДИНЕНИЯ С ВАШЕЙ БД

//создайте объект Connection и подключитесь к базе данных

/ / как store, используя тонкий драйвер JDBC Oracle

myConnection = DriverManager.getConnection(

« jd b c :o ra c le : th in :@lo c a lh o s t :1521:0RCL»,

«store»,

«store_password»

);

//отмените режим автофиксации

myConnection.setAutoCommit(false);

//создайте объект Statement

myStatement = MyConnection.createStatement();

/ / создайте переменные и объекты, используемые

/ / для представления значений столбцов

in t customerld = 6;

S t r in g firstName = «Jason»;

S t r in g lastName = «Red»;

java. sq l.Da te dob = j a v a . s q l . Date.valueOf(«1969-02-22»);

ja v a .sq l.Time dobTime;

java.sql.t ime s tamp dobTimestamp;

S t r in g phone = «800-555-1216»;

/ / выполните оператор SQL INSERT для добавления новой строки

/ / в таблицу customers, используя значения, установленные на предыдущем

//шаге - для выполнения INSERT используется метод executellpdate() объекта

Statement

myStatement.executeUpdate(

«INSERT INTO customers « +

«(customer_id, first_name, last_name, dob, phone) VALUES (« +

customerld + «, 1» + firstName + «', '» + lastName + «', « +