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 + «', « +