Вернуться в статью


Простой Java-пример

Как упоминалось в основной статье, у нас нет времени детально обсуждать здесь тему разработки приложений. Но не случай, если вы интересуетесь, как Java-приложение может применять оператор SQL/XML SELECT, мы включили приведенную ниже выдержку из кода. Эта выдержка показывает, как определить имена клиентов, проживающих по заданному почтовому (zip) коду.

Если вы знакомы с JDBC, вы найдете этот пример легким для понимания. После объявления и определения необходимых переменных установление соединение с базой данных следует стандартному для DB2. Далее создается строка ("query"), которая содержит ваш оператор SELECT. Это тот же самый запрос, что и ранняя версия, которую мы создали в основной статье (Листинг 5), за исключением следующего:

Затем вы подготавливаете оператор 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) { . . .  }

Вернуться в статью