| Сдавался/использовался | Апрель/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);
}
}
}
...