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

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

Объект PreparedStatement

Объект PreparedStatement представляет подготовленные (prepared) команды SQL, многократно выполняемые с разными исходными данными – например, если вам потребовалось вставить в таблицу несколько записей, одну за другой. Главное преимущество PreparedStatement заключается в том, что команда проходит предварительную компиляцию, что избавляет от затрат на повторную обработку команд SQL при каждом выполнении. Пример использования объекта PreparedStatement приведен в листинге 12.6.

Листинг 12.6. Использование подготовленных команд в JDBC.

PreparedStatement ps = null:
try {
ps = c.prepareStatementC'INSERT INTO authors VALUES (?.?.?)");
ps.setlntd. 495):
ps.setString(2. "Light-Williams"):
ps.setStringO. "Corwin"): } catch (SQLException se) {
System.out.printlnC"We got an exception while preparing a statement:" +
"Probably bad SQL."):
se.printStackTrace();
System.exit(l);
}
try {
ps.executeUpdate():
} catch (SQLException se) {
System.out.printlnC'We got an exception while executing an update:" +
"possibly bad SQL .or check the connection."):
se.pnntStackTrace():
System.exit(l):
}

Как видно из листинга, подготовленная команда выглядит вполне привычно, разве что все переменные величины заменяются в ней вопросительными знаками (?). Присваивание выполняется методами класса PreparedStatement (setlnt, setString и т. д.). Выбор метода для каждого поля зависит от типа данных этого поля.

Объекты PreparedStatement удобны тем, что они обеспечивают автоматическое преобразование типов данных Java в типы SQL. Например, при переходе к типу text вам не нужно беспокоиться об экранировании символов или кавычках.

Обратите внимание: первый аргумент метода set идентифицирует номер позиции переменной (вопросительного знака), которой присваивается значение. Единица означает первый вопросительный знак, двойка – второй и т. д.

Другая сильная сторона PreparedStatement связана с тем, что объект можно снова и снова использовать с новыми данными, не создавая нового объекта Statement для каждого набора параметров. Конечно, такой подход более эффективен, поскольку он ограничивается созданием одного объекта, а новые значения переменных задаются методами set.

ResultSetMetaData

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

Из всех методов класса ResultSetMetaData чаще всего используются методы getCol umnName и getCol umnTypeName. Они возвращают соответственно имя поля и имя его типа данных в виде значения типа String.

Примечание
Не путайте метод getCol umnType с методом getCol umnTypeName. Метод getCol umnType возвращает значение типа int, соответствующее внутреннему идентификатору типа данных в JDBC, тогда как getCol umnTypeName возвращает имя типа в формате String
.

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