Назад | Начало урока | Вперед
Содержание

Глава 8

Простой пример использования модели

(Фрагмент главы 15 из книги Ивана Портянкина "Swing и эффективные пользовательские интерфесы")

Подсказка

А теперь давайте проверим работу нашей новой модели.
Вот простой пример:


// DatabaseTable.java
// Таблица, работающая с базой данных
// посредством специальной модели
import java.sql.*;
import javax.swing.*;
import com.porty.swing.*;

public class DatabaseTable {

// параметры подключения
private static String
dsn = "jdbc:mysql://localhost/books",
uid = "root",
pwd = "";

public static void main(String[] args) {
// инициализация JDBC
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
// объект-соединение с БД
conn = DriverManager.getConnection(dsn, uid, pwd);
Statement st = conn.createStatement();
// выполняем запрос
ResultSet rs = st.executeQuery( "SELECT * FROM authors");
// наша модель
DatabaseTableModel dbm =
new DatabaseTableModel(false);

// таблица и окно
JTable table = new JTable(dbm);
JFrame frame = new JFrame("Hi");
frame.setSize(400, 300);
frame.getContentPane().add(new JScrollPane(table));
frame.show();

// выводим результат запроса на экран
dbm.setDataSource(rs);
rs.close();
conn.close();

} catch (Exception ex) {
throw new RuntimeException(ex);
}

}//end main
}

Результат :

Анализ

Программа на удивление проста.
В программе мы прямо в методе main() создаем небольшое окно JFrame и размещаем в него
таблицу, которая будет получать данные из созданной только-что модели для работы с БД.

Для правильной работы нам нужно настроить и открыть подключение к БД JDBC. Здесь
используется все то же подключение к БД некой гипотетической библиотеки, мы уже
применяли его в гл 9, когда создавали модели списков JList и JComboBox для работы с БД
(АВ: модели списков - это ново для меня!).

В качестве драйвера задействован стандартный мост JDBC-ODBC, годящийся в большинстве
случаев жизни. Для работы программы с вашей БД вам нужно лишь сменить идентификатор БД,
имя пользователя и паролью, а так же если необходимо - драйвер JDBC, в том случае, если
вы используете специальную БД с собственным драйвером.

// параметры подключения
private static String
dsn = "jdbc:mysql://localhost/books",
uid = "root",
pwd = "";
// инициализация JDBC
Connection conn = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// объект-соединение с БД
conn = DriverManager.getConnection(dsn, uid, pwd);
Statement st = conn.createStatement();

Открыв соединение с БД программы выполняет запрос (в примере запрос получает список всех
читателей библиотеки) и если запрос был успешен, то результат запроса возвращается в
виде объекта ResultSet.


// выполняем запрос
ResultSet rs = st.executeQuery( "select * from readers");

Заметьте, что таблица добавляется в окно и последнее выводится на экран еще до того, как мы
передаем объект ResultSet нашей модели. То есть вы наглядно сможете увидеть как в
таблице появляются новые данные.

Запустив программу с примером, предварительно настроив любую вашу БД и выполнив запрос по
получению любых, даже самых сложных данных, вы увидите, что они правильно появляются в
таблице и структура таблицы имеет нужный вид (название и тип столбцов), не смотря на
всю простоту написанной нами модели. Действительно JDBC и JTable словно созданы друг
для друга!

Мы можем подвести краткий итог: основная модель таблицы TableModel удивительно изящна и
гибка: она позволяет быстро описать даже самые сложные двумерные данные с учетом всей
их специфики. Удачной следует признать и концепцию типа столбца (представленного
объектами Class) - вы быстро можете указать, как следует отображать (и при
необходимости редактировать) данные этого столбца. Так что при наличии встроенной
поддержки таких функдаментальных типов, как значки, булевы значения и числа, таблица
даже без специализированной настройки становится мощным инструментом в руках создателя
пользовательского интефейса.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz