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

методов установки для связывания атрибутов объектов Product в

productArray с объектом PreparedStatement. Обратите внимание, что для

фактического выполнения оператора SQL используется метод executeQ:

□ for (in t counter = 0; counter < productArray.length; counter ++) {

myPrepStatement.setlnt(1, productArray[counter].productld);

myPrepStatement. set Int (-2, 'productArray[counter]. productTypeld);

myPrepStatement.setString(3, productArray[counter],name);

myPrepStatement.setString(4, productArray[counter].description);

myPrepStatement.setDouble(5, productArrayfcounter].price);

myPrepStatement.execute();

} // end of for loop

После завершения этого оператора таблица products будет содержать

пять новых строк.

Для установки столбца базы данных в NULL с помощью объекта

PreparedStatement можно использовать метод SETNULL(). Следующий оператор

устанавливает в NULL столбец description:

□ myPrepStatement.setNull(4, java.sql.Types.VARCHAR);

Первый параметр вызова метода SETNULL() является численной позицией

столбца, который вы хотите установить в NULL. Второй параметр имеет

тип int и соответствует типу того столбца базы данных, который вы хотите

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

одной из констант, определенных в классе java.sql.Types. Для столбца

типа VARCHAR2 (столбец description был описан именно таким образом) следует

использовать j ava. sq l. Тypes. VARCHAR.

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

Приведенная в следующем листинге программа BasicExample2.java содержит

операторы, о которых шла речь в предыдущем разделе.

П /*

Программа BasicExample2.java демонстрирует, как использовать подготовленные

операторы SQL

*/

584 Глава 15

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

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

c la s s Product {

in t productld;

in t productType;

S t r in g name;

S t r in g d e s c r ip t io n ;

double price;

}p

u b lic c la s s BasicExample2 {

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

t r y {

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

Dr ive rManage r . reg is te rDr iv e r(

new o r a c le . jd b c .O r a c leD r iv e rO

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

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

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

Connection myConnection = DriverManager.getConnection(

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

«store»,

«store_password»)

);

/ / отключите режим автофиксации

myConnection.setAutoCommit(false);

Product [] productArray = new Product [5];

fo r ( in t counter = 0; counter < productArray.length; counter ++) {

productArray[counter] = new ProductO;

produc tAr ray [counter ] ,produc tld = counter + 13;

productAr ray[counter ],produc tTypeld = 1;

productArray[counter].name = «Test product»;

p ro d u c tA r ra y [c o u n te r ] ,d e s c r ip t io n = «Test product»;

p ro d u c tA r ra y [co u n te r ] .p r ice = 19.95;

} / / end of fo r loop

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

PreparedStatement myPreparedStatement = myConnection.prepareStatement

(

«INSERT INTO products «+

«(product_id, product_type_id, name, d e s c r ip t io n , p r ic e ) VALUES (« +

«? ? , ? , ? , ? » +

“ ) ’’

);

/ / инициализируйте значения для новых строк, используя

/ / соответствующие методы создания

fo r ( in t counter = 0; counter < productAr ray.length; counter ++) {

myPrepStatement.setlnt(1, produ c tAr ra y [counte r ] . p ro d u c t ld ) ;

myPrepStatement.setlnt(2, produ c tAr ra y [counte r ] . productTypeld);

myPrepStatement.setString(3, produ c tAr ra y [counte r ] . name);

myPrepStatement.setString(4, produ c tAr ra y [counte r ] .d e s c r ip t io n ) ;

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

myPrepStatement. setDouble(5, pro du c tAr ra y [counte r ] . pr ice ) ;

myPrepStatement. exe cute( );

} / / end of fo r loop

//закройте объект PreparedStatement

myPrepStatement.close();

/ / выберите для этих новых строк значения столбцов product_id,

/ / product_type_id, name, d e s c r ip t io n и pr ice , используя объект

ResultSet

Statement myStatement = myConnection.createStatement();

ResultSet productResultSet = myStatement. executeQuery(

«SELECT product_id, product_type_id, « +

« name, d e s c r ip t io n , p r ice « +

«FROM products « +

«WHERE product_id > 12»

);

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

while (p ro d uc tR e sultS e t.ne x t ( ) ) {

S y s tem.out.pr in tln(«produ c t_id = « +

produc tResultSe t .ge tInt («pro duc t_ id ») );

Sys tem.out.pr intln(«predubt_type_id = « +

produc tResultSe t . g e t ln t ( “ product_type_id” ));

S y s tem .o u t .p r in t ln ( “ name = “ +

produc tResultSe t .getSt r in g ( “name"));

S y s tem .o u t .p r in t ln ( "d e s c r ip t io n = “ +

pro d u c tR e su ltS e t .g e tS t r in g ( “d e s c r ip t io n ” ));

S y s tem .o u t .p r in t ln ( “ p r ic e = “ +

produc tRe sultSe t . getDouble(“ p r i c e ” ));

} / / end of while loop

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

produc tResultSe t . c lo s e ( );

/ / откатите изменения, внесенные в базу данных

myConnection.rollback();

/ / закройте другие объекты JDBC

myStatement.close();

myConnection.close();

} catch (SQLException e) {

System, out. p r in t ln (« E r ro r code = « + e. getErrorCod.e());

S y s tem.o u t .p r in t ln (« E r ro r message = « + e.getMessage());

System, out. p r intln(«SQL State = « + e.getSQLStateO) ;

e .p r in tS ta c kT ra ce ( );

}

} / / end of main()

}

Выходные данные программы выглядят следующим образом:

□ product_id = 13

product_type_id = 1

name = Test product