Использование JDBC
В этом разделе рассматриваются основные принципы использования JDBC, некоторые технические аспекты, потенциальные проблемы и т. д. За дополнительными сведениями обращайтесь на сайт JDBC (http://java.sun.com/products/jdbc/), на котором всегда приводится самая свежая информация и имеются ссылки на множество полезных ресурсов. Подробные описания конкретных классов, методов и полей приведены в документации API, входящей в комплект поставки JDK. Обращайтесь к пакету java.sql.
Классы JDBC представляют основные компоненты взаимодействия программы с SQL. У всех основных классов JDBC – Connection, Statement, ResultSet, Blob и Clob – имеются прямые аналоги в SQL. Кроме того, в JDBC включены вспомогательные классы – например, классы ResultsSetMetaData и DatabaseMetaData предназначены для работы с метаданными. В частности, они используются для получения информации о возможностях базы данных, для проверки типа результата запроса, в процессе отладки и просто в ситуациях, когда вы не располагаете информацией о данных, с которыми работаете.
Интерфейс JDBC в PostgreSQL также содержит классы для работы с нестандартными расширениями PostgreSQL. К их числу относятся Fastpath, геометрические типы, большие объекты и классы, упрощающие сериализацию объектов Java в базе данных.
Принципы использования JDBC
В листинге 12.2 приведен пример использования объекта Connection, представляющего физическое подключение к базе данных. Объект Connection требуется для создания объектов Statement, при помощи которых в JDBC базе данных передаются команды SQL.
Существует три разновидности объектов Statement: базовый класс Statement, классы PreparedStatement и CallableStatement.
Объект Statement создается методом createStatement (листинг 12.3).
Листинг 12.3. Создание объекта Statement.
Statement s = c.createStatement():
В листинге 12.3 создается объект класса Statement с именем s для объекта Connection с именем с. Далее созданный объект Statement может использоваться для выполнения запросов и обновлений базы данных.
В классе Statement особенно важны два метода. Первый, executeQuery, получает один аргумент (код выполняемой команды SQL) и возвращает объект класса ResultSet, о котором речь пойдет ниже. Метод executeQuery предназначен для выполнения команд, возвращающих наборы данных, например запросов SELECT. Возвращаемый объект ResultSet представляет данные, полученные в ходе запроса.
Пример выборки данных из базы booktown приведен в листинге 12.4.
Листинг 12.4. Простая выборка в JDBC.
Statement s = nul 1: try { s = c.createStatementO; } catch (SQLException se) { System.out.printlnC'We got an exception while creating a statement:" + "that probably means we're no longer connected."): se.printStackTrace(); System, exit(l); } ResultSet rs = null: try { rs = s.executeQuery("SELECT * FROM books"); } catch (SQLException se) { System.out.printlnC'We got an exception while executing our query:" + "that probably means our SQL is invalid"): se.pnntStackTrace(): System.exit(l): } int index = 0: try { while (rs.nextO) { System.out.printlnC'Here's the result of row " + index++ + ":"): System.out.pri ntln(rs.getStri ng(1)): } } catch (SQLException se) { System.out.pnntlnC'We got an exception while getting a result:this " + "shouldn't happen: we've done something really bad."); se.pnntStackTrace(); System.exit(l): }