русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Підключення до бази даних


Дата добавления: 2015-06-12; просмотров: 1081; Нарушение авторских прав


Після реєстрації драйвера з допомогою диспетчера драйверів його можна застосувати для під’єднання до бази даних. Про створення нового під’єднання треба повідомити диспетчера. Отримавши повідомлення, диспетчер викличе відповідний драйвер і поверне вказівник на встановлене під’єднання.. Для створення під’єднання необхідно вказати місце розташування бази даних, ім’я коистувача та пароль. Створення під’єднання відбувається за допомогою об’єкту класу Connection:

Connection connection=DriverManager.getConnection(url, username, password);

Згідно встановленим правилам Internet, база даних і засоби її обслуговування ідентифікуються за допомогою URL, який задається у форматі:

jdbc:дод– протокол:дод– ім’я

де “дод– протокол” – назва драйвера, їх набору або механізму встановлення з'єднання з базою даних; “дод– ім’я” –додаткова інформація для вказаного набору. Наприклад, при застосуванні ODBC в URL– рядок підставляється ця назва та DSN– назва (Data Source Name) джерела з ODBC.INI файла: jdbc:odbc:dBase

Якщо замість ODBC використовується ім'я мережевого сервісу до бази даних, то до адреси URL входить назва сервера, порт, назва директорії, файла тощо.

Завдяки універсальності і доступності механізм JDBC– ODBC– міст використовується частіше. Він реалізований у вигляді JdbcOdbc.class (для платформи Windows JdbcOdbc.dll) і входить у різні версії JDK. Крім JdbcOdbc– бібліотек існують спеціальні драйвера, які реалізують безпосередній доступ до баз даних через стандартний інтерфейс ODBC. Як правило, вони описуються в файлі ODBC.INI. На внутрішньому рівні JDBC– ODBC– Міст відображає методи Java у виклики ODBC і цим дозволяє використати будь– які існуючі драйвери ODBC.

Доступ до таблиць баз даних з Java– програми здійснюється з допомогою методів класу Statement. Об’єкти цього класу призначені для зберігання SQL– команд і вони створюються методом createStatement класу Connection. Після пересилання об’єкту типу Statementдо бази даних з допомогою встановленого під’єднання СУБД виконає отриману SQL– команду і поверне результат її виконання у виді об’єкту класу ResultSet(рис.2).



 
 

 


Рис.2. Класи взаємодії програми з СУБД

Методи класу Statementповинні завжди виконуватись в межах блоку try{ } catch . Розглянемо приклад встановлення вказівника на номер запису (рядка) в таблиці перегляду при виконанні SQLзапиту. Драйвер фізично копіює з бази даних запис з цим номером (для клієнта – fetch size). Цей параметр призначений для підвищення ефективності програми перегляду таблиць. Вказвник можна визначити методом getFetchSize, задавати методом setFetchSize(int fetchSize) і ним же перевизначити у вихідному об’єкті результатів класу ResultSet. Розглянемо приклад роботи з вказівником:

try {

Statement stmt = connection.createStatement();

int fetchSize = stmt.getFetchSize();// вказівник на біжучий запис

stmt.setFetchSize(100); // вказівник на 100– ий запис ResultSet resultSet = stmt.executeQuery("SELECT * FROM my_table"); // об’єкт результату, як результат виконання executeQuery

resultSet.setFetchSize(100); // вказівник на запис 100

} catch (SQLException e) {

}

Розглянемо тепер приклад доступу до конкретних даних (рядків, стовпців, клітинок) з результуючого об’єкту класу ResultSet, надісланого драйвером. Доступ до полів рядка є можливий, якщо останній є біжучим. Рядок, означений вказівником, вважається біжучим. Початкове положення вказівника на запис знаходиться перед першим рядком. Після виклику методу next вказівник встановлюється на перший рядок, який стає біжучим. Можливими є два способи отримати дані з біжучого рядка. Перший використовує індекс стовпчика, починаючи з першого. Другий використовує назву стовпця. Наприклад, для запиту SELECT col1, col2 FROM my_tableзначення з стовпця col2 можна отримати за індексом стовпця 2 або за його назвою col2. Наведений приклад демонструє ці два способи.

