Как упоминалось в основной статье, у нас нет времени детально обсуждать здесь тему разработки приложений. Но не случай, если вы интересуетесь, как Java-приложение может применять оператор SQL/XML SELECT, мы включили приведенную ниже выдержку из кода. Эта выдержка показывает, как определить имена клиентов, проживающих по заданному почтовому (zip) коду.
Если вы знакомы с JDBC, вы найдете этот пример легким для понимания. После объявления и определения необходимых переменных установление соединение с базой данных следует стандартному для DB2. Далее создается строка ("query"), которая содержит ваш оператор SELECT. Это тот же самый запрос, что и ранняя версия, которую мы создали в основной статье (Листинг 5), за исключением следующего:
SELECT, которые должны быть помещены в двойные кавычки. (В данном примере это "c" и "x".)
Затем вы подготавливаете оператор SELECT, устанавливая его входной параметр в вашу переменную, которая определена в Java-переменной "zipCode". Мы использум здесь тип String, поскольку определение XML-схемы, созданное в статье "Что нового в DB2 Viper" (developerWorks, March 2006) определяет, что zip-коды должны быть строками XML. Однако целочисленный тип тоже будет работать. Наконец, мы выполняем оператор, обрабатываем результат, как нам нужно, и закрываем соединение с базой данных.
Листинг A. Фрагменты Java-кода для применения оператора SQL/XML
. . .
// определение переменных
PreparedStatement selectStmt = null;
String query = null;
ResultSet rs = null;
Connection conn = null;
String zipCode = "95116";
try {
. . .
// получение соединения с DB2 следует стандартному процессу
. . .
// создание строки для нашего оператора SELECT
//
// если бы мы применяли этот запрос интерактивно, мы бы написали:
// select name from clients
// where xmlexists('$c/Client/Address[zip="95116"]'
// passing clients.contactinfo as "c")
//
// поскольку мы включаем его в Java-программу. нам необходимо использовать
// escape-символы при символах двойных кавычек.
// нам также необходимо явным образом приводить наш маркер параметра
// к соответствующему типу.
query = "select name from clients where xmlexists(" +
"'$c/Client/Address[zip=$x]' "+
"passing clients.contactinfo AS \"c\", cast(? as char(5)) as \"x\" )";
// подготовка оператора и установка входного параметра
selectStmt = conn.prepareStatement(query);
selectStmt.setString(1, zipCode);
// выполнение оператора
rs = selectStmt.executeQuery();
// обработка результата, как нам нужно
. . .
// освобождение ресурсов и закрытие соединения
. . .
}
catch (Exception e) { . . . }
|