Иллюстрированный самоучитель по PostgreSQL

Использование JDBC

Сначала мы создаем объект Statement, а затем используем метод executeQuery этого объекта для выполнения запроса SELECT * FROM books. Возвращенный запросом объект ResultSet используется для вывода полученной информации.

Объект ResultSet предоставляет основной интерфейс выборки из базы данных. Он обладает двумя основными возможностями: возможностью последовательного перебора полученных записей и возможностью возвращения значения заданного поля текущей записи. Принцип перебора такой же, как в стандартных перечислениях Java: вы начинаете перебор в позиции перед первым элементом и последовательно переходите к следующему элементу методом next.

Метод next возвращает true в том случае, если объект ResultSet успешно перешел к следующей записи (то есть в итоговом наборе еще остались необработанные записи). Цикл whiIe в листинге 12.4 выводит значение первого поля каждой из возвращаемых записей. Если итоговый набор не содержит ни одной записи, первый же вызов next вернет false и программа ничего не выведет.

Класс ResultSet может возвращать значения различных типов; в листинге 12.4 первое поле интерпретируется как строка (Stri ng). К счастью, все стандартные типы данных SQL могут быть представлены в строковом виде, поэтому независимо от типа данных вы всегда сможете получить значение первого поля и вывести его. Класс ResultSet содержит множество других методов, включая методы выборки для всех типов данных SQL и преобразования их к типам Java. За дополнительной информацией обращайтесь к описанию ResultSet в документации API.

Другой важный метод, executeUpdate, тоже вызывается с одним аргументом – выполняемой командой SQL Различие между executeQuery и executeUpdate состоит в том, что метод executeUpdate предназначен для выполнения команд, изменяющих состояние данных в базе. Например, при вызове executeUpdate для команды CREATE, INSERT или UPDATE возвращается число типа int, определяющее количество модифицированных записей.

В листинге 12.5 метод executeUpdate используется для вставки новой записи в таблицу books.

Листинг 12.5. Простая вставка в JDBC.

Statement s – null: try {
s = c.createStatement():
} 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.exlt(1):
}
int m = 0;
try {
m = s.executeUpdateC1 INSERT INTO books VALUES " +
"(41472. 'Practical PostgreSGl'. 1212. 4)"):>
} catch (SQLException se) {
System.out.println("We got an exception while executing our query:" +
"that probably means our SQL is invalid"):>
se.printStackTrace():
System.exit(l):
}
System.out.println("Successfully modified " + m + " rows.\n"):

Нетривиальные возможности JDBC

Как упоминалось выше, кроме базового объекта Statement в JDBC существует два других типа объектов для представления команд: PreparedStatement и CallableStatement. Они будут описаны ниже.

В данном подразделе также будет рассказано об объектах ResultsSetMetaData и DatabaseMetaData. С их помощью можно запросить у JDBC описание результатов запроса или базы данных. Возможность получения такой информации на стадии выполнения программы позволяет динамически выполнять команды SQL – даже такие, параметры которых были неизвестны на момент написания программы.

Объект CallableStatement

Объект CallableStatement позволяет выполнять хранимые процедуры в JDBC-co-вместимых базах данных. Лучшим источником информации по этому вопросу является сайт Sun Javasoft (http://java.sun.com/products/jdbc/), поскольку стандарт вызываемых команд (callable statements) изменяется и развивается и его практические применения зависят от версии Java и JDBC.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.