try {

Statement stmt = connection.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM my_table");

while (rs.next()) { // зміна номеру запису

String s = rs.getString(2);// дані з клітинки (за індексом стовпця)

s = rs.getString(" col2 ");// дані з рядка за назвою стовпця

}

} catch (SQLException e) {

}

Кожна база даних характеризується типами даних, які можна зберігати у таблицях. Нижче наведено приклад виділення даних з типами СУБД MySQL (назви типів вказані при описі змінних та об’єктів, як і в назвах відповідних методів).

try {Statement stmt = connection.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM mysql_all_table");while (rs.next()) {boolean bool = rs.getBoolean("col_boolean");byte b = rs.getByte("col_byte");short s = rs.getShort("col_short");int i = rs.getInt("col_int");long l = rs.getLong("col_long");float f = rs.getFloat("col_float");double d = rs.getDouble("col_double");BigDecimal bd = rs.getBigDecimal("col_bigdecimal");String str = rs.getString("col_string");Date date = rs.getDate("col_date");Time t = rs.getTime("col_time");Timestamp ts = rs.getTimestamp("col_timestamp");InputStream ais = rs.getAsciiStream("col_asciistream");InputStream bis = rs.getBinaryStream("col_binarystream"); Blob blob = rs.getBlob("col_blob"); }} catch (SQLException e) { }

Наряду з вибором даних з таблиць об’єкти класу Statementвикористовуються для внесення змін до відповідних таблиць, наприклад при внесенні змін до рядка (при цьому слід пам’ятати про стан вказівника на рядки таблиці) :

try {

Statement stmt = connection.createStatement();

String sql = "INSERT INTO my_table (col_string) VALUES('a string')";

stmt.executeUpdate(sql); // внести зміни до таблиці

} catch (SQLException e) {

}

Якщо програма містить SQL – запит, який має виконуватись декілька разів, але з різними значеннями, то для підвищення ефективності роботи програми слід використати апарат “попередньо підготовлених команд”. Наприклад, якщо з web– сторінки з допомогою запиту ведеться пошук інформації про товари на основі їх ідентифікаторів, то у цьому випадку має використовуватись попередньо підготовлена команда. Для того, щоб інтерпретація SQL– команди здійснювалась тільки один раз диспетчери баз даних підтримують концепцію “попередньо скомпільованої команди”. Пакет java.sql для підвищення ефективності роботи з базами даних передбачає використанням класуPrepareStatement. Розглянемо спосіб його використання наприкладі занесення рядка у таблицю бази даних.

Запит в попередньо підготовленій команді містить символи '?' замість потрібних значень полів. Необхідно спочатку занести значення, а потім виконати команду:

try {

String sql = "INSERT INTO my_table (col_string) VALUES(?)";

PreparedStatement pstmt = connection.prepareStatement(sql);

for (int i=0; i<10; i++) { // занести 10 рядків

pstmt.setString(1, "row "+i); // 1– індекс, значення

pstmt.executeUpdate(); // занести рядок

}

} catch (SQLException e) {

}

При завершенні пересилання запитів та отримання результатів відповіді об’єкти передбачають виконання методу закриття – close().

Наведемо простий приклад звертання до баз даних:

import java.sql.*; // бібліотека доступу до СУБД

import javax.swing.*; // бібліотека графічного інтерфейсу

import java.awt.*; // бібліотека графічного інтерфейсу

import java.awt.event.*; // бібліотека підтримки подій

 

public class SalesPeople extends JFrame {

Statement s;

ResultSet r;

 

 

public class ButtonClick implements ActionListener{

public void actionPerformed(ActionEvent e){

 

}

}

 

public SalesPeople() throws SQLException, ClassNotFoundException{

super("SalesPeople.java");

String dbUrl = "jdbc:odbc:Data";

String user = "root";

String password = "";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection c = DriverManager.getConnection(dbUrl, user, password);

//створення та обробка SQL запитів

r = s.executeQuery("SELECT * FROM Salespeople");

show();

}

 

public static void main(String[] args){

try {new SalesPeople();} catch(Exception e){};

}

}



<== предыдущая лекция | следующая лекция ==>
Завантаження драйверів баз даних | Класи клієнтів


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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