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

14.4 Подключение к базам данных
Язык Java

Java обеспечивает подключение к базам данных через API-интерфейс JDBC(Java Database Connectivity). JDBC позволяет осуществить соединение с БД так же легко, как соединение с ресурсом или изображением. Java обеспечивает пересылку инструкций структурированного языка запросов SQL и получение результатов запросов.

Для доступа к БД нужен драйвер. Если разработчик БД не предоставляет JDBC-драйвер, то наверняка для нее существует ODBC-драйвер. Фирма SUN обеспечивает мост ODBC-JDBC. Следовательно, чтобы загрузить драйвер. нужно использовать следующее описание:

Загрузка драйвера БД


// Load the JDBC-ODBC Bridge driver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException c) {
System.out.println("Error loading JDBC-ODBC driver.");
System.exit(0);
}

Имя драйвера может выглядеть так: sun.jdbc.odbc.JdbcOdbcDriver
Драйвер будет загружаться как часть класса DriverManager, используемого в следующем описании.

Теперь мы можем подключиться к БД применяя драйвер.

Соединение с БД


Connection conn = DriverManager.getConnection(url, user, password);
Connection conn = DriverManager.getConnection(database);

Первый оператор описания используется для соединения с удаленной БД.
Второй осуществляет доступ к локальной БД(см. пример ниже). Оба применяют драйвер, предварительно загруженный в объект DriverManager.

Вот например как осуществить доступ к локальной БД по имени Rates

Connection conn = DriverManager.getConnection("jdbc:odbc:Rates");

После установления соединения можно посылать предложения SQL и получить результат. Положения формируются в виде строк(это означает, что корректность их SQL-синтеза вы должны обеспечить сами).

Посылка SQL-предложения базе данных.


Statement stat = conn.createStatement();
int result = stat.executeUpdate("SQL insert");
ResultSet rs = stat.executeQuery("SQL query");

С использованием установленного соединения создается экземпляр объекта Statement.
Метод executeUpdate выполняет SQL-предложение типа INSERT и возвращает код результата, из которого видно, успешным или нет было выполнение.
Метод executeQuery выполняет SQL-предложение типа SELECT и возвращает объект типа ResultSet. Результат может быть обработан в цикле строка за строкой.

Пример 14.5 База данных конвертера валют

Задача:

Бюро путешествий Саванны решило, что курсы обмена валют для их программы по конвертированию лучше хранить в БД. Клиенты должны иметь доступ к БД. чтобы получать свежие котироваки курса.

Решение:

У нас уже есть программа конвертирования валют (пример 6.8, 11.3, 14.1), поэтому все, что нужно сделать - изменить ее так, чтобы осуществлять доступ к БД. Наша программа будет состоять из двух модулей: один модуль предназначен для создания БД из существующего текстового файла, второй модуль - собственно конвертер валют.

Предварительная установка необходимых компонентов.

Воспользуемся одной из самых распространенных для Windows баз данных. Чтобы Java смогла загрузить соответствующий драйвер JDBC-ODBC, он должен быть активизирован. (АВ:То есть этот драйвер уже присутствует у нас в компе, но спит. и потому должен быть активизирован).
Делается это так: Откройте панель управления Windows и дважды щелкните на пиктограмме ODBC Data Source(32bit). В открывшемся окне вы увидите список источников пользовательских данных(рис 14.6).

Подсказка

В нем должны быть записи MS Access Database и dBase Files. Вам нужно добавить в этот список вашу БД. Чтобы это сделать щелкните на кнопке Add, расположенной в правой части окна. Затем выберите драйвер, который будете использовать для доступа к БД. В нашем примере используется БД MS Access, поэтому выбираем драйвер Microsoft Access Driver(*mdb) (рис 15.7).

Подсказка

После этого появляется еще одно диалоговое окно, в котором следует указать имя вашего источника данных, описание и файл базы данных (рис 14.8).

Подсказка

