Робота з базами даних

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Факультет «Інформатика та системи управління»
Методичні вказівки до лабораторної роботи
за курсом «Розподілені системи обробки інформації»
"Робота з базами даних"
Москва 2004
Зміст
  Мета роботи .. 4
1. Завдання для домашньої підготовки. 5
2. Завдання до лабораторної роботи. 6
3. Зміст звіту. 7
4. Контрольні питання. 8
5. Література. 9
6. Додаток 1. Опис JDBC .. 10
6.1 Клас Connection. 11
6.1.1 Відкриття з'єднання. 11
6.1.2 JDBC URL. 12
6.2 Клас Statement 13
6.2.1 Виконання запиту. 13
6.2.2 Закриття об'єктів Statement 15
6.2.3 Символи (ecape) синтаксис SQL в об'єктах Statement 15
6.3 Клас CallableStatement 15
6.4 ResultSet 16
6.4.1 Огляд. 16
6.4.2 Рядки і курсори .. 16
6.4.3 Колонки. 17
6.4.4 Типи даних та їх перетворення. 17
7. Додаток 4. mySQL. 19
7.1 Установка ODBC-драйвера для роботи з mySql 19
8. Додаток 3. Джерело даних. 20
8.1 DSN .. 20
8.2 Налаштування MyODBC DSN .. 20
9. Додаток 4. Приклад програми .. 23
10. Додаток 5. Компонент JTable. 28
10.1 TableModel 28
10.2 Клас JTable. 30

Мета роботи
1. Ознайомитись з JDBC (Java DataBase Connectivity) 2.0 API.
2. Освоїти класи Connection, DatabaseMetaData, Statement, ResultSet пакету java.sql.
3. Осовоіть клас JTable з пакету javax.swing.
4. Застосувати отримані знання на практиці

 


1. Завдання для домашньої підготовки

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

 


2. Завдання до лабораторної роботи

Розробити віконне додаток, в якому буде відображатися інформація з бази даних. Крім відображення інформації з БД, воно повинно дозволяти додавати або / і видаляти записи. Дані представити у вигляді таблиць (використовувати компонент JTable).
Складність БД - необмежена. Мінімум - вона повинна містити хоча б одну таблицю.
СУБД вибирається студентом самостійно.

3. Зміст звіту

Звіт повинен містити:
1. Постановку задачі, розв'язуваної налагодженої програмою.
2. Керівництво користувача налагодженої програми, що містить опис інтерфейсів всіх функцій програми.
3. Лістинг програми з необхідними коментарями.

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

1. Що таке JDBC?
2. Як здійснюється з'єднання?
3. Що передається в стороке URL?
4. Що робить клас Statement?
5. Які є типи запитів і класи для їх виконання?
6. Для чого потрібен клас ResultSet?
7. Як витягуються дані з ResultSet?
8. Як пов'язані таблична модель (Table Model) і клас JTable?

5. Література

