Использование 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.