Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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));

}

}

 

6. Доступ до даних за допомогою JDBC

Caché Java Binding іде в комплекті із JDBC драйвером, який підтримує стандарт JDBC 4.0 API і має наступні характеристики:

- прокручуваний результат вибірки;

- можливість змінювати дані результату вибірки;

- пакетне виконання SQL команд;

- типи даних, що підтримуються в SQL3.

Caché JDBC драйвер також міститься у архіві CacheDB.jar. Слід відзначити, що при простому Java зв’язуванні використовується JDBC драйвер для підключення до БД.

Окрім розглянутого метода CacheDatabase.getDatabase(url, username, pwd) для підключення до БД, використовуючи JDBC, краще виконувати метод getConnection класу com.intersys.jdbc.CacheDataSource, який повертає об’єкт стандартного класу java.sql.Connection:

CacheDataSource ds = new CacheDataSource();

ds.setURL("jdbc:Cache://127.0.0.1:1972/USER");

ds.setUser("_SYSTEM");

ds.setPassword("SYS");

Connection conn = ds.getConnection();

Після отримання об’єкта підключення до БД (як класу java.sql.Connection, так і com.intersys.objects.Database), можна виконувати запити, використовуючи стандартні засоби роботи із БД:

- клас Statement для виконання запитів до БД;

- клас PreparedStatement для внесення змін в БД;

- клас CallableStatement для виконання викликів збережених процедур.

Виконання запитів (select):

Connection conn = JDBCExamples.createConnection();

Statement stmt = conn.createStatement();

String query = "SELECT Name, ContactType FROM JavaTutorial.Contact";

ResultSet rs=stmt.executeQuery(query);

while (rs.next()){

String name = rs.getString(1);

String type = rs.getString(2);

System.out.println("Name: " + name + " Type: " + type);

}

rs.close();

Виконання запитів (insert, update, delete):

Connection conn = JDBCExamples.createConnection();

String sql =

"INSERT INTO JavaTutorial.PhoneNumber (Contact, Number, PhoneNumberType)"+

"VALUES (?,?,?)";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, contactId);

pstmt.setString(2, number);

pstmt.setString(3, type);

pstmt.executeUpdate();

Виклик збережених процедур:

Connection conn = JDBCExamples.createConnection();

CallableStatement cs = conn.prepareCall

("{call JavaTutorial.Contact_RetrieveByContactType(?)}");

cs.setString(1,type);

ResultSet rs = cs.executeQuery();

while (rs.next()){

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

}

rs.close();

 




Поделиться с друзьями:


Дата добавления: 2015-01-03; Просмотров: 344; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.037 сек.