1. Кен Арнольд, Джеймс Гослінг, Девід Холмс. Мова програмування Java ™.
2. Офіційний сайт Java - http://java.sun.com/ (є розділ російською мовою з підручником).
3. Java ™ 2 SDK, Standard Edition Documentation - http://java.sun.com/products/jdk/1.5/index.html.
4. Джеймс Гослінг, Білл Джой, Гай Стіл. Специфікація мови Java (The Java Language Specification - http://www.javasoft.com/docs/books/jls/). Переклад на російську мову - http://www.uni-vologda.ac.ru/java/jls/index.html
5. Офіційний сайт проекту Eclipse - http://www.eclipse.org/.
6. www.citforum.ru

6. Додаток 1. Опис JDBC

JDBC - це пакет, що забезпечує API для однакового доступу до різних джерел даних на основі мови баз даних SQL.
Мається на увазі, що одна і та ж Java-програма зуміє за допомогою JDBC реально працювати в середовищі Windows з даними MySQL або ж у середовищі Solaris з даними Informix. Вона ж може бути збереженої процедурою в БД під Oracle і працювати з даними тієї ж Oracle або, приміром, Sybase.
Реалізується JDBC у вигляді інтерфейсів java.sql (основний) і javax.sql (розширений). Конкретний набір класів, реалізує JDBC-інтерфейс і здійснює доступ до конкретної СУБД, називається драйвером.
JDBC дозволяє:
· Встановити з'єднання з джерелом даних
· Посилати йому SQL-запити
· Обробляти результати.
У наступному фрагмента коду це продемонстровано.
/ / Встановлюємо з'єднання
Connection con = DriverManager.getConnection (
«Jdbc: odbc: wombat», «login», «password»);
Statement stmt = con.createStatement ();
/ / Виконуємо запит
ResultSet rs = stmt.executeQuery (
«SELECT a, b, c FROM Table1»);
while (rs.next ())
{
int x = getInt («a»); / / отримуємо результат
String s = getString («b»);
float f = getFloat («c»);
}

6.1 Клас Connection
Об'єкт Connection є з'єднання з БД. Сесія з'єднання включає в себе виконуються SQL-запити і які повертаються через з'єднання результати. Додаток може відкрити одне або більше з'єднань з однієї або декількома БД.

6.1.1 Відкриття з'єднання

Стандартний спосіб одержання сполуки - це виклик методу DriverManager.getConnection . Цьому методу передається рядок, що містить т.зв. «URL». Клас DriverManager , що представляє собою рівень управління в JDBC, намагається знайти драйвер, який може з'єднатися до БД за допомогою даного URL. Клас DriverManager містить список зареєстрованих класів Driver , і при виклику методу getConnection він перевіряє кожен драйвер і шукає серед них той, який може з'єднатися з БД, зазначеної в URL. Метод connect драйвера використовує цей URL для встановлення з'єднання.
Користувач може пропустити цей керуючий рівень JDBC і викликати безпосередньо методи класу Driver для відкриття з'єднання. Це може бути потрібним у тих рідкісних випадках, коли два або більше драйвера можуть обслужити заданий URL, але користувач хоче вибрати конкретний з них. Тим не менше, набагато простіше покласти цю роботу на клас DriverManager .
Наступний код демонструє відкриття з'єднання з БД, що знаходиться за URL «jdbc:odbc:wombat» , з ім'ям користувача «oboy» і паролем «12Java» :
String url = «jdbc: odbc: wombat»;
Connection con =
DriverManager.getConnection (url, «oboy», «12Java»);

6.1.2 JDBC URL

URL (Uniform Resource Locator) представляє собою інформацію для адресації ресурсу в Інтернет. Іншими словами, це адреса ресурсу. Перша частина URL задає протокол, який використовується для доступу до інформації, і завжди закінчується знаком »:». Інша частина URL, - те, що після першого двокрапки, - це те місце, де знаходиться джерело даних. У разі протоколу « file »частина, що залишилася URL - це шлях до файлу. Для протоколів ftp і http решта URL ідентифікує хост і необов'язковий шлях до конкретному сайту або файлу.
JDBC-URL надає спосіб вказівки БД і певного драйвера, який встановлює з'єднання з даної БД. Стандартний синтаксис JDBC URL показаний нижче. Він має три частини, розділених двокрапкою:
jdbc: <subprotocol>: <subname>
1. Jdbc - протокол, який використовується в JDBC URL - завжди jdbc.
2. <subprotocol> (Подпротокол) - це ім'я драйвера або якогось механізму встановлення з'єднання з базою даних, наприклад, ODBC. У разі застосування ODBC, в URL-рядок підставляється саме ця абревіатура, а в якості <subname> використовується звичайний DSN (Data Source Name), тобто ім'я ODBC-джерела з ODBC.INI файлу. Наприклад:
3. <subname> (Подімя) - це ідентифікатор БД. Значення подімені може змінюватись в залежності від подпротокола, і може також мати подподімя з синтаксисом, визначеним розробником драйвера. Призначення подімені - це надання всієї інформації, необхідної для пошуку БД. Віддалена база даних вимагає додаткову інформацію. Наприклад, якщо БД знаходиться в Інтернет, то до складу подімені JDBC-URL повинен бути включений мережеву адресу, що підкоряється наступних угод:
/ / Hostname: port / subsubname
Припускаючи, що «dbnet» - це протокол з'єднання до хосту в Інтернет, JDBC-URL може виглядати так:
jdbc: dbnet: / / ultra1: 1789/state
Частина URL / / ultra1: 1789/state являє собою й описує ім'я хоста, порт і відповідний ідентифікатор для доступу до відповідної бази даних.
Приклади коректних JDBC-URL для подпротокола odbc:
jdbc: odbc: qeor7
jdbc: odbc: wombat
jdbc: odbc: wombat; CacheSize = 20; ExtensionCase = LOWER
jdbc: odbc: qeora; UID = kgh; PWD = fooey

6.2 Клас Statement

6.2.1 Виконання запиту

Після того як встановлено з'єднання, воно використовується для виконання SQL-запитів до БД. JDBC не обмежує синтаксис SQL-запитів, надаючи, таким чином, більшу гнучкість у використанні специфічних для СУБД запитів або навіть взагалі не-SQL запитів.
У JDBC є три класи для посилки SQL-запитів до БД і три методи в інтерфейсі Connection створюють екземпляри цих класів. Ці класи і методи, які їх створюють, перераховані нижче:
1. Statement - створюється методом createStatement . Об'єкт Statement використовується при простих SQL-запити.
2. PreparedStatement - створюється методом divpareStatement . Об'єкт PreparedStatement використовується в SQL-запитах з одним або більше вхідними параметрами (IN parameters). PreparedStatement містить групу методів, які визначають значення вхідних параметрів, які надсилаються до БД при виконанні запиту. Екземпляри класу PreparedStatement розширюють (успадковуються від) Statement і, таким чином, включають методи Statement . Об'єкт PreparedStatement потенційно може бути більш ефективним, ніж Statement , так як він прекомпіліруется і зберігається для майбутнього використання.
3. CallableStatement - створюється методом divpareCall . Об'єкти CallableStatement використовуються для виконання т.зв. збережених процедур - іменованих груп SQL-запитів, на зразок виклику підпрограми. Об'єкт CallableStatement успадковує методи обробки вхідних (IN) параметрів з PreparedStatement , а також додає методи для обробки вихідних (OUT) і вхідних-вихідних (INOUT) параметрів.
Statement надає три різних методи виконання SQL-виразів: executeQuery, executeUpdate і execute, в залежності від SQL-запиту.
Метод executeQuery необхідний для запитів, результатом яких є один єдиний набір значень, таких як запитів SELECT.
Метод executeUpdate використовується для виконання операторів INSERT, UPDATE або DELETE, а також для операторів DDL (Data Definition Language - мова визначення даних), наприклад, CREATE TABLE і DROP TABLE. Результатом оператора INSERT, UPDATE, або DELETE є модифікація однієї або більше колонок в нулі або більше рядках таблиці. Метод executeUpdate повертає ціле число, що показує, скільки рядків було модифіковано. Для виразів типу CREATE TABLE і DROP TABLE, які не оперують над рядками, що повертається методом executeUpdate значення завжди дорівнює нулю.
Метод execute використовується, коли оператори SQL повертають більше одного набору даних, більше одного лічильника оновлень або і те, й інше. Така можливість рідко використовується.


6.2.2 Закриття об'єктів Statement

Об'єкти Statement закриваються автоматично за допомогою збирача сміття віртуальної машини Java. Тим не менш рекомендується закривати їх явно після того, як у них відпадає необхідність. Закриття об'єктів Statement відразу ж звільняє ресурси СУБД і дозволяє уникнути проблем з пам'яттю.

6.2.3 Символи (escape) синтаксис SQL в об'єктах Statement

Об'єкти Statement можуть містити SQL-вирази з т.зв. escape-синтаксисом - синтаксисом підстановки. Escape-конструкція сигналізує драйверу про те, що код всередині неї повинен оброблятися особливо. Драйвер сканує вираз і знаходить escape-послідовності, які потім замінюються кодом, специфічним для даної СУБД. Escape-синтаксис незалежний від СУБД і дозволяє програмісту використовувати можливості СУБД, які інакше ніяк не доступні.
Escape-конструкція полягає у фігурні дужки і ключове слово:

6.3 Клас CallableStatement

Об'єкт CallableStatement надає уніфікований спосіб виклику збережених процедур в будь-якій СУБД. Виклик процедури здійснюється за допомогою escape-синтаксису в одній з двох форм: з результуючим параметром і без нього. Результуючий параметр - це один з типів вихідних (OUT) параметрів, що є повертаним значенням збереженої процедури. Детальний опис роботи з збереженими процедурами див JDK.

6.4 ResultSet

6.4.1 Огляд

ResultSet містить всі рядки, що задовольняють умовам в SQL-вираженні і надає доступ до даних в цих рядках за допомогою набору get -методів, які організують доступ до колонок поточного рядка. Метод ResultSet.next використовується для переміщення до наступного рядка ResultSet , роблячи її поточною.
Наступний фрагмент коду демонструє виконання SQL-запиту, який повертає колекцію рядків, в якій колонка 1 - це int , колонка 2 - String і колонка 3 - масив байтів:
java.sql. Statement stmt = conn.createStatement ();
ResultSet r = stmt.executeQuery («SELECT a, b, c FROM Table1»);
while (r.next ())
{
/ / Надрукувати значення в поточному рядку.
int i = r.getInt («a»);
String s = r.getString («b»);
float f = r.getFloat («c»);
System.out.println («ROW =» + i + «» + s + »" + f);
}

6.4.2 Рядки і курсори

ResultSet містить т.зв. курсор, який вказує на поточний рядок даних. Кожного разу, коли виконується метод next , курсор переміщається на один рядок вниз. Спочатку курсор позиційований перед першим рядком, і перший виклик next премещает його на перший рядок (вона стає поточної). З кожним успішним викликом next курсор переміщається вниз на один рядок, починаючи з найвищої в ResultSet .

6.4.3 Колонки

Методи getXXX надають доступ до значень в колонках у поточному рядку. У межах одного рядка значення можуть бути лічені в будь-якому порядку, але, задля забезпечення більшої сумісності рекомендується зчитувати їх підряд зліва направо і робити це тільки один раз.
Для вказівки колонки можна використовувати або її ім'я, або її номер. Наприклад, якщо друга колонка об'єкта ResultSet rs називається «title» і зберігає строкове значення, то витягти його можна одним із двох способів:
String s = rs.getString («title»);
String s = rs.getString (2);
Колонки нумеруються зліва направо, починаючи з 1. Імена колонок у виклику методів getXXX нечутливі до регістру букв. Варіант з використанням імен колонок існує для того, щоб користувач ставив методам getXXX ті ж імена колонок, що він використовує у запиті. Якщо вираз select не вказує імена колонок (наприклад « select * from table1 »або у випадках, коли колонка обчислюється) повинні використовуватися номери колонок. У цих випадках користувач не може знати напевно імена колонок.
Інформацію про колонках в ResultSet можна отримати з помощтю виклику ResultSet.getMetaData . Повертається об'єкт ResultSetMetaData містить інформацію про кількість, типи і властивості колонок об'єкта ResultSet .
Якщо відоме ім'я колонки, але не її індекс, то для пошуку номера колонки можна використовувати метод findColumn .

6.4.4 Типи даних та їх перетворення

Методи getXXX намагаються конвертувати низькорівневі дані в типи даних мови Java. Наприклад, метод якщо метод getXXX - це getString і тип даних в БД - VARCHAR , драйвер JDBC конвертує VARCHAR в об'єкт String . Повертаним з методу getString значенням буде Java-об'єкт String .


7. Додаток 4. MySQL

Всі наступні приклади дані для СУБД MySQL4.0.12 і драйвер MySQLODBC 3.51, для роботи через ODBC API.

7.1 Установка O DBC-драйвера для роботи з mySql

MySQLAB поширює всі свої програми під General Public License (GPL). Найсвіжішу версію MyODBC 3.51 (двійкові коди і вихідні тексти) можна завантажити з http://www.mysql.com/. Докладно про MySQLODBC розказано на http://www.mysql.com/downloads/api-myodbc.html.
Після час інсталяції MySQLследует встановити драйвер MySQLODBC 3.51.
Для установки MyODBC на Windows Ви повинні завантажити відповідний дистрибутивний файл для Вашої операційної системи з http://www.mysql.com/downloads/api-myodbc.html, розпакувати його і виконати файл SETUP.EXE.


8. Додаток 3. Джерело даних

8.1 DSN

Після установки MySql, MySQLODBC 3.51 і створення бази даних слід створити джерело даних.
Джерело даних ідентифікує шлях для даних, який може включати мережеву бібліотеку, сервер, базу даних та інші атрибути. У нашому випадку джерело даних являє собою шлях до бази даних MySQL . Щоб з'єднатися з джерелом даних, Driver Manager перевіряє системний реєстр Windows для отримання специфічної інформації підключення. ODBC Driver Manager і MyODBC Drivers використовує розділ системного реєстру, створений ODBC Data Source Administrator. Цей розділ містить інформацію щодо кожного джерела даних і пов'язаного з ним драйвера. Перш, ніж Ви зможете з'єднуватися з джерелом даних, інформація про підключення повинна бути додана до системного реєстру.

8.2 Налаштування MyODBC DSN

Щоб додавати і конфігурувати джерела даних, використовуйте ODBC Data Source Administrator. ODBC Administrator модифікує інформацію про підключення до джерел даних. Оскільки Ви додаєте джерела даних, ODBC Administrator модифікує інформацію системного реєстру для них.
Щоб відкрити ODBC Administrator з Control Panel:
· Натисніть Start, виберіть Settings і клацніть Control Panel.
· На системах під Microsoft Windows 2000 двічі клацніть по Administrative Tools, а потім двічі клацніть по Data Sources (ODBC). На комп'ютерах під попередніми версіями Microsoft Windows двічі клацніть по 32-bit ODBC або по ODBC.
Щоб додати джерело даних у Windows:
1. Відкрийте ODBC Data Source Administrator.
2. У діалоговому вікні ODBC Data Source Administrator натисніть Add . Відкриється діалогове вікно Create New Data Source.
3. Виберіть там MySQLODBC 3.51 Driver і натисніть на Finish. З'явиться діалогове вікно MySQLODBC 3.51 Driver - DSN Configuration.
4. У вікні Data Source Name вдрукуйте ім'я джерела даних, до якого Ви хочете звертатися. Це може бути будь-що має силу ім'я, яке сподобалося.
5. У вікні Description введіть опис необхідне для DSN.
6. У вікні Host or Server Name (or IP) надрукуйте ім'я сервера MySQL, до якого Ви хочете звертатися. За умовчанням це local host.
7. У вікні Database Name вкажіть ім'я MySQLбази даних, яка буде застосовуватися як задана за замовчуванням база даних.
8. У вікні User задайте ім'я користувача бази даних (user ID).
9. У вікні Password треба задати пароль.
10. У вікні Port надрукуйте номер порту, якщо це не значення за замовчуванням 3306.
11. У вікні SQL Command Ви можете вводити факультативну команду SQL, яку сервера належить виконати відразу після встановлення з'єднання.
Тепер натисніть OK, щоб додати це джерело даних. Зверніть увагу: при натисканні на OK діалогове вікно Data Sources dialog, і ODBC Administrator модифікує інформацію системного реєстру. Ім'я користувача і рядок підключення стануть заданими за замовчуванням значеннями підключення для цього джерела даних. Ви можете також перевірити, чи достатні Ваші параметри налаштування, щоб з'єднатися з сервером, використовуючи кнопку Test Data Source.
Щоб змінити джерело даних у Windows:
1. Відкрийте вікно ODBC Data Source Administrator . Виберіть відповідну вкладку DSN.
2. Виберіть джерело даних MySQL, який Ви хочете змінити, а потім натисніть modify і клацніть по Configure. Відкриється діалогове вікно MySQLODBC 3.51 Driver - DSN Configuration.
3. Змініть відповідні поля джерела даних, а потім натисніть OK.
За замовчуванням після установки драйвера MyODBC 3.51 в системі створюється User DSN з ім'ям myodbc3-test, який можна використовувати, не створюючи своїх джерел даних.

9. Додаток 4. Приклад програми

/ / Наступний код може використовуватися в якості шаблону.
/ / Просто треба замінити відповідні URL, login, пароль, та
/ / SQL-вирази на необхідні в кожній конкретній задачі рядка.
import java.net.URL;
import java.sql .*;
class SimpleSelect
{
public static void main (String args [])
{
String url = «jdbc: odbc: myodbc3-test»;
String query = «SELECT * FROM maildb.users»;
try
{
/ / Завантажуємо драйвер мосту jdbc-odbc
Class.forName («sun.jdbc.odbc. JdbcOdbcDriver»);
DriverManager.setLogStream (System.out);
/ / Намагаємося з'єднатися з драйвером. Йде пошук
/ / Хоча б одного з зареєстрованого
/ / Драйверів, який може обробити цей URL
Connection con = DriverManager.getConnection (
url, «my-user», «my-passwd»);
/ / Якщо у нас не вийде, то буде
/ / Згенеровано виняток. Т.ч., якщо ми до сюди дійшли,
/ / Ми успішно з'єдналися з URL
/ / Подивимося, які зауваження були згенеровані
/ / Процедурою з'єднання. Виведемо їх.
checkForWarning (con.getWarnings ());
/ / Отримати об'єкт DatabaseMetaData і відобразити
/ / Деяку інформацію про це підключення
DatabaseMetaData dma = con.getMetaData ();
System.out.println («\ nConnected to» + dma.getURL ());
System.out.println («Driver» + dma.getDriverName ());
System.out.println («Version» + dma.getDriverVersion ());
System.out.println («»);
/ / Створюємо об'єкт Statement, щоб можна було
/ / Відсилати SQL-запити до драйвера
Statement stmt = con.createStatement ();
/ / Відсилаємо запит, отримуємо об'єкт
ResultSet rs = stmt.executeQuery (query);
/ / Показати всі шпальти та стороку з набору даних
dispResultSet (rs);
/ / Закрити набір даних
rs.close ();
/ / Закрити оператор
stmt.close ();
/ / Від `єднатися
con.close ();
}
catch (SQLException ex)
{
/ / Згенерувати виняток SQLException. Відловити його
/ / І відобразити інформацію про помилку.
/ / Зауважимо, що може бути кілька об'єктів помилки,
/ / З'єднаних разом в один ланцюжок
System.out.println («\ n *** Спіймали SQLException *** \ n");
while (ex! = null)
{
System.out.println («SQLState:» + ex.getSQLState ());
System.out.println («Повідомлення:» + ex.getMessage ());
System.out.println («Vendor:» + ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println («»);
}
}
catch (java.lang. Exception ex)
{
/ / Отримали помилку іншого типу. Роздрукувати її.
ex.printStackTrace ();
}
}
/ / -
/ / CheckForWarning
/ / Перевірити, чи є попередження, і відобразити їх.
/ / Повертає true, якщо попередження є.
/ / -
private static boolean checkForWarning (SQLWarning warn)
throws SQLException
{
boolean rc = false;
/ / Якщо дано об'єкт SQLWarning, відобразити
/ / Повідомлення про попередження. Зауважте, що може бути
/ / Кілька попереджень, пов'язаних в ланцюжок
if (warn! = null)
{
System.out.println («\ n *** Warning *** \ n");
rc = true;
while (warn! = null)
{
System.out.println («SQLState:» + warn.getSQLState ());
System.out.println («Message:» + warn.getMessage ());
System.out.println («Vendor:» + warn.getErrorCode ());
System.out.println («»);
warn = warn.getNextWarning ();
}
}
return rc;
}
/ / -
/ / DispResultSet
/ / Відображає всі колонки і рядки в даному наборі даних
/ / -
private static void dispResultSet (ResultSet rs)
throws SQLException
{
int i;
/ / Отримати ResultSetMetaData. Він потрібен для
/ / Отримання загловков колонок
ResultSetMetaData rsmd = rs.getMetaData ();
/ / Взяти кількість колонок в наборі даних
int numCols = rsmd.getColumnCount ();
/ / Показати шапку
for (i = 1; i <= numCols; i + +)
{
if (i> 1) System.out.print (»,»);
System.out.print (rsmd.getColumnLabel (i));
}
System.out.println («»);
/ / Показати всі дані аж до кінця набору даних
boolean more = rs.next ();
while (more)
{
/ / Для кожної колонки в циклі: отримати
/ / Її значення і показати його
for (i = 1; i <= numCols; i + +)
{
if (i> 1) System.out.print (»,»);
System.out.print (rs.getString (i));
}
System.out.println («»);
/ / Пересунутися на наступний рядок набору даних
more = rs.next ();
}
}
}

10. Додаток 5. Компонент JTable

Компонент JTable призначений для відображення даних у вигляді таблиці.
JTable тільки відображає дані на екрані комп'ютера. Клас, що дозволяє працювати з даними і метаданими таблиці, ми успадкуємо від класу AbstractTableModel. Отже, кожна таблиця бере дані з табличної моделі.
SHAPE \ * MERGEFORMAT
Таблична модель
TableModel
Представлення
JTable

10.1 TableModel

Створимо табличну модель наступним чином:
/ / Файл MyTableModel.java
import javax.swing.table. AbstractTableModel;
public class MyTableModel extends AbstractTableModel {
private String [] columnNames = {/ / Назви колонок
«#», «First name», «Last name», «Is Work»};
private Object [] [] data = {/ / Дані
{New Integer (1), «Alexandr», «Fomichev», new Boolean (true)},
{New Integer (1), «Ivan», «Petrov», new Boolean (false)},
{New Integer (1), «Nikolay», «Ivanov», new Boolean (true)}};
public int getColumnCount () {/ / Видає кількість колонок
return columnNames.length;
}
public String getColumnName (int col) {/ / Видає назву колонки
return columnNames [col];
}
public int getRowCount () {/ / Видає кількість рядків
return data.length;
}
public Object getValueAt (int row, int col) {/ / Видає значення комірки
return data [row] [col];
}
public Class getColumnClass (int col) {/ / Повертає клас колонки
return data [0] [col]. getClass ();
}
public boolean isCellEditable (int row, int col) {/ / Повертає, можна
if (col> 0) / / чи редагувати клітинку
return true;
else
return false;
}
public void setValueAt (Object v, int row, int col) {/ / Установка нового значення
data [row] [col] = v;
fireTableCellUpdated (row, col);
}
}
Таблична модель успадкована від AbstractTableModel, ми зобов'язані перевизначити наступні методи: getColumnCount, getColumnName, getRowCount, getValueAt. Решта методів можна не перевизначати. Метод getColumnClass потрібен нам для того, щоб відображати колонку «Is Work» у вигляді checkbox, якщо б ми не визначили б цей метод, в осередку було б написано «true» або «false». Так як ми хочемо редагувати нашу таблицю, нам необхідно ще два методи: isCellEditable і setValueAt. Зверніть увагу на те, що в методі setValueAt ми повідомляємо таблиці, що значення змінено.
Тепер давайте відобразимо нашу таблицю, використовуючи тільки що створену табличну модель.

10.2 Клас JTable

/ / Файл MyTable.java
import java.awt .*;
import javax.swing .*;
public class MyTable extends JFrame {
public MyTable () {
jbInit ();
}
private void jbInit () {
MyTableModel _tm = new MyTableModel ();
JTable _myTable = new JTable (_tm);
JScrollPane _scrollPane = new JScrollPane (_myTable);
this.setDefaultCloseOperation (EXIT_ON_CLOSE); / / що робити при закритті вікна
this.getContentPane (). setLayout (new BorderLayout ());
this.getContentPane (). add (_scrollPane, BorderLayout.CENTER);
}
public static void main (String [] args) {
MyTable t = new MyTable ();
t.setSize (300,95);
t.show ();
}
}
Ми створили таблицю, вказавши в якості параметра нашу табличну модель. Сама таблиця розміщена в контейнері JScrollPane. Якщо б ми не створили JScrollPane, то природно не додався б скролінг, і ми не побачили б назв колонок.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
66.8кб. | скачати


Схожі роботи:
Робота з базами даних 2
Робота з базами даних в MS Excel
Робота з базами даних Microsoft
Робота з базами даних через інтерфейс
Робота з базами даних в JAVA на основі з`єднання JDBC
Реляційна модель даних у системах управління базами даних
Система управління базами даних 2
Системи управління базами даних 2
Системи управління базами даних
© Усі права захищені
написати до нас