Введите имя в поле Data Source Name (на рисунке задано имя students, но вы укажите имя Rates для нашего примера Converter GUI). Затем, если вы уже создали БД, то щелкните на кнопке Select, в противном случае щелкните на кнопке Create. В обоих случаях это приведет к появлению диалогового окна открытия файла, в котором необходимо выбрать каталог и имя для БД. Если БД уже создана, то вы должны будете только выбрать файл БД и нажать OK. Если же это новая БД, то перейдите в каталог, где она должна располагаться, и введите имя в поле Database Name.

АВ: Для того, чтобы программа работала с базой данных в Java, надо не только, чтобы БД находилась в одной директории с программой, но надо и "настроить" БД именно на этот путь. Тогда программа будет работать, в противном случае выдаст - недопустимый путь.

Программа находится C:/Document and Settings/ALEX/Мои документы/modalwork/MyProyect/ConverterDatabase

На этот же путь надо и вышеописанную настройку БД делать.

Программу на выполнение запускаем командой: java ConverterDatabase

Программа работает!

Если вы хотите ограничить доступ к БД, щелкните на кнопке Advanced (расширенная настройка) в правой части диалогового окна и введите имя пользователя и пароль для доступа к БД (рис 14.9). Эти имя и пароль нужно будет указывать в программе, однако для этого вам придется применить первый вариант конструктора DriverManager.getConnection (см.описание "Соединение с БД"). Затем вы можете сохранить все установки щелкнув мышку на кнопке OK во всех диалоговых окнах.

Конструкция программы создания БД. (программа SetUpDatabase)

Программа должна подать базе данных следующие SQL-предложения:
DROP TABLE rates Удаляет таблицу rates, со всеми ее данными из базы данных
CREATE TABLE rates Создает таблицу rates, определяет имена столбцов и тип данных
INSERT INTO rates VALUES Добавить одну запись в таблицу

Ниже приведен текст программы, которая предназначена для удаления старой таблицы и создания новой таблицы и заполнения ее данными из текстового файла.


import java.sql.*;
import javagently.*;
import java.io.*;

class SetUpDatabase {

/* Database setup program by B Worrall August 2000
* ====================== amended by J M Bishop
*
* Sets up a database of rates data
* as read in. The database uses Sun's
* jdbc:odbc driver to connect to a text based
* Access Database.
*/

private Connection conn;

SetUpDatabase() {

// Load JDBC-ODBC Bridge driver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException c) {
System.out.println("Could not load database driver.");
}

// Read the data from the text file and store it in the
// database.
try {

OpenConnection();
WriteData();
} catch (SQLException s) {
System.out.println(s);
} catch (IOException i) {
System.out.println(i);
}
}

void OpenConnection() throws SQLException {

conn = DriverManager.getConnection("jdbc:odbc:Rates");
Statement s = conn.createStatement();
String state = "DROP TABLE rates";
try {
// Delete old data if necessary (if no such data,
// exception is flagged and we carry on)
int temp = s.executeUpdate(state);
} catch (SQLException q) {
}

// Create table with columns in database
state = "CREATE TABLE rates (Code VARCHAR(3), Country VARCHAR(80), " +
"Curr VARCHAR(30), Conv DOUBLE)";
int temp = s.executeUpdate(state);

}


void WriteData() throws IOException, SQLException {

Stream fin = new Stream("rates.data", Stream.READ); try {
for (; ;) {
Rates r = new Rates();
r.setRate(fin);
// add data into rates
Statement s = conn.createStatement();
String state = "INSERT INTO rates VALUES ('" +
r.code + "', '" +
r.country + "', '" +
r.currency + "', " +
r.conversion + ")";
int rs = s.executeUpdate(state);
}
} catch (EOFException e) {
}
}

public static void main (String [] args) {

new SetUpDatabase();
}
}

Программа последовательно читает строки из файла rates.data и добавляет записи в базу данных. При этом применяется формат с разделителями - запятыми.

Попробуем взглянуть на нашу БД через программу Microsoft Access

Подсказка

Подсказка

Ну что-ж, хотя таблица в данной БД создана и инициирована нами программным путем, выглядит она вполне прилично!


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

Hosted by uCoz