Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_Архітектура Caché Java Binding.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
359.42 Кб
Скачать
  1. Реляційний доступ до даних

Окрім об’єктного доступу, Caché також надає декілька способів реляційного отримання даних з БД:

  • Методи-запити класу;

  • Динамічні запити;

  • Вбудований SQL ().

Використання методів-запитів

Caché автоматично генерує методи для кожного запиту в класі та додає до Java проекції. Для роботи із методами-запитами використовується клас com.intersys.objects.CacheQuery. Результат виконання запиту повертається у об’єкт класу java.sql.ResultSet, який дозволяє переміщуватися по записах, отримувати дані та метадані.

Примітка. Для того, щоб метод-запит класу повертав значення у застосування, він повинен містити ключове слово SqlProc.

Наприклад, якщо у класі Library.Type міститься метод-запит GetAllTypes, то для отримання даних, які він повертає потрібно використати наступний код:

DefaultTableModel dt = new DefaultTableModel();

try

{

CacheQuery query = new CacheQuery(db, "Library.Type", "GetAllTypes");

java.sql.ResultSet rs=query.execute();

while (rs.next()){

row[0] = rs.getString(1);

row[1] = rs.getString(2);

row[2] = rs.getString(3);

dt.addRow(row);

}

}

catch (CacheException e){System.out.println(e.getMessage());}

catch(SQLException e){System.out.println(e.getMessage());}

Для роботи із результатами запиту використовується стандартний клас обробки запитів java.sql.ResultSet, який може повертати виключну ситуацію класу SQLException, яку потрібно обробити.

Динамічні запити

Є два шляхи виконання динамічних запитів із Java застосування:

  • використовуючи метод інтерфейсу Database openByQuery;

  •  використовуючи об’єкт класу CacheQuery.

Інтерфейс Database містить метод openByQuery, в який потрібно передати строку із SQL-виразом для виконання і параметри запиту. Метод повертає об’єкт класу java.util.Iterator, який містить результат виконання запиту. Це дозволяє працювати із результатами запиту використовуючи стандартні об’єкти. Є декілька правил запису SQL-виразу:

  • перша колонка запиту має містити повне ім’я %ID колонки таблиці;

  • розділ ORDER BY має використовувати імена колонок для зазначення послідовності.

Наприклад:

public static void displayPhoneNumbersByTypeOBQ(Database db, String id, String type) throws CacheException{

Object[] args = {id, type};

String sql = "SELECT JavaTutorial.PhoneNumber.%ID FROM " +

"JavaTutorial.PhoneNumber WHERE Contact = ? AND PhoneNumberType = ?";

Iterator iter = db.openByQuery(sql, args);

while (iter.hasNext()){

PhoneNumber pn = (PhoneNumber)iter.next();

System.out.println("Type: " + pn.getPhoneNumberType() +

" Number: " + pn.getNumber());

}

}

Java клієнт також може виконувати динамічні запити використовуючи об’єкт класу CacheQuery. При цьому в конструктор об’єкта передається SQL-вираз. Метод execute даного об’єкту повертає об’єкт класу java.sql.ResultSet. Наприклад:

public static void displayPhoneNumbersByType(Database db,

String id, String type) throws CacheException, SQLException {

Id ID= new Id(id);

String SQL = "SELECT Number FROM JavaTutorial.PhoneNumber" +

" WHERE Contact='"+id +"' AND PhoneNumberType='" + type +"'";

CacheQuery query = new CacheQuery(db, SQL);

java.sql.ResultSet rs= query.execute();

while (rs.next()){

System.out.println(rs.getString(1));

}

}