методов установки для связывания атрибутов объектов 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