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
Ну что-ж, хотя таблица в данной БД создана и инициирована нами программным путем, выглядит она вполне прилично!
Назад |
Начало урока |
Вверх |
Вперед
Содержание