Прежде чем будет дан пример второго метода, использующего интерфейсные
классы, следует понять, что такое на самом деле интерфейсные
классы. Интерфейсные классы определяются в пакете java.lang, где дано
семь таких классов:
□ * java.lang.Short
* java.lang.Integer
* java.lang.Long
* java.lang.Float
* java.lang.Double
* java.lang.Boolean
* java.lang.Byte
Определенные с помощью этих интерфейсных классов объекты могут
быть использованы для представления значений базы данных NULL для различных
числовых типов, а также для типа Boolean. Когда значение NULL
выбирается из базы данных в такой объект, в нем будет содержаться значение
NULL Java. В следующем примере объявляется объект java.lang.Integer
по имени productTypeld:
□ java.lang.Integer productTypeld;
Теперь в productTypeld может быть записано значение базы данных
NULL, используя метод getObject():
□ producttypeld =
(java.lang.Integer) productResultset.getObject(“product_type_id” );
Метод getObject() возвращает экземпляр класса java.lang.Object и должен
быть приведен к подходящему типу, в данном случае - к ranyjava.lang.
Integer. Если предположить, что этот пример читает из productResultSet ту
же самую строку, что в предыдущем примере, getObject ( ) возвратит значение
Java NULL, и это значение будет скопировано в productTypeld. Если выбранное
из базы данных значение отлично от NULL, productTypeld будет
содержать именно это значение. Например, если выбранное из базы данных
значение равно 1, в productTypeld будет содержаться 1.
Для присвоения столбцу обычного значения или значения NULL можно
также использовать интерфейсный объект в операторе JDBC, выполняющем
операторы INSERT или UPDATE. Если нужно установить значение столбца
в NULL, используя интерфейсный объект, следует установить этот интерфейсный
объект в NULL и использовать для установки в NULL значения
столбца базы данных оператор INSERT или UPDATE. В следующем примере
устанавливается в NULL столбец price для товара № 12, используя объект
java.lang.Double, который был установлен в NULL:
□ java.lang.Double price = null;
myStatement.executeUpdate(
“UPDATE products “ +
“SET price = “ + price + “ " +
“WHERE product_id = 12"
);
570 Глава 15
Управление транзакциями базы данных
В главе 8 вы узнали о транзакциях базы данных и о том, как использовать
оператор SQL COMMIT для того, чтобы сделать постоянными изменения,
произведенные с содержимым таблиц. Там было также показано, что для
отмены сделанных в базе данных изменений используется оператор
ROLLBACK. Те же самые концепции применимы и к операторам SQL, выполняемым
посредством операторов JDBC в программе Hajava.
По умолчанию результаты выполняемых с помощью операторов JDBC
операторов INSERT, UPDATE и DELETE немедленно фиксируются. Такой режим
известен как режим автофиксации (auto-commit). Как правило, использование
режима автофиксации не является предпочтительным способом
фиксирования изменений, потому что он идет вразрез с представлением
о транзакции как о логической единице работы. В режиме автофиксации
каждый оператор рассматривается как индивидуальная транзакция,
а это обычно оказывается неверным предположением. Кроме того, при
использовании этого режима для выполнения операторов потребуется
больше времени, так как фиксироваться всегда будет каждый оператор.
Режим автофиксации может быть включен или отключен, для чего используется
метод SETAutoCommit() класса Connection, передающий логическое
значение true или false. В следующем примере отключается режим
auto-commit для объекта Connection по имени myConnection:
□ myConnection.setAutoCommit(false);
Примечание Вам следует отключать режим автофиксации. Это позволит ускорить выполнение
программ.
После отключения режима автофиксации можно фиксировать изменения,
сделанные при выполнении транзакций, используя метод commit ( )
класса Connection, или откатывать эти изменения, используя метод
rollback(). В следующем примере для фиксирования изменений, произведенных
в базе данных, используется метод commit ( ) для объекта
myConnection:
□ myConnection.commit();
В следующем примере для отката произведенных изменений применяется
метод rollback():
□ meConnection.rollback();
Если режим автофиксации был отключен, то при закрытии объекта
Connection будет выполнена неявная фиксация сделанных изменений.
Следовательно, любые операторы DML, которые были выполнены к этому
моменту времени, но не были зафиксированы, будут зафиксированы
автоматически.
Выполнение операторов языка определения данных
Операторы языка определения данных (Data Definition Language - DDL)