3980

Простий Java клієнт до бази даних

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота №10 (Простий Java клієнт до бази даних) Тема роботи: Простий Java клієнт до бази даних. Мета роботи: В даній роботі ми створимо простий клієнт до бази даних. План роботи. Створити БД Налаштувати драйвер доступу до Б...

Украинкский

2012-11-10

316.35 KB

39 чел.

10. Лабораторна робота №10 (Простий Java клієнт до бази даних)

Тема роботи: Простий Java клієнт до бази даних.

Мета роботи: В даній роботі ми створимо простий клієнт до бази даних.

План роботи

1.

2.

3.

4.

Створити БД

Налаштувати драйвер доступу до БД ODBC-JDBC.

Запустити програму доступу до БД.

Дослідити під'єднання до БД і роботу програми.

Теоретичні відомості

Створення БД

Створіть базу даних за допомогою програми MS Access з іменем Romanchuk. В БД

створіть таблицю з іменем Addresses з полями id, firstname, lastname, address, pcode, city та введіть

п'ять записів як показано на рис. 9.1 :

Рисунок 10.1 Тестова таблиця

Налаштування ODBC.

Для цього спочатку настроїмо баз даних та операційну систему для того, щоб забезпечити

доступ до бази із нашої Java-програми з допомогою ODBC (Open Database Connectivity) мосту. Для

цього необхідно зробити наступні дії:

Заходимо в меню Control Panel -> Performance and Maintenance -> Administrative Tools.

Запускаємо програму Data Sources (ODBC), у вікні програми

92


Рисунок 10.2 Натискаємо кнопку Add…

Рисунок 10.3 В даному вікні вибираємо Driver do MicrosoftAccess(*.mdb), натискаємо кнопку

Finish.

93


Рисунок 10.4 В даному вікні натисніть кнопку Select… і вкажіть файл бази даних – Адресної

книжки

Введіть Data Source Name, натисніть OK. У вікні ODBC Data Source Administrator

повинен з’явитись рядок із назвою підключеної бази даних. Натисніть OK. (При цьому в

Microsoft Access вищезгадана база даних повинна бути закритою).

Приклад.

import javax.swing.*;

import javax.swing.table.AbstractTableModel;

import java.sql.*;

import java.util.List;

import java.util.ArrayList;

import java.awt.*;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

public class Lab7 extends JFrame

