Сдавался/использовался | Апрель/2005г. |
Загрузить архив: | |
Файл: ref-21321.zip (5kb [zip], Скачиваний: 584) скачать |
Java и MySQL
Базы данных нашли широкое применение в современном мире программного обеспечения. Наличие мощных вычислительных систем делает возможным создание крупных сервисов по сбору, обработке, хранению, и выдаче структурированной информации. При этом в качестве ядра может выступатьMySQL Database server- хорошо зарекомендовавшая себя на практике реализация идеи реляционных баз данных. Помимо этого особое значение приобретаютservletиJSPтехнологии программирования динамических Web-приложений. Последнее особенно важно, т.к. позволяет относительно легко и просто создавать и поддерживать сайты высокого качества. Основной целью настоящего руководства является описание в простой и наглядной форме процедуры доступа к базе данных MySQL из java-приложения.
В каждом из пунктов приводятся общие сведения, знание которых требуется для успешного выполнения поставленной задачи. На основе них формируются конкретные программные реализации, позволяющие получить требуемую функциональность на практике.
В качестве примера, будем использовать задачу создания базы данных отдела поставок предприятия, специализирующегося на выпуске кондитерских изделий (Кондитерская фабрика).
Содержание
3.Установка и запуск MySQL Database server
6.Создание базы данных в MySQL
7.Регистрация MySQL Connector/J
8.Соединение с MySQL Database server из java-приложения
9.Выполнение запроса к базе данных
Для рассмотрения процедуры доступа к базам данных MySQL из java-приложений под управлением ОС Windows на компьютере должно быть установлено:
· Windows 9x,Me,NT,2000,XP, илиWindows Server 2003.
· JavaTM 2 Standard Edition Runtime Environment, а также набор инструментов разработчика Java-приложенийJDKTMверсии 1.5.0 или выше.
· MySQL Database Serverверсии 4.1 или выше.
· MySQL Connector/Jверсии 3.1.6 или выше.
Системные требования определяются требованиями указанных программ, и описаны в поставляемых файлах.
В настоящем руководстве используется JDK версии 1.5.0. Системные требования, а также инструкции по установке можно узнать, кликнув по ссылке .
Для успешного запуска примеров
необходимо прописать путь к корневой директории классов приложения
в переменной
окружения CLASSPATH:
set
CLASSPATH=
Установка и запуск MySQL Database server
В руководстве используется MySQL
Database server версии 4.1 или выше. Он распространяется как в рамках GNU
лицензии (General Public License
), так и в виде коммерческого продукта (
). Дистрибутив находится здесь
. Для установки необходимо запустить файл Setup.exe. Далее следует указать
директорию, в которую будет установлен сервер. Помимо этого, программа
установки потребует дополнительный набор сведений, необходимый ей для успешного
выполнения распаковки. Для запуска MySQL сервера необходимо запустить
файл
.
Для вывода списка параметров, используемых при запуске, добавим параметры--verbose --help
. Далее будем
предполагать, что MySQL Database server успешно установлен и запущен.
MySQL Connector/J реализует Sun's JDBC 3.0 API для сервера реляционной базы данных MySQL.
MySQL Connector/J поддерживает Java-2 JVMs, включая JDK-1.2.x, JDK-1.3.x, JDK-1.4.x и JDK-1.5.x, и для компиляции (но не для запуска) требует наличия JDK-1.4.x или выше. MySQL Connector/J поддерживает все известные версии MySQL Database server.
После распаковки архива в
переменную окружения CLASSPATH необходимо добавить путь к jar-файлуmysql-connector-java-3.1.6-bin.jar
. При
этом путь должен содержать имя указанного файла:
set
CLASSPATH=
База данных (supplement
) отдела поставок будет
содержать две таблицы:
1.Таблица ресурсов(необходимые для производства продукты [полуфабрикаты] пищевой промышленности).
2.Таблица поставщиков(поставщики ресурсов).
В скобках указываются имена, используемые в MySQL для описания соответствующих элементов:
Таблица ресурсов (deliveries
) содержит 5 полей:
- идентификатор ресурса (id
)
- название ресурса (name
)
- название поставщика (supplier
)
- объем поставки (amount
)
(количество единиц продукции в поставке)
- стоимость единицы продукта (price
)
(денежный формат представления данных)
Таблица поставщиков (suppliers
) содержит 6 полей:
- идентификатор поставщика (id
)
- название компании поставщика (name
)
- расчетный счет (account
)
- имя контактного лица (КЛ) (first_name
)
- фамилия КЛ (last_name
)
- отчество КЛ (second_name
)
В настоящем пункте описывается
последовательность команд, используемая для создания базы данныхsupplement
в MySQL.
1.
shell>
2.
supplement
и делаем ее текущей:
mysql> CREATE DATABASE supplement;
mysql> USE supplement;
3.
deliveries
:
4.
5. -> id MEDIUMINT NOT NULL AUTO_INCREMENT,
6. -> name VARCHAR(30) NOT NULL,
7. -> supplier VARCHAR(30) NOT NULL,
8. -> amount INT UNSIGNED DEFAULT '0' NOT NULL,
9. -> price DOUBLE(16, 2) DEFAULT '0.00' NOT NULL,
10. -> PRIMARY KEY (id)
11. -> );
12.
suppliers
:
13.
14. -> id MEDIUMINT NOT NULL AUTO_INCREMENT,
15. -> name VARCHAR(30) NOT NULL,
16. -> account BIGINT NOT NULL,
17. -> first_name VARCHAR(30) NOT NULL,
18. -> last_name VARCHAR(30) NOT NULL,
19. -> second_name VARCHAR(30) NOT NULL,
20. -> PRIMARY KEY (id)
21. -> );
22.
и
(предполагается,
что файлы были предварительно созданы и заполнены необходимыми данными):
mysql> LOAD DATA INFILE '../data/deliveries.csv' INTO TABLE deliveries;
mysql> LOAD DATA INFILE '../data/suppliers.csv' INTO TABLE suppliers;
23.
mysql> exit
Создадим классMySQLAccess
, внутри которого
инкапсулируем доступ к созданной в предыдущем пункте базе данных. Поместим его
описание в файл
.
Для доступа к базам данных
используется JDBC, а конкретное соединение предоставляется объектом
классаDriverManager
.DriverManager
должен знать тип
драйвера, используемого для работы с конкретной СУБД. Самый простой способ
регистрации драйвера, это использоватьClass.forName()
для
класса, реализующего интерфейсjava.sql.Driver
.
Для MySQL Connector/J имя класса драйвера имеет видcom.mysql.jdbc.Driver
.
В следующем фрагменте кода происходит регистрация MySQL драйвера.
...
public static void main(String[] args) {
...
try {
// Регистрациядрайвера MySQL
Class.forName("com.mysql.jdbc.Driver").newInstance();
...
} catch (Exception e) {
e.printStackTrace(System.err);
}
...
}
...
Соединение с MySQL Database server из java-приложения
После того как мы
зарегистрировали драйвер базы данных MySQL, можно установить соединение с
сервером, используя методgetConnection()
классаDriverManager
. Указанный метод в
качестве параметра принимает URL базы данных (хотя возможно дополнительно
указать имя пользователя и пароль, см. документацию к классу). Метод возвращает
класс-соединениеConnection
с
базой данных.
В следующем фрагменте кода
происходит установка соединения с базой данныхsupplement
.
import java.sql.Connection;
import java.sql.DriverManager;
...
public static void main(String[] args) {
Connection conn = null;
...
try {
...
// Устанавливаем соединение с базой данных
conn = DriverManager.getConnection("jdbc:mysql://localhost/supplement");
...
} catch (Exception e) {
e.printStackTrace(System.err);
}
...
}
...
Выполнение запроса к базе данных
Запрос к базе данных
инкапсулируется внутри объекта классаStatement
.
В приведенном ниже фрагменте кода выполняется простой запрос к базе данных для
получения всех записей таблицыdeliveries
.
Результат запроса помещается в объект-хранилищеResultSet
, содержимое которого затем
выводится на консоль.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
...
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
...
// Создаем объект-выражение
stmt = conn.createStatement();
// Выполняем запрос к базе данных
rs = stmt.executeQuery("SELECT * FROM deliveries");
// Выводим на консоль значения 2-х полей полученных записей
while (rs.next()) {
System.out.println(rs.getString("id")
+ ": " + rs.getString("price"));
}
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
try {
if (rs != null) { rs.close(); }
if (stmt != null) { stmt.close(); }
if (conn != null) { conn.close(); }
} catch (SQLException e) {
e.printStackTrace(System.err);
}
}
}
...