Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Тема 18 Пакет java.net. Клас URL. Завантаження даних з сервера

План

План

Тема 16 Робота з локальним файлом бази даних

1 Підтримка переносимості за допомогою файлів властивостей

2 Обробка помилок і звільнення ресурсів

 

1 Підтримка переносимості за допомогою файлів властивостей

Хоча наша увага зосереджена на двох конкретних базах даних, гарною практикою програмування на Java є забезпечення повної переносимості додатків. Під переносимостю звичайно мається на увазі, що ви не пишете код, призначений для виконання тільки на якійсь одній платформі. Однак для Java термін «переносимість» має більш сильний зміст. Воно означає незалежність від апаратних ресурсів і незалежність від бази даних.

Ми сказали про те, що JDBC URL та ім'я Driver залежать від реалізації, але не сказали, як уникнути їхнього включення в код. Оскільки й те, і інше являє собою прості рядки, їх можна передати як параметри командного рядка або як параметри апплетів. Це робоче, але навряд чи елегантне рішення, оскільки воно вимагає, щоб користувач пам'ятав довгі командні рядки. Аналогічне рішення - видавати користувачеві запрошення для введення цих даних, що знов-таки вимагає, щоб користувач згадував JDBC URL і ім'я класу Java при кожному запуску додатка.

Більш витончене рішення виходить при використанні файлу властивостей. Файли властивостей підтримуються класом java.util.Resource-Bundle і його підкласами, дозволяючи додатку витягати дані з текстового файлу. Для додатка, що використовує JDBC, можна вставити у файл властивостей URL і ім'я Driver, поклавши на адміністратора додатка обов'язок вказати деталі з'єднання.Приклад файлу SelectResource.properties

 

Driver=com.imaginary.sql.msql.MsqlDriver

URL=jdbc:msql://athens.imaginary.com:1114/db_test

У прикладі 14-3 показаний стерпний клас Connection.

Приклад програми:

 

import java.sql.*; import java.util.*;

public class Connect {

public static void main(String argv[]) {

Connection con = null;

ResourceBundle bundle = ResourceBundle.getBundle("SelectResource");

try {

String url = bundle.getString("URL");

Statement stmt; ResultSet rs;

Class.forName(bundle.getString("Driver")); // тут здійснюється з'єднання

con = DriverManager.getConnection(url, "borg", ""); }

catch( SQLException e ) { e. printStackTrace();

}

finally

{

if( con != null )

{

try { con.close(); }

catch( Exception e ) { }

}

}

}

}

2 Обробка помилок і звільнення ресурсів

Всі методи JDBC можуть породжувати SQLException або один з підкласів цього класу, якщо щось відбувається при звертанні до бази даних. Ваш код повинен вміти перехоплювати виняткову ситуацію, обробляти її й звільняти всі розміщені в пам'яті ресурси бази даних. Всі перераховані дотепер класи JDBC мають метод close(). Однак на практиці ви повинні забезпечити закриття тільки тих об'єктів, які викликані процесами, що продовжують залишатися відкритими. У наведених прикладах було потрібно закрити тільки з'єднання з базою даних. При закритті з'єднання автоматично закриваються всі пов'язані з ним команди й результуючі набори. Однак якщо ви маєте намір зберегти з'єднання відкритим протягом деякого часу, буде правильним поспішити закрити всі об'єкти statement, які ви створили з використанням цього з'єднання, коли вони вам більше не потрібні. В прикладах JDBC, які ви бачили, це звільнення ресурсів виконується в блоці finally. Це робиться для того, щоб забезпечити закриття з'єднання незалежно від того, що відбудеться.


 

Тема 17 Підключення до бази даних по мережі

1 Динамічний доступ до бази даних

2 Метадані

3 Обробка динамічного SQL

 

1 Динамічний доступ до бази даних

Дотепер ми мали справу з додатками, у яких під час компіляції точно відомо, що потрібно буде робити. Якби це був єдиний тип підтримки, забезпечуваний JDBC, ніхто не зміг би написати для Mysql і msql інтерактивні інструменти командного рядка, здатні під час виконання приймати команди SQL і виконувати їх. Клас JDBC Statement підтримує метод execute() для виконання SQL-команд, які можуть бути запитами або відновленнями. Крім того, екземпляри ResultSet забезпечують надання про себе інформації часу виконання через інтерфейс із ім'ям ResultSetMetaData, доступ до якого здійснюється через виклик методу getMetaData() для ResultSet.

 

2 Метадані

