русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-05-29; переглядів: 929.


План

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() для підрахунку числа рядків, модифікованих командою.


 


<== попередня лекція | наступна лекція ==>
Тема 16 Робота з локальним файлом бази даних | Тема 18 Пакет java.net. Клас URL. Завантаження даних з сервера


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн