Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

382 Глава Использование библиотеки языка С

rows

Удаление таблицы.

Запрос завершился

"Could not drop

* * Закрытие

Программа, представленная в листинге создает таблицу и добавляет в нее за писи. Далее происходит удаление части записей, обновление записи и, наконец, уда ление всей таблицы. Обратите внимание на способ вставки записей. В цикле бла годаря функции происходит повторное использование одной и той же инструкции INSERT, в которую подставляются разные параметры. Эта простая дика не так эффективна, как подготовка одной инструкции INSERT, вставляющей группу записей. Но представьте себе программу, принимающую произвольные запросы на добавление, обновление и удаление записей. Тогда такая ме тодика окажется весьма удобной.

(Java Database Connectivity) — это стандартный интерфейс Java, предназна ченный для взаимодействия с базами данных. Он поддерживает работу как с реля ционными базами данных, так и с простыми табличными данными, например с текстовыми файлами, поля которых разделены символами табуляции. Интерфей сом JDBC пользуются как прикладные программисты, так и разработчики драйверов баз данных. Существует несколько для MySQL. Новейшие их версии

доступныпоадресуhttp://mmmysql.sourceforge.net.

В этой главе предполагается, что читатели знакомы с языком Java и умеют компи лировать Каждый работает в той среде, которая ему нравится. Для простоты я воспользовался утилитами компании Sun, установив их в Windows.

Подготовка программы

Интерфейс JDBC является частью пакета Java 2 SDK. Чтобы иметь возможность подключаться к серверу MySQL, необходимо добавить каталог драйвера MySQL в спи сок путевых имен классов. Я инсталлировал драйвер MM.MySQL в каталог В результате был создан подкаталог 2с. Затем я расширил список путевых имен классов, чтобы он выглядел следующим образом:

С 3 С 3

Обратите внимание на формат имен 8.3, свойственный Windows.

Библиотека функцийJDBC инкапсулирована в пакете

поэтому программа

должна импортировать все его классы

Сам драйвер неимпортируется.

Он загружается на этапе выполнения программы с помощью метода

Имя драйвера MM.MySQLвыглядит так:

 

Driver. Этот класс, как и

все драйверыJDBC, реализует интерфейс j

Driver.

 

386

После загрузки драйвера воспользуйтесь услугами менеджера драйверов для уста новления соединения с сервером. Для этого нужно сформировать URL адрес соеди нения. Формат адреса таков:

[узел]

В табл. 17.1 приведен список параметров, которые можно указывать в строке под ключения.

Параметр

Описание

 

Если равен True, драйвер будет повторно подключаться к

 

серверу в случае потери связи с ним; по умолчаниюравен

 

False

 

Если параметр равен True, то данный пара

 

метр задает используемый набор символов

 

Задает интервал времени в секундах между попытками

 

подключения к серверу (по умолчанию — 2 секунды)

 

Задает максимальное число повторных попыток

 

чения ксерверу (по умолчанию — 3)

 

Задает максимальное число записей, которое

 

получено в ответ на запрос; по умолчанию равен нулю,

 

т.е. ограничение отсутствует

password

Задает пароль для подключения

 

Задает имя пользователя

useUnicode

Если равен True, драйвер будет кодировать строки по

 

стандарту Unicode; по умолчанию равен

Врамках сеанса можно посылать произвольное число инструкций. Чтобы закрыть соединение,вызовитеметод

Влистинге 17.1 показана минимальная Java программа, которая подключается к серверу и тут же отключается.

import

public class

public static void

Извлечение данных 387

Загрузка try

catch (Exception

try

Подключение к базе данных.

Connection с

Закрытие

catch e)

Извлечение данных

Прежде чем посылать запросы базе данных, необходимо создать объект класса Statement. можно многократно использовать в запросах. В классе Statement есть три метода выпол нения запросов: и execute Update Каждый из них в качестве аргумента принимает текст запроса. Метод executeQuery возвращает объект класса содержащий щий набор записей. Метод возвращает число записей, участво вавших в запросе (это особенно удобно для инструкций INSERT и UPDATE). Метод execute возвращает 1 в случае инструкции SELECT и число записей для остальных запросов. удобно использовать тогда, когда тип выполняемого запроса неизвес тен заранее. В случае необходимости результирующий набор записей можно будет получить с помощью метода

Объект класса ResultSet хранит указатель на текущую запись результирующего на бора. Для получения первой записи необходимо вызвать метод next Этот метод удобно использовать в качестве условия цикла, так как по достижении конца набора он возвращает NULL. После извлечения записи можно определить значения ее полей с мощью одного из методов семейства Полное имя метода соответствует типу возвращаемого значения. Например, метод возвращает числовое представ ление ячейки, а метод возвращает объект класса Date. Можно вызывать любой метод —драйвер самостоятельновыполнит необходимое преобразование.

В методах семейства столбцы задаются по имени или по номеру. В нумерация столбцов начинается с единицы. Если столбцы адресуются по имени, не

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++)

Изменение данных 389

Удаление

Закрытие

catch

Если число столбцов в таблице результатов запроса неизвестно, необходимо соз дать объект класса В этот класс входят методы, позволяющие определять количество столбцов, их имена, размерности ит.д.

Изменение данных

Запросы на вставку или обновление данных не возвращают наборы записей. Ис пользуйте метод который возвращает число записей, участвовав ших в запросе. Если ни одна запись не была изменена, возвращается нуль.

Программа, показанная в листинге 17.3, создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. Класс Prepared Statement позволяет описать запрос с параметрами, которые будут подставляться драйвером. В других СУБД поддерживаются предварительно скомпилированные за просы, которые анализируются один раз, а потом многократно выполняются.

ВMySQL вместо этого применяются запросы с параметрами.

Вподготовленном запросе метасимвол обозначает параметр, подставляемый драйвером перед выполнением запроса. Есть группа методов семейства по зволяющих присваивать значения параметрам по номерам. Первый параметр имеет номер 1. Благодаря этому нет необходимости использовать различные управляющие

символы, защищаемые одинарными кавычками. Если вызвать метод то перед отправкой запроса серверу драйвер сохранит на диске образ объекта.

import

public class

public static void

Connection

Загрузка драйвера.

try

390

catch (Exception e)

try

Подключение к базе данных.

с

Создание инструкции.

Statement

Создание

 

 

"CREATE TABLE

 

"ID

NOT NULL

 

"Name

 

 

"PRIMARY

 

 

Подготовка шаблона инструкции INSERT.

String

new

 

"INSERT INTO testapi (Name) VALUES

Выполнение инструкций

 

String[] names

"Vicky",

"Carl", "Ricky",

 

"Jeff", "Bob",

"Tina",

i++)

row

Удаление

"DELETE FROM testapi WHERE ID rows

Обновление записей.

"UPDATE testapi SET Name rows

Удаление таблицы.

TABLE

Удаление

Изменение данных 391

close

Закрытие

catch