Термін метадані – це, насправді, не більш ніж додаткові дані про деякий об'єкт, які, якби дійсно зберігалися в об'єкті, просто зряче витрачали б ресурси. Наприклад, для простих додатків не потрібні імена стовпчиків, пов'язаних з результуючим набором ResultSet: програмістові вони, швидше за все, відомі під час написання програми. Тому приміщення цих додаткових даних у клас ResultSet не розглядається розроблювачами JDBC як щось істотне для функціональності ResultSet. Однак у деяких випадках програмування баз даних i такі речі, як імена колонок, дуже важливі, особливо при здійсненні динамічного доступу до баз даних. Доступ до цих додаткових даних - метаданих - розроблювачі JDBC забезпечили через інтерфейс ResultSetMetaData. Цей клас дозволяє довідатися:

- число стовпчиків у результуючому наборі.

- чи є NULL припустимим значенням у колонку.

- мітку, використовувану для заголовка стовпчика.

- ім'я заданого стовпчика.

- таблицю, що служить джерелом даних для даного стовпчика.

- тип дані стовпчики.

Іншим прикладом класу, що поставляється разом із драйвером mSQL-JDBC, є додаток Exec. Воно приймає будь-яку команду SQL, що задається в командному рядку, і виконує її. Приклад:

 

import java.sql.*;

public class Exec {

public static void main(String args[]) {

Connection con = null; String sql = "";

for(int i=0; i<args.length; i++) {

sql = sql + args[i];

if( i < args.length - 1 ) {

sql = sql + " ";

}

}

System, out. рrintln("Виконання: " + sql);

try {

Class.forName("com.imaginary. sql.msql.MsqlDriver").newlnstance();

String url = "jdbc:msql://athens.imaginary.com:1114/db_test";

con = DriverManager.getConnection(url, "borg", "");

Statement s = con.createStatement();

if( s.execute(sql) ) {

ResultSet r = s.getResultSet();

ResultSetMetaData meta = r.getMetaData();

int cols = meta.getColumnCount();

int rownum = 0;

while( r.next() ) { rownum++;

System, out. println("Crpокa: " + rownum);

for(int i=0; i<cols; i++) {

System.out.print(meta.getColumnLabel(i+1) + ": ' + r.getObject(i+1) + ", ")

}

System.out.println("");

}

}

else

{

System.out.println(s.getUpdateCount() + " рядків оброблено.");

}

s.close();

con.close();

}

catch( Exception,e ) { e. printStackTrace();

}

finally

{

if( con != null )

{

try { con.close();

}

catch( SQLException e ) { }

}

}

}

}

Для кожного результуючого набору забезпечується одержання екземпляра ResultSetMetaData за допомогою методу getMetaData(). При динамічному доступі до бази даних необхідно довідатися, скільки стовпчиків у результуючому наборі, щоб із упевненістю витягти всі стовпчики і їхні імена для виводу користувачеві. Метадані нашого результуючого набору забезпечують одержання всіх цих даних за допомогою методів getColumnCount() і getColumnLabel().

3 Обробка динамічного SQL

Оскільки ми не знаємо, буде це запит на одержання даних або відновлення, потрібно передати виклик SQL через метод execute(). Цей метод повертає true, якщо команда повернула результуючий набір, і false у противному випадку. У нашім прикладі, якщо вертається true, той додаток одержує що повертається ResultSet через виклик методу getResultSet(). Потім додаток може перейти до звичайної обробки результуючого набору. Якщо, навпроти, команда зробила яку-небудь модифікацію бази даних, можна викликати метод getUpdateCu-unt() для підрахунку числа рядків, модифікованих командою.


 


Читайте також:

  1. Internet. - це мережа з комутацією пакетів, і її можна порівняти з організацією роботи звичайної пошти.
  2. АДАПТАЦІЯ ОПЕРАЦІЙНОЇ СИСТЕМИ ДО ЗМІНИ ЇЇ ЗАВАНТАЖЕННЯ.
  3. Адаптивні хвилькові перетворення : Хвилькові пакети.
  4. Аналіз паралельного інтерейсу з DSP-процесорами: запис даних в ЦАП, що під’єднаний до адресного простору пам’яті
  5. Аналіз паралельного інтерфейсу з DSP-процесорами: читання даних з АЦП, що під’єднаний до адресного простору пам’яті
  6. Аналіз статистичних даних про склад та плинність кадрів, які обіймали керівні
  7. Аналіз та інтерпретація одержаних даних
  8. Аналітичний розрахунок завантаження горловин
  9. Аналітичний розрахунок сумарного завантаження типових перетинань
  10. Архіватори даних.
  11. Архітектура баз даних
  12. Аудит розрахунків за відшкодуванням завданих збитків




Переглядів: 855

<== попередня сторінка | наступна сторінка ==>
Використання класу Connection | Методи класу URL

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.018 сек.