Java и MySQL
Java и MySQL
Базы данных нашли широкое применение в современном мире программного обеспечения. Наличие мощных вычислительных систем делает возможным создание крупных сервисов по сбору, обработке, хранению, и выдаче структурированной информации. При этом в качестве ядра может выступать MySQL Database server - хорошо зарекомендовавшая себя на практике реализация идеи реляционных баз данных. Помимо этого особое значение приобретают servlet и JSP технологии программирования динамических Web-приложений. Последнее особенно важно, т.к. позволяет относительно легко и просто создавать и поддерживать сайты высокого качества. Основной целью настоящего руководства является описание в простой и наглядной форме процедуры доступа к базе данных MySQL из java-приложения.
В каждом из пунктов приводятся общие сведения, знание которых требуется для спешного выполнения поставленной задачи. На основе них формируются конкретные программные реализации, позволяющие получить требуемую функциональность на практике.
В качестве примера, будем использовать задачу создания базы данных отдела поставок предприятия, специализирующегося на выпуске кондитерских изделий (Кондитерская фабрика).
Содержание
3. Установка и запуск MySQL Database server
4. Установка MySQL Connector/J
6. Создание базы данных в MySQL
7. Регистрация MySQL Connector/J
8. Соединение с MySQL Database server из java-приложения
9. Выполнение запроса к базе данных
Программное обеспечение
Для рассмотрения процедуры доступа к базам данных MySQL из java-приложений под правлением ОС Windows на компьютере должно быть становлено:
Windows 9x, Me, NT, 2, 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
В настоящем руководстве используется JDK версии 1.5.0. Системные требования, также инструкции по становке можно узнать, кликнув по ссылке домен сайта скрыт/j2se/1.5.0/install.html .
Для спешного запуска примеров необходимо прописать путь к корневой директории классов приложения <java-app-home> в переменной окружения CLASSPATH: 
set CLASSPATH=<java-app-home>;%CLASSPATH%
Установка и запуск MySQL Database server
В руководстве используется MySQL
Database server версии 4.1 или выше. Он распространяется как в рамках GNU
лицензии (General Public License домен сайта скрыт/licenses/
), так и в виде коммерческого продукта ( домен сайта скрыт/company/legal/licensing/
). Дистрибутив находится здесь домен сайта скрыт/downloads/
. Для становки необходимо запустить файл Setup.exe. Далее следует казать директорию, в которую будет становлен сервер. Помимо этого, программа установки потребует дополнительный набор сведений, необходимый ей для спешного выполнения распаковки. Для запуска MySQL сервера необходимо запустить файл <MySQL-home>\bin\mysqld-nt.exe.
Для вывода списка параметров, используемых при запуске, добавим параметры --verbose --help. Далее будем предполагать, что MySQL Database server спешно становлен и запущен. 
Установка MySQL Connector/J
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=<MySQL-Connector/J-home>\mysql-connector-java-3.1.6-bin.jar;%CLASSPATH%
Структура базы данных
База данных (supplement) отдела поставок будет содержать две таблицы: 
1. Таблица ресурсов (необходимые для производства продукты [полуфабрикаты] пищевой промышленности).
2. Таблица поставщиков (поставщики ресурсов).
В скобках казываются имена, используемые в MySQL для описания соответствующих элементов:
Таблица ресурсов (deliveries) содержит 5 полей: 
- идентификатор ресурса (id)
- название ресурса (name) 
- название поставщика (supplier)
- объем поставки (amount)
(количество единиц продукции в поставке) 
- стоимость единицы продукта (price)
(денежный формат представления данных) 
Таблица поставщиков (suppliers) содержит 6 полей: 
- идентификатор поставщика (id)
- название компании поставщика (name)
- расчетный счет (account) 
- имя контактного лица (КЛ) (first_name)
- фамилия КЛ (last_name) 
- отчество КЛ (second_name) 
Создание базы данных в MySQL
В настоящем пункте описывается последовательность команд, используемая для создания базы данных supplement в MySQL. 
1.
shell> <MySQL-home>\bin\mysql.exe -u root -p lifeisgood
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-home>\data\deliveries.csv и <MySQL-home>\data\suppliers.csv (предполагается,
что файлы были предварительно созданы и заполнены необходимыми данными): 
mysql> LOAD DATA INFILE '../data/deliveries.csv' INTO TABLE deliveries;
mysql> LOAD DATA INFILE '../data/suppliers.csv' INTO TABLE suppliers;
23.
mysql> exit
Регистрация MySQL Connector/J
Создадим класс MySQLAccess, внутри которого инкапсулируем доступ к созданной в предыдущем пункте базе данных. Поместим его описание в файл <java-app-home>\MySQLAccess.java.
Для доступа к базам данных используется JDBC, конкретное соединение предоставляется объектом класса DriverManager.DriverManager должен знать тип драйвера, используемого для работы с конкретной СУБД. Самый простой способ регистрации драйвера, это использовать Class.forName() для класса, реализующего интерфейс java.sql.Driver.
Для MySQL Connector/J имя класса драйвера имеет вид com.mysql.jdbc.Driver. 
В следующем фрагменте кода происходит регистрация MySQL драйвера.
...
а...
   / Регистрация драйвера MySQL  Class.forName("com.mysql.jdbc.Driver").newInstance(); ...  <} catch (Exception e) {    <} ...  <} ...  
 Соединение с MySQL Database server из java-приложения  После того как мы зарегистрировали драйвер базы данных MySQL, можно становить соединение с сервером, используя метод  В следующем фрагменте кода происходит становка соединения с базой данных  import java.sql.Connection; import java.sql.DriverManager; ...    Connection conn = null; ...   ...  / станавливаем соединение с базой данных   ...  <} catch (Exception e) {    <} ...  <} ...  
 Выполнение запроса к базе данных  Запрос к базе данных инкапсулируется внутри объекта класса  import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; ...    Connection conn = null;  Statement stmt = null;  ResultSet rs = null;   ...  / Создаем объект-выражение    / Выполняем запрос к базе данных  rs = stmt.executeQuery("SELECT * FROM deliveries");  / Выводим на консоль значения 2-х полей полученных записей   System.out.println(rs.getString("id")   <+ ": " + rs.getString("price"));  <}  <} catch (Exception e) {    <} finally {   if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); }  <} catch (SQLException e) { e.printStackTrace(System.err);  <}  <}  <} ...  
getConnection() класса DriverManager. казанный метод в качестве параметра принимает URL базы данных (хотя возможно дополнительно указать имя пользователя и пароль, см. документацию к классу). Метод возвращает класс-соединение Connection с базой данных. supplement. Statement.
В приведенном ниже фрагменте кода выполняется простой запрос к базе данных для получения всех записей таблицы deliveries.
Результат запроса помещается в объект-хранилище ResultSet, содержимое которого затем выводится на консоль. 
    
	

