![](/user_photo/1438_p9ksI.png)
MySQL. Библиотека профессионала - Аткинсон Л
..pdf![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F381x1.jpg)
382 Глава Использование библиотеки языка С
rows
Удаление таблицы.
Запрос завершился
"Could not drop
* * Закрытие
Программа, представленная в листинге создает таблицу и добавляет в нее за писи. Далее происходит удаление части записей, обновление записи и, наконец, уда ление всей таблицы. Обратите внимание на способ вставки записей. В цикле
бла годаря функции
происходит повторное использование одной и той же инструкции INSERT, в которую подставляются разные параметры. Эта простая
дика не так эффективна, как подготовка одной инструкции INSERT, вставляющей группу записей. Но представьте себе программу, принимающую произвольные
запросы на добавление, обновление и удаление записей. Тогда такая ме тодика окажется весьма удобной.
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F383x1.jpg)
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F384x1.jpg)
(Java Database Connectivity) — это стандартный интерфейс Java, предназна ченный для взаимодействия с базами данных. Он поддерживает работу как с реля ционными базами данных, так и с простыми табличными данными, например с текстовыми файлами, поля которых разделены символами табуляции. Интерфей сом JDBC пользуются как прикладные программисты, так и разработчики драйверов баз данных. Существует несколько
для MySQL. Новейшие их версии
доступныпоадресуhttp://mmmysql.sourceforge.net.
В этой главе предполагается, что читатели знакомы с языком Java и умеют компи лировать Каждый работает в той среде, которая ему нравится. Для простоты я воспользовался утилитами компании Sun, установив их в Windows.
Подготовка программы
Интерфейс JDBC является частью пакета Java 2 SDK. Чтобы иметь возможность подключаться к серверу MySQL, необходимо добавить каталог драйвера MySQL в спи сок путевых имен классов. Я инсталлировал драйвер MM.MySQL в каталог В результате был создан подкаталог
2с. Затем я расширил список путевых имен классов, чтобы он выглядел следующим образом:
С
3
С
3
2С
Обратите внимание на формат имен 8.3, свойственный Windows.
Библиотека функцийJDBC инкапсулирована в пакете |
поэтому программа |
|
должна импортировать все его классы |
Сам драйвер неимпортируется. |
|
Он загружается на этапе выполнения программы с помощью метода |
||
Имя драйвера MM.MySQLвыглядит так: |
|
Driver. Этот класс, как и |
все драйверыJDBC, реализует интерфейс j |
Driver. |
|
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F385x1.jpg)
386
После загрузки драйвера воспользуйтесь услугами менеджера драйверов для уста новления соединения с сервером. Для этого нужно сформировать URL адрес соеди нения. Формат адреса таков:
[узел]
В табл. 17.1 приведен список параметров, которые можно указывать в строке под ключения.
Параметр |
Описание |
|
Если равен True, драйвер будет повторно подключаться к |
|
серверу в случае потери связи с ним; по умолчаниюравен |
|
False |
|
Если параметр равен True, то данный пара |
|
метр задает используемый набор символов |
|
Задает интервал времени в секундах между попытками |
|
подключения к серверу (по умолчанию — 2 секунды) |
|
Задает максимальное число повторных попыток |
|
чения ксерверу (по умолчанию — 3) |
|
Задает максимальное число записей, которое |
|
получено в ответ на запрос; по умолчанию равен нулю, |
|
т.е. ограничение отсутствует |
password |
Задает пароль для подключения |
|
Задает имя пользователя |
useUnicode |
Если равен True, драйвер будет кодировать строки по |
|
стандарту Unicode; по умолчанию равен |
Врамках сеанса можно посылать произвольное число инструкций. Чтобы закрыть соединение,вызовитеметод
Влистинге 17.1 показана минимальная Java программа, которая подключается к серверу и тут же отключается.
import
public class
public static void
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F386x1.jpg)
Извлечение данных 387
Загрузка try
catch (Exception
try
Подключение к базе данных.
Connection с
Закрытие
catch e)
Извлечение данных
Прежде чем посылать запросы базе данных, необходимо создать объект класса Statement. можно многократно использовать в запросах. В классе Statement есть три метода выпол нения запросов:
и execute Update
Каждый из них в качестве аргумента принимает текст запроса. Метод executeQuery
возвращает объект класса
содержащий
щий набор записей. Метод
возвращает число записей, участво вавших в запросе (это особенно удобно для инструкций INSERT и UPDATE). Метод execute
возвращает 1 в случае инструкции SELECT и число записей для остальных запросов.
удобно использовать тогда, когда тип выполняемого запроса неизвес тен заранее. В случае необходимости результирующий набор записей можно будет получить с помощью метода
Объект класса ResultSet хранит указатель на текущую запись результирующего на бора. Для получения первой записи необходимо вызвать метод next Этот метод удобно использовать в качестве условия цикла, так как по достижении конца набора он возвращает NULL. После извлечения записи можно определить значения ее полей с
мощью одного из методов семейства
Полное имя метода соответствует типу возвращаемого значения. Например, метод
возвращает числовое представ ление ячейки, а метод
возвращает объект класса Date. Можно вызывать любой метод —драйвер самостоятельновыполнит необходимое преобразование.
В методах семейства столбцы задаются по имени или по номеру. В
нумерация столбцов начинается с единицы. Если столбцы адресуются по имени, не
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F387x1.jpg)
388 Глава 17.
обходимо, чтобы результирующий набор записей содержал различающиеся имена столбцов. Для устранения неоднозначностей пользуйтесь псевдонимами столбцов.
В листинге 17.2 показана простая программа, которая извлекает данные из табли цы user. Обратите внимание на то, что программа пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете эксперимен тировать с этой программой, подставьте корректные значения имени пользователя и пароля.
import
public class
public static void
Загрузка драйвера. try
catch (Exception
try
Подключение к базе данных.
Connection с
Создание
Statement
Выполнение запроса.
"SELECT User, Host FROM user ORDER BY
Получение метаданных.
Вывод результатов запроса. while
Перебор всех столбцов. |
|
for(int |
i++) |
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F388x1.jpg)
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F389x1.jpg)
![](/html/1438/356/html_amDLSm0pjx.n5LJ/htmlconvd-Bqne0F390x1.jpg)
Изменение данных 391
close
Закрытие
catch