{

private Connection connection;

private Statement statement;

private UserData userData;

public Lab7()

{

initConnection();

buildUI();

loadDataFromDB();

this.userData.fireTableDataChanged();

addWindowListener(new WindowAdapter()

{

94


public void windowClosing(WindowEvent e)

{

try

{

statement.close();

connection.close();

}

catch (SQLException e1)

{

e1.printStackTrace();

}

System.exit(0);

}

});

setVisible(true);

}

private void initConnection()

{

try

{

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

connection = DriverManager.getConnection("jdbc:odbc:romanchuk");

statement = connection.createStatement();

}

catch (Exception e)

{

e.printStackTrace();

}

}

private void buildUI()

{

setSize(400, 400);

setTitle("Address Book");

getContentPane().setLayout(new BorderLayout());

this.userData = new UserData();

JTable userTable = new JTable(userData);

getContentPane().add(new JScrollPane(userTable), BorderLayout.CENTER);

}

private void loadDataFromDB()

{

this.userData.alData.clear();

try

{

ResultSet

resultSet

=

Addresses");

while (resultSet.next())

95

statement.executeQuery("SELECT

*

FROM


{

String id = resultSet.getString(1);

String firstname = resultSet.getString(2);

String lastname = resultSet.getString(3);

String address = resultSet.getString(4);

String city = resultSet.getString(5);

RowAddress r = new RowAddress(id, firstname, lastname, address,

city);

this.userData.alData.add(r);

}

}

catch (SQLException e)

{

e.printStackTrace();

}

}

class RowAddress

{

String id;

String firstname;

String lastname;

String address;

String city;

public RowAddress(String id, String firstname, String lastname, String address,

String city)

{

this.id = id;

this.firstname = firstname;

this.lastname = lastname;

this.address = address;

this.city = city;

}

}

class UserData extends AbstractTableModel

{

String columns[] = {"First Name", "Last Name"};

public List alData = new ArrayList();

public int getColumnCount()

{

return columns.length;

}

public Object getValueAt(int nRow, int nCol)

{

if (nRow <0 || nRow > this.alData.size())

{

return null;

}

96


RowAddress rowAddress = (RowAddress) this.alData.get(nRow);

switch (nCol)

{

case 0: return rowAddress.firstname;

case 1: return rowAddress.lastname;

}

return "";

}

public int getRowCount()

{

return alData == null ? 0 : alData.size();

}

public String getColumnName(int column)

{

return columns[column];

}

public boolean isCellEditable(int nRow, int nCol)

{

return false;

}

}

public static void main(String[] args)

{

new Lab7();

}

}

Пояснення до прикладу:

Даний клас Lab7 є підкласом JFrame і служить основним вікном для нашого прикладу.

Змінні (поля) класу:

private Connection connection - служить для підключення до бази даних;

private Statement statement – служить для виконання SQL-команд;

private UserData userData –для зберігання результатів у вигляді таблиці.

В конструкторі викликаються 3 основні методи:

initConnection();

buildUI();

loadDataFromDB().

Вся процедура підключення до бази даних здійснюється в першій функції:

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

connection = DriverManager.getConnection("jdbc:odbc:syrotynskyAB");

statement = connection.createStatement();

97


При цьому, спочатку нам необхідно завантажити драйвер-міст jdbc-odbc, а потім

відбувається підключення до нашої бази даних. Назва бази даних, тобто тієї бази, котру ми ввели в

вікні,

показаному

на

Мал.3,

вводиться

як

аргумент

функції

DriverManager.getConnection("jdbc:odbc:Romanchuk").

Якщо назва бази даних введена нами неправильно, тоді виникає виняткова ситуація –

виконається функція в блоці catch().

Для безпосереднього виконання команд SQL необхідно створити об’єкт класу Statement.

Цей об’єкт служить для керування трансакціями. По замовчуванню, для нового об’єкту задається

режим автоматичної фіксації, тобто результати виконання кожної команди відразу фіксуються в

базі даних.

Після виконання підключення до бази, виконується функція buildUI(). В цій функції

задаються основні параметри вікна та створюється таблиця, котра потім додається до вікна. Існує

декілька конструкторів класу Jtable. В нашому випадку, таблиця створюється на основі підкласу

AbstractTableModel – UserData. В цьому класі є декілька функцій, котрі визначають вигляд таблиці.

Найважливіша функція:

public Object getValueAt(int nRow, int nCol)

{

if (nRow <0 || nRow > this.alData.size())

{

return null;

}

RowAddress rowAddress = (RowAddress) this.alData.get(nRow);

switch (nCol)

{

case 0: return rowAddress.firstname;

case 1: return rowAddress.lastname;

}

return "";

}

Тут задаються параметри, котрі будуть відображатись у відповідних рядках та колонках

таблиці. Для того, щоб локально зберігати результат виконання SQL запиту, ми створили

внутрішній клас RowAddress. В цьому класі є лише декілька полів, в котрих зберігаються

відповідні комірки бази даних.

Отримання результатів із бази даних здійснюється в функції loadDataFromDB(). Для цього

спочатку виконується SQL запит: statement.executeQuery("SELECT * FROM Addresses").

Результатом виконання цього запиту є об’єкт класу ResultSet. В цьому об’єкті колонки зберігається

в тому ж порядку, що і в таблиці бази даних. Для отримання значень відповідних колонок

використовується метод resultSet.getString(1) із номером колонки. Потім новостворений об’єкт

RowAddress додається до динамічного масиву в userData.

Після виконання SQL запиту в конструкторі Lab7 викликається метод

this.userData.fireTableDataChanged() – виконання цього методу необхідне для того, щоб

правильно відтворити таблицю із отриманими результатами.

98


Для того, щоб коректно завершити програму, нам необхідно від’єднатись від бази даних.

Для цього виконуються методи:

statement.close();

connection.close().

Порядок виконання роботи

1.Повторіть приклад. Поясніть отриманий результат.

2.В таблиці із результатами додайте колонки “Address” та “City”.

Для цього змініть відповідним чином поле

String columns[] = {"First Name", "Last Name"}

та метод

public Object getValueAt(int nRow, int nCol)

в класі UserData.

3. Зробіть висновки.

4. Оформити звіт. У звіті повинно бути текст програми і скріншоти результатів.

5. Прикріпити до VNS файл [Ваша Фамілія].zip в архіві повинно бути файли програм [Ваша

Фамілія]_labN_k.class ,a також файли звіту [Ваша Фамілія]_Zvit_LabN.mdb, де N – номер

лабораторної роботи, k – номер програми.

Контрольні питання

1. Для чого використовується об’єкт класу Statement?

2. За що відповідає номера (1,2,3,4,5,6) в команда String id = resultSet.getString(1); ... ,даної

програми?

private void loadDataFromDB()

{

this.userData.alData.clear();

try

{

ResultSet resultSet = statement.executeQuery("SELECT * FROM Addresses");

while (resultSet.next())

{

String id = resultSet.getString(1);

String firstname = resultSet.getString(2);

String lastname = resultSet.getString(3);

String address = resultSet.getString(4);

String city = resultSet.getString(5);

RowAddress r = new RowAddress(id, firstname, lastname, address, city);

this.userData.alData.add(r);

}

}

catch (SQLException e)

{

e.printStackTrace();

99


}

}

3. Яка з цих команд відповідає за з'єднання з БД?

try

{

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

connection = DriverManager.getConnection("jdbc:odbc:romanchuk");

statement = connection.createStatement();

}

catch (Exception e)

{

e.printStackTrace();

}

4. Яка з цих команд відповідає за підключення драйвера JDBC-ODBC?

try

{

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

connection = DriverManager.getConnection("jdbc:odbc:romanchuk");

statement = connection.createStatement();

}

catch (Exception e)

{

e.printStackTrace();

}

5. Який драйвер використовується для підключення БД в адміністративній консолі

Windows

6. Який драйвер використовується для підключення до БД з Java-програми?

100



 

А также другие работы, которые могут Вас заинтересовать

81030. Россия в процессах глобализации 37.65 KB
  Глобализация российским населением в большинстве случаев оценивается негативно. сокращение трудовых ресурсов странысокращение высокотехнологичных производств и расширение иностранного или филиального производстваПолитические перспективыПолитическая глобализация несет угрозу суверенитету любого государства. Политическая глобализация обеспечивается сетью транснациональных связей и отношений: деятельность международных организаций международных трибуналов экономических организацийБольшинство существующих международных организаций создающих...
81031. История создания и устав ООН. Структура ООН 41.01 KB
  Структура ООН Организация Объединённых Наций международная организация созданная для поддержания и укрепления международного мира и безопасности развития сотрудничества между государствами. История создания ООН во многом определяется именно этими факторами. Предшественником ООН была Лига Наций Вторая мировая война дала сильный толчок общественной и правительственной инициативе по организации безопасности и мира.
81032. Реформы ООН 47.61 KB
  Соответственно растёт востребованность ООН как механизма коллективного поиска путей преодоления вызовов XXI века. С другой стороны реформа нужна потому что без неё ООН постепенно будет утрачивать нынешние позиции окажется отодвинутой на обочину мировой политики превратится в статиста беспомощно взирающего на то как группы государств или отдельные страны решают спорные вопросы по своему усмотрению. 2 декабря 2004 года был обнародован доклад ldquo;Более безопасный мир: наша общая ответственностьrdquo;[1] который подготовила Группа...
81033. Миротворческие операции ООН 45.56 KB
  На практике такие операции осуществлялись до недавнего времени главным образом в рамках ООН по решениям СБ в отдельных случаях – ГА ООН. Силы действуют под руководством СБ ООН но находятся под командованием Генерального секретаря выступающего от имени ООН и имеющего политические установки от Совета Безопасности. Что касается состава сил то они комплектуются за счет персонала из состава вооруженных полицейских сил и гражданских представителей различных государств на основе соглашений достигнутых правительствами этих стран с Генеральным...
81034. Международный валютный фонд (МВФ). Всемирная торговая организация (ВТО) 43.14 KB
  Всемирная торговая организация ВТО Международный валютный фонд МВФ англ. ВТО является преемницей Генерального соглашения по тарифам и торговле ГАТТ заключенного в 1947 году и на протяжении почти 50 лет фактически выполнявшего функции международной организации. ВТО отвечает за разработку и внедрение новых торговых соглашений а также следит за соблюдением членами организации всех соглашений подписанных большинством стран мира и ратифицированных их парламентами. ВТО строит свою деятельность исходя из решений принятых в 1986 1994 годах в...
81035. Организация Североатлантического договора (НАТО) 42.5 KB
  Тогда государствамичленами НАТО стали США Канада Исландия Великобритания Франция Бельгия Нидерланды Люксембург Норвегия Дания Италия и Португалия. Одной из декларированных целей НАТО является обеспечение сдерживания любой формы агрессии в отношении территории любого государствачлена НАТО или защиту от неё. Главная цель НАТО гарантировать свободу и безопасность всех своих членов в Европе и Северной Америке в соответствии с принципами Устава ООН.
81036. Парламентская ассамблея Совета Европы (ПАСЕ). Организация по безои сотрудничеству в Европе(ОБСЕ). Европейский суд по правам человека 41.43 KB
  Европейский суд по правам человека ОБСЕ Организация по безопасности и сотрудничеству в Европе крупнейшая в мире региональная организация занимающаяся вопросами безопасности.Верховный комиссар по делам национальных меньшинств Бюро по демократическим институтам и правам человека ОБСЕ Парламентская ассамблея ОБСЕ Представитель по вопросам свободы СМИ наблюдает за развитием положения в области средств массовой информации в 56 государствах-участниках ОБСЕ. Третья корзина или человеческое измерение...
81037. Организация стран-экспортеров нефти (ОПЕК). Организация Исламская Конференция (ОИК). Лига Арабских Государств (ЛАГ) 40.44 KB
  Организация странэкспортеров нефти основана в 1960 году рядом стран Алжир Эквадор Индонезия Ирак Иран Кувейт Ливия Нигерия Саудовская Аравия Объединенные Арабские Эмираты и Венесуэла с целью координации действий по объему продаж и установления цен на сырую нефть. Внимание к интересам странпроизводителей нефти и необходимости обеспечения: устойчивых доходов странпроизводителей нефти; эффективного рентабельного и регулярного снабжения странпотребителей; справедливых доходов от инвестиций в нефтяную промышленность; охраны...
81038. Азиатско-Тихоокеанское экономическое сотрудничество (АТЭС). Евразийское экономическое сообщество (ЕврАзЭс). Ассоциация государств Юго-Восточной Азии. (АСЕАН) 39.91 KB
  АСЕАН. Задачи Завершение оформления в полном объёме режима свободной торговли формирование общего таможенного тарифа и единой системы мер нетарифного регулирования Обеспечение свободы движения капитала Формирование общего финансового рынка Согласование принципов и условий перехода на единую валюту в рамках ЕврАзЭС Установление общих правил торговли товарами и услугами и их доступа на внутренние рынки Создание общей унифицированной системы таможенного регулирования Разработка и реализация межгосударственных целевых программ Создание...