Настройка баз данных

В

этой главе рассматриваются серверы баз данных и таблицы баз данных, которые используются в программах-примерах этой книги. Я расскажу, как настраивать серверы и создавать базы данных и таблицы, используемые в сопровождающих кни­гу материалах.

Большинство из представленных в этой книге программ, использующих базы данных, должны работать без особых усилий с вашей стороны, если на вашей маши­не установлены Access, MySQL или InterBase и настроены необходимые библиотеки в JBuilder. Если у вас не установлена ни одна из перечисленных баз данных, инфор­мация, содержащаяся в этой главе, поможет вам установить и настроить их. Если вы не знаете, какую из них предпочесть, я бы порекомендовал в первую очередь MySQL, затем InterBase и в последнюю очередь Access. Каждая из них использована в том или ином примере в сопровождающих материалах, поэтому, если вы хотите за­пускать все программы, не модифицируя их, вам потребуется установить все три базы данных. Если же вы предпочитаете пользоваться одной базой данных, то смо­жете заставить все программы работать, попросту изменив драйвер для программ, настроенный на базу данных, которая не установлена в вашей системе. Как вы уви­дите в следующих разделах этой главы, сопровождающие книгу материалы содержат три идентичных набора данных, — по одному для MySQL, InterBase и Access.

примечаниеВ этой книге я счел нужным обратить особое внимание на базу данных MySQL: это бесплатный, надежный, быстрый и мощный продукт, ставший широко исполь­зуемым стандартом. Я постараюсь предоставить достаточно информации для того, чтобы вы могли использовать в качестве альтернатив InterBase или Access, если вам того захочется. Однако в качестве основной базы данных в главе будет использовать­ся именно MySQL. Я старался сделать так, чтобы все программы-примеры работали с любым из серверов баз данных.

В этой главе я не буду объяснять, как устанавливать и настраивать Access по причине большой его популярности и простоты установки. Тем не менее, в следующей главе я расскажу, как подключаться к нему с помощью JBuiIder. Я поддерживаю Access, чтобы помочь читателям, которым хотелось бы попробовать свои силы в программировании Баз данных, не забираясь в такие дебри, как установка и настройка сервера.

Большинство из команд, которые я собираюсь продемонстрировать, будут нор­мально работать с любой из распространенных баз данных. Вся идея инструментов взаимодействия с базами данных JBuilder и Java состоит как раз в том, чтобы абстра­гировать код от специфики каждой конкретной базы данных.

Если у вас уже установлены MySQL, InterBase или Access, большую часть этой главы вы можете спокойно пропустить. Разделы, на которые стоит обратить внима­ние всем, — это "Работа с различными базами данных", "Подготовка данных для вы­полнения примеров этой книги" и последние разделы главы, посвященные на­стройке среды и Ant.

В конце главы приведена информация, которая может пригодиться тем, кто пользуется иными базами данных (то бишь, не MySQL, не InterBase и не Access). В частности, вы найдете SQL-операторы, определяющие метаданные для таблиц, а также указатели на текстовые файлы, содержащие типовые SQL-операторы для по­мещения информации в базу данных.

Работа с различными базами данных

В состав сопровождающих книгу материалов входит база данных, которая назы­вается jbbook. Эта база данных содержит ряд таблиц, на большинство из которых ссылается одна или несколько программ-примеров.

Я предоставил копию базы данных jbbook для пользователей Access, MySQL и InterBase, однако основной базой данных, используемой в рассматриваемых приме­рах, будет все-таки MySQL. О том, как устанавливать и настраивать эти базы дан­ных, рассказывается в этой главе и в файле Index.Html В сопровождающих материалах.

Как правило, переключаться между этими различными версиями базы данных должно быть очень просто; многие из предоставленных мною программ позволяют перейти от одной версии к другой, изменив одну-единственную переменную в про­грамме.

Если вы не особо разбираетесь в базах данных и SQL, я бы посоветовал устано­вить MySQL и выполнить упражнения, описываемые на следующих страницах кни­ги. Немалая часть этой главы посвящена рассмотрению основных команд, которые можно давать базе данных SQL. Также мы рассмотрим, как обращаться к основным функциям этих мощных инструментов.

MySQL — одна из наиболее мощных баз данных из числа доступных в настоящее время. Глубокое понимание того, как пользоваться этой замечательной програм­мой, — навык более чем полезный.

примечаниеВ первых страницах этой главы речь пойдет о работе в режиме командной стро­ки. Установив надлежащим образом базу данных и разобравшись с доступом к дан­ным jbbook, можно переходить к следующей главе. В ней вы увидите, как во всю эту картину вписывается JBuilder.

Существует несколько оболочек с графическим интерфейсом для MySQL1 однако те, которые мне доводилось видеть, особых симпатий у меня не вызвали. Кроме того, командная строка — единственный не зависящий от операционной системы Способ взаимодействия с MySQL.

Установка и настройка MySQL под Windows

MySQL — очень быстрая, полнофункциональная база данных с открытым исход­ным кодом. Я нахожу удивительным тот факт, что столь мощная и высоконадежная
база данных является бесплатной. Этот сервер используется на куче популярных Web-сайтов, в числе которых крупнейшие компании наподобие Yahoo, MP3.com, Motorola, NASA, Silicon Graphics и Texas Instruments. C его помощью обрабатывают­ся огромные базы данных в ответственных ситуациях. Всего же в мире работает бо­лее двух миллионов серверов под управлением MySQL.

Выгрузить MySQL можно из следующих сайтов: Http://www. mysql. org или Http://www. mysql. com. Вам потребуется версия MySQL Мах, поскольку она обес­печивает поддержку InnoDB. MySQL предоставляется бесплатно для персональных и некоммерческих разработок в соответствие с открытой лицензией GNU. Если же вы хотите использовать MySQL в коммерческих целях, вам придется уплатить не­большую (по сравнению со стоимостью других баз данных) сумму.

Дистрибутив, который вы выгрузите с Mysqi. Org, включает в себя программу ус­тановки для Windows. Запустите программу установки. Точно так же, как и для лю­бой другой Windows-программы, это установка "в лоб", посему комментариев она не требует.

В корневом каталоге Mysqi, Созданном программой установки, есть несколько файлов — MySmall.Cnf, MyMedium.Cnf, MyLarge.Cnf И т. д. Переместите и пере­именуйте первый из этих файлов так, чтобы он назывался C:\My.Cnf. Это следует понимать совершенно буквально: даже если загрузка Windows выполняется с како­го-то другого диска, все равно поместите файл в корень диска С.

примечаниеВторую — идентичную — копию этого файла необходимо поместить в каталог Windows. Дайте ему несколько иное имя: C:\Windows\My.Ini. Скорее всего, MySQL будет использовать только один из двух этих файлов, но лучше включить их оба — если у вас не уверены на 100% в том, что MySQL обращается только к одному. (Если на вашей машине установлена Windows 2000 или NT 4, второй файл должен назы­ваться с: WinntMy. Ini.)

Я буду просить вас внести еще изменения в оба файла, поэтому лучше держать их оба открытыми в текстовом редакторе (таком как редакторе JBuiIder), кото­Рый способен работать с несколькими файлами.

На вопрос, какой из файлов использует MySQL, можно будет окончательно отве­тить тогда, когда у вас все заработает. Тогда вы сможете дать команду show variables в командной строке монитора mysqi, как описано ниже в этой главе. Так вы увидите, какие значения заданы для basedir, key_buffer_size и т. д. Изменяя эти значения в одном из файлов и не трогая их в другом, вы, в конце концов, выяс­ните, какой же из файлов на самом деле используется MySQL.

Будьте также внимательны с расширениями этих файлов: в Windows, особенно пользуясь блокнотом, легко получить файлы со странными именами вроде my. ini. ini или my. sql. ini. Самый лучший способ проверить правильность имен — это просмотреть файлы в режиме командной строки с помощью команды dir. Не стоит доверять проводнику Windows, который может неправильно сооб­щить расширение файла.

В файлы my. cnf и Ту. Ini в разделе mysqld необходимо добавить текст, указыва­ющий на каталог, куда вы установили MySQL. В частности, потребуется добавить три узла — baserdir, datadir и language:

port socket [mysqld] basedir datadir language port socket skip-locking set-variable set-variable set-variable set-variable set-variable set-variable server-id= 3306

= c:∕temp∕mysql. sock

= f:∕mysql

= f:∕mysql∕data

= f:∕mysql∕share∕englisħ = 3306

= c:/temp∕mysql. sock

= key_buffer=16K = max_allowed__packet=lM = thread_stack=64K = table_cache=4 = sort_buffer=64K = net__buffer_length=2K = 1

Обратите также внимание на то, что я дважды задал в качестве каталога сокета место на моей машине, которое удобно для меня. Для порта в большинстве случаев можно оставить значение по умолчанию — 330б.

примечаниеВ этой выдержке из кода важность представляют три первых строки после [Mysqld] И кусочек после С:TempMysql.Sock. Все остальное приводится только контекста ради. Тем не менее, вам следует просмотреть файл и удостовериться, что все строки путей в нем имеют смысл. В частности, по умолчанию пути в файле мо­гут быть путями Linux; поменяйте все обнаруженные пути Linux на пути Windows.

Я включил свой файл my. cnf в каталог Database, находящийся в со­провождающих книгу материалах. Вы можете сравнить свою работу с моей, просмот­рев этот файл, а также проверив возможные обновления на сайтах Www. elvenware. com и Www. diasoft. kiev. ua.

Насколько мне известно, не имеет значения, куда на своем жестком диске вы ус­тановите MySQL, при условии, что вы создадите файл конфигурации и поместите копию его на диск Сив каталог Windows. Например, на моей машине сейчас все на­строено так:

Basedir=g:∕Utilities∕mysql

Datadir=g:∕Utilities∕mysql∕data

примечаниеLanguage=g:∕Utilities∕mysql∕share∕English

Работая под управлением Windows XP, я столкнулся с проблемами при включении комментария в строку, разбираемую из файла конфигурации. Можно запро­сто включить подобные комментарии, поскольку они имеются в рекомендациях по уста­новке, по крайней мере, в некоторых старых версиях документации по продукту. Напри­мер, в некоторых версиях справки есть такая строка:

Datadir=F: ∕MysqlData # DonT Include Comments Here

(Datadir=F:∕MysqlData # Не включайте сюда комментарии)

Необходимо удалить комментарий или перенести его на отдельную строку:

# Помещайте комментарии на отдельные строки

Datadir=F:∕MysqlData

В среде Windows программа, которую нужно выполнить для запуска MySQL, бу­дет НОСИТЬ Название Mysqld.Exe, MsqldMax.Exe, MsqldMaxNt.Exe Или какой — либо вариации на эту тему. Эти файлы входят в стандартную установку и хранятся в каталоге MysqlBin. В нескольких следующих абзацах я объясню причину суще­ствования различных версий исполняемых файлов.

MySQL поддерживает мощный стандарт баз данных, называемый InnoDB. Без этого дополнения к MySQL мне не удавалось надлежащим образом установить вне­шние ключи. MySQL великолепно работает и без InnoDB, но, если вы хотите в пол­ной мере воспользоваться преимуществами MySQL, вам следует подключить InnoDB. Почитать об этой технологии можно на сайте Www.Innodb.Com.

Поддержка InnoDB включается в те версии MySQL, в названии которых содер­жится СЛОВО "Max", Например, MysqldMaxNt.Exe. В СОСТЭВ Mysqld.Exe InnoDB не ВХОДИТ.

Для того чтобы включить функцию InnoDB, недостаточно просто запустить на выполнение mysqld-max-nt. exe; вам нужно также убрать комментарии в файле my. cnf или my. ini со следующих строк и указать для некоторых переменных на ре­альное местоположение готовой установки:

Innodb_data_file_path = ibdatal:IOOM innodb_data_home_dir = g:/Utilities∕mysql∕data innodb_log_group_home_dir = g:∕Utilities∕mysql∕data innodb_log_arch_dir =≈ g:/Utilities∕mysql∕data set-variable = innodb_mirrored_log_groups=l set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=l

Innodb_log_archive=0

Set-variable = innodb_buffer_pool_size=16M set-variable = innodb_additional_mem_pool_size=2M set-variable = innodb_file_io_threads=4

Set-variable = innodb_lock_wait_timeout=50

примечаниеB частности, обратите внимание на то, что я отредактировал innodb_data_home_dir, innodb_log_group_home_dir И Innodb_log_arch_dir так, чтобы ОНИ Указывали на соответствующие каталоги на моей машине.

На некоторых машинах может понадобиться указать путь к файлу IbdatalzlOOMl например, следующим образом: g: /Utili ties/ту sql/data/ ibdatal: IOOM. В одном из случаев это вроде бы помогло, но в большинстве случаев мне кажется, что лучше этот путь опустить.

Если вы правильно настроили свои конфигурационные файлы, при запуске MySQL будет создан 100-мегабайтный файл с именем ibdatal, в котором будут хра­ниться таблицы InnoDB. Этот файл появится в конкретном innodb_data_home_dir, указанном в my. cnf. Иными словами, вы можете проверить наличие этого файла — это один из способов убедиться, что поддержка InnoDB включена.

Если IOO Мб для вас слишком много, можете сделать ibdatal меньше (это не по­мешает вам работать с базами данных, которые используются в примерах этой книги).

Например, вы можете изменить путь к файлу данных вот так: innodb_data_file_path = ibdatal:2 5М

Если же вы хотите сделать файл больше, потребуется присоединить второе имя файла в конец первого:

Innodb_data_file_path = ibdatal:25M;ibdata2:2000M

Приведенная выше команда должна располагаться в одной строке.

Запуск MySQL в качестве автономного приложения под Windows

При первом запуске сервера вы должны запустить его как автономное приложе­ние, занимающее свое место в командном окне. В следующем разделе я расскажу, как запустить MySQL в виде службы. Выполнение MySQL в качестве службы, пожа­луй, в большинстве случаев является более предпочтительным методом, однако, на­страивая систему, вы должны запустить его как автономное приложение.

На машине под управлением Windows 2000 или XP из каталога mysql \Ып запус­тите сервер в командной строке следующим образом:

Mysqld-max-nt. ехе —standalone

По умолчанию сервер не выдает никакой информации. Вы должны увидеть оче­редное приглашение на ввод командны. Если же вы видите какие-либо выходные данные сервера, значит, что-то прошло не так. Если есть ошибки, проблема навер­няка связана с путями, которые были указаны в файле my. ini или my. cnf. Также посмотрите, нет ли в каталоге mysqi∕data файла mysqi. err или каких-либо иных недавно созданных файлов.

Перейдите во второе командное окно, войдите в каталог mysql∕bin и наберите mysql, чтобы запустить монитор mysql. Если все в порядке, вы увидите простое приглашение, подобное показанному ниже:

[£:∖mysql∖bin]mysql. ехе

Welcome to the MySQL monitor. Commands end with ; or ∖g.

Your MySQL connection id is 4 to server version: 3.23.49-max-nt

Type ‘help;1 or ‘∖h, for help. Type,∖c, to clear the buffer, mysql>

Сам по себе факт того, что вы находитесь в mysql, подтверждает, что все идет нормально. Поздравляю, вы у руля одной из наиболее мощных баз данных!

Однако дабы исключить все сомнения, наберите в командной строке команду status:

Mysql> status

for win95∕win98
mysql. ехе ver 11.16 connection id: current database: current user:
server version: protocol version: connection:
client characterset:
,distrib 3.23.49,
4
odbcsiocalhos t 3.23.4 9-max-nt 10
. via named pipe iatinl
(132)

server characterset: unix socket:
uptime:
threads:
flush tables:
open tables:
queries per second avg:
Iatinl

C:∕temp∕mysql. sock

16 min 17 sec

2 Questions: 20 Slow queries: 0 Opens: 7 1 1

0.020

Получив нечто подобное, вы можете быть в достаточной степени уверены, что MySQL работает.

Завершение автономного сервера MySQL под Windows

Если вы хотите завершить сервер, сначала выйдите из монитора mysqi, восполь­зовавшись командой Exit:

Mysql> exit;

Bye

[g:UtilitiesMysqlBin]

Вообще говоря, все команды, выдаваемые в среде монитора mysql, должны за­канчиваться точкой с запятой.

Команда для завершения mysql, когда он выполняется как приложение, выгля­дит так:

G:XutilitiesXmysqlXmysqladmin.Exe Shutdown

В следующем разделе объясняется, как запускать и останавливать сервер, когда он выполняется в виде службы (это, пожалуй, наиболее эффективный способ вы­полнения сервера).

Запуск и останов MySQL как Windows-службы

Программы, выполняющиеся в качестве служб, запускаются автоматически при загрузке компьютера. Когда вы выключаете компьютер, они автоматически останав­ливаются. Если такое поведение вам и требуется, вы должны выполнять MySQL как службу. Если в режиме командной строки у вас все выполняется правильно, завер­шите автономный сервер, как показано в предыдущем разделе. Затем установите MySQL как службу:

[G:XutilitiesXmysqlXbin]MysqldMaxNt.ExeInstall

Service successfully installed.

[g:XutilitiesXmysqlXbinlnet start mysql

The MySql service is starting.

The MySql service was started successfully.

Вы всегда можете узнать, какие службы у вас выполняются, набрав в командной строке Net Start. Если же вы предпочитаете пользоваться средствами графическо­го интерфейса, зайдите в панель управления, выберите аплет Администрирование и загляните в список служб.

Если вы хотите удалить службу, сначала остановите ее, а затем удалите с помо­щью инструментов, входящих в состав MySQL:

[g:XutilitiesXmysqlXbin]net stop mysql

The MySql service is stopping.

The MySql service was stopped successfully.

[g:UtilitiesMysqlBin]mysqld-max-nt. exe — remove

Service Successfully Removed.

Если вы выполняете MySQL как службу, вам не нужно беспокоиться о его закры­тии при выключении компьютера в конце рабочего дня. Просто завершите работу Windows обычным способом, и ваша MySQL будет остановлен автоматически.

Настройка MySQL под Linux

Как и в случае с большинством инструментов с открытым исходным кодом, вы обнаружите, что настраивать MySQL под Linux намного проще, нежели под Windows. Собственно говоря, MySQL может быть уже установлен в вашей копии Linux.

примечаниеЕсли же он не установлен, выгрузите соответствующие rpm-файлы из сайта Www. mysql. org и затем установите их.

RPM расшифровывается как Redhat Package Manager (Администратор пакетов Redhat). Это инструмент для автоматической установки или удаления программ в Linux. Это запускаемая из командной строки программа, которая делает все то, за что в Среде Windows отвечает программа установки InstaIIShieId.

Выгрузив файлы, установите их следующим образом:

RpmUhv MySQL-3.23.49AL.I386.Rpm RpmZUhv MySQLMax-3.23.49AL .I386. Rpm RpmUhv MySQLClient-3.23.49AL.I386.Rpm RpmUhv MySQLShared-3.23.49AL.I386.Rpm RpmUhv MyODBC-3.51.02-1.I386. Rpm

Фактические версии полученных вами файлов значения не имеют, — при усло­вии, что они не старее тех, которые показаны здесь. Обратите внимание на то, что файл MySQL-Max — это как раз тот файл, который обеспечивает поддержку InnoDB. Чтобы использовать InnoDB, потребуется скопировать файл my-smail. cnf в каталог ∕etc∕my. cnf и убрать комментарии с опций, обеспечивающих поддержку InnoDB. Остальные пути в файле наверняка будут правильными, но вам нужно будет доба­вить Строки basedir И datadir:

[Mysqld]

Basedir = ∕VarLibMysqlDatadir = ∕VarLibMysqlLanguage = ∕UsrShareMysqlEnglish

Проследите за тем, чтобы в вашем разделе var было достаточно пространства для хранения в нем базы данных. Например, на одной из своих машин я ограничил фактический размер файла InnoDB до 25 Мб, как можно видеть в ∕etc∕my. cnf:

# Uncomment the following if you are using Innobase tables

(# Расскомментируйте следующие строки, если вы испольауете таблицы Innobase)

Innodb_Data_File_Path = Ibdatal:25M Innodb_Data_Home_Dir = ∕VarLibMysqlInnodb_Log_Group_Home_Dir = ∕VarLibMysqlInnodb_Log_Arch_Dir = ∕VarLibMysql

Set-variable = innodb_mirrored_log_groups=l set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=8M innodb_f lush_log_at_trx_commit=l innodb_log_archive=0

Set-variable = innodb_buffer_pool_size=16M set-variable = innodb_additional_mem_pool_size=2M set-variable = innodb_file_io_threads=4

Set-variable = innodb_lock_wait_timeout=50

Удостоверьтесь, что файл с именем ibdatal существует в каталоге ∕var∕lib∕ mysqi. Существование этого файла — одно из свидетельств тому, что InnoDB настро­ена правильно. Посмотрите также, нет ли в вашем каталоге ∕var∕lib∕mysql файлов с расширением. err.

Последняя команда rpm устанавливает ODBC-драйверы. В вашей системе это может не понадобиться, поскольку, в конце концов, вы наверняка будете использо­вать вместо них JDBC-драйвер. Однако я забегаю вперед: о драйверах мы поговорим в следующей главе.

После выполненных вами действий все должно быть настроено так, чтобы MySQL автоматически запускался и останавливался при загрузке и выключении компьютера. А вот как явным образом остановить и запустить MySQL под Linux

Mysqladmin shutdown

∕usr∕bin∕safe_mysqld

Если вам нужно задать пароль, сделайте это так, как в одном из приведенных ниже примеров

Mysqladπιin Shutdown

IDysqladmin —password=foo shutdown

В первом примере система будет запрашивать пароль, а во втором предоставит возможность ввести его в командной строке

Чтобы задать пользователя и пароль, воспользуйтесь следующим синтаксисом

Inysqladmin —user=root —password=foo

По умолчанию во вновь установленной программе будет два пользователя: при­вилегированный (root) и анонимный (с пустым именем). Пароль никому из них присвоен не будет. При данных обстоятельствах вы должны быть способны выдавать команды без указания пользователя или пароля. Присвоив пароль привилегирован­ному пользователю и удалив анонимного, вам потребуется вводить пароль всякий раз, когда будете пользоваться инструментами MySQL. Войдя в Linux в качестве привилегированного пользователя, вы сможете пользоваться MySQL без указания имени пользователя. Если же вы входите как простой пользователь, для которого вы создали учетную запись в MySQL, при работе с инструментами MySQL указывать имя пользователя вам не нужно. О пользователях и паролях я расскажу подробнее в следующих разделах главы.

Прежде чем пытаться запустить сервер, обязательно выполните сценарий mysql_instail_db, который обычно находится в каталоге ∕usr∕bin. Таким образом будут созданы таблицы, необходимые для правильной работы MySQL.

Чтобы перезапустить сервер вручную, выдайте следующие команды: [root@bree root]# /usr/bin/safe_mysqld

примечаниеStarting mysqld-max daemon with databases from ∕var∕lib∕mysql∕

Если вы сталкиваетесь с трудностями при запуске сервера, одной из причин может быть отсутствие у вас соответствующих полномочий в каталоге, в котором содержатся базы данных MySQL. В частности, это может быть причиной ошибки host. frm. Чтобы устранить эту проблему, можно попробовать изменить с помощью ко­манды chown полномочия на mysql. root:

Chown -R mysql. root var∕lib∕mysql;

Столкнувшись с этой или другой ошибкой, обязательно прочитайте автоматически сгене­Рированный файл ошибок Х. егг в каталоге Var/lib/mysql.

Если InnoDB установлена и настроена надлежащим образом, safe_mysqid будет запускать mysqld-ma×, а не mysqld. Если вы хотите запустить сервер и вернуться в командную строку, воспользуйтесь классическим трюком с применением амперсанта’

[гoot@bree root]# /usr/bin/safe_mysqld &

[1] 2194

[root@bree root]# Starting mysqld-max daemon with databases from ∕var∕lib∕mysql∕

[rootgbree root]# jobs

[1]+ Running /usr/bin/safe_mysqld &

Обратите внимание, что, запустив сервер в фоновом режиме, я смог набрать jobs в командной строке оболочки, чтобы убедиться, что он выполняется.

Теперь запустите монитор mysql и введите status, чтобы удостовериться, что все работает:

[CcalvertBbree ccalvert]$ mysql —user=root —password=foo

Welcome to the MySQL monitor. Commands end with ; or ∖g.

Your MySQL connection id is 54 to server version: 3.23.49a-Max

Type ‘help;’ or ‘∖h, for help. Type,∖c, to clear the buffer, mysql> status

54
rootblocalhost
stdout
f v
3.23.49a-max 10
localhost via unix socket
iatinl
iatinl
∕var∕lib∕mysql∕mysql.sock 15 hours 53 min 48 sec
1 questions: 1172 slow queries: o opens: 84 1 4
0.020
Mysql Ver 11.17 Distrib 3.23.49a, for pc-linux-gnu (i686) Connection id:

Current database:

Current user:

Current pager:

Using outfile:

Server version:

Protocol version:

Connection:

Client characterset:

Server characterset:

UNIX socket:

Uptime:

Threads:

Flush tables:

Open tables:

Queries per second avg:

Mysql>

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

А вот как запустить базу данных Mysqi Как Linux-службу, автоматически запуска­емую при загрузке.

[root@bree [1] 2664 [гootθbrββ
[1]+ done [rootθbree
Mysqi] # ∕usr∕share∕mysql∕mysql. server start &

Mysqi] # Starting mysqld-max daemon with databases # from ∕var∕lib∕mysql∕

∕υsr∕share∕mysql∕mysql. server start

Mysqi]#

Остановить службу можно следующим образом:

[root@bree mysqi]# .∕mysql.server stop killing mysqld with pid 2714 wait for mysqld to exit∖c

.∖c

.∖c

.∖c

.∖c

.∖c

.∖c

.∖c

Done

[rootθbree mysqi]#

Установив и настроив сервер, не забудьте выполнить команду run ∕usr∕bin /mysql_install_db. Так вы создадите таблицы по умолчанию в каталоге ∕var∕lib ∕mysql.

Оболочка с графическим интерфейсом для MySQL

Установив и настроив MySQL, можно начать пользоваться оболочкой для управ­ления им. На сайте Www. mysql. org доступны для выгрузки две оболочки с графи­ческим интерфейсом — MySQLGUI И MyCC. Ют под управлением Linux и Windows.

обе они являются бесплатными и работа-рис. 39.1. панель администрирования оболочки mysqlguiИсходя из моего опыта — как с Linux, так и с Windows — оболочка MySQLGUi Не особенно устойчива. Под Linux она рабо­тала лучше, но все равно довольно часто аварийно завершалась. Нею было легко пользоваться, она была очень хорошо (и довольно продумано) скомпонована — вот только стабильности ей явно не хва­тало. Все же с ней настолько легко рабо­тать, что, возможно, имеет смысл ее уста­новить. Если те части программы, кото­рые вам нужны, работают, у вас все будет получаться очень быстро. Окно оболоч­ки MySQLGUi Показано на рис. 39.1.

На момент выхода этой книги оболочка Мусе пребывала еще в состоянии альфа — версии. Тем не менее, она выглядит как весьма многообещающий инструмент. У нее пока немалая толика шероховатостей, и многих функциональных возможностей ей пока недостает, однако она достаточно стабильна. На рис. 39.2 показано одно из множества представлений, доступных в оболочке мусс.

примечаниеВ примерах, приведенных в этой книге, я буду пользоваться оболочкой Мусс. Од­нако вы должны помнить, что я работаю с альфа-версией этого продукта, и нет га­рантии, что к моменту, когда вы выгрузите и установите новую версию, все будет выглядеть точно так же.

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

При первом запуске Мусе вам потребуется добавить подключение к серверу, как показано на рис. 39.3. Чтобы попасть в это диалоговое окно, выберите в меню MyCC пункт Action I Register Server (Действие | Зарегистрировать сервер). Имя хоста (поле Host Name) для вашего первого подключения, скорее всего, должно содержать Iocalhost. Укажите в полях User Name и Password, соответственно, имя пользователя и пароль. Если вы работаете с только что установленным MySQL, у вас должна быть учетная запись для пользователя Root, У которого пароля нет. Поэтому введите root в’поле User Name и оставьте пустым поле Password. В следующем разделе я расска­жу, как добавлять пароль. Если же у вас есть пароль, имеется опция, позволяющая запрашивать его при запуске. Мусе может также запомнить пароль, так что система не будет предлагать его вводить снова и снова.

рис. 39.2.
просмотр метаданных, хранящихся в таблице user, с использованием оболочки mycc

Возможно, вам потребуется указать файл сокета. В Linux это будет обычно ∕var∕ lib∕mysql∕mysql. sock; В Windows это, как правило, C:\temp\mysql. sock. В Windows мне никогда не приходилось вводить это значение; в Linux я ввожу его на­прямую.

Если все прошло нормально, вы сможете щелкнуть на кнопке Add (Добавить), выйти из диалогового окна и вернуться в главное окно Мусс. Щелкните правой кнопкой мыши на созданном вами узле и выберите в контекстном меню пункт Connect (Подключиться). Узел должен раскрыться, как показано на рис. 39.4.

На данном этапе у вас имеется оболочка с графическим интерфейсом, которую вы можете использовать для взаимодействия с MySQL. При желании вы можете подключаться к серверам на удаленных машинах, заполняя поля диалогового окна, показанного на рис. 39.3, однако вместо Iocalhost вводя конкретное имя сервера.

Создание пользователей и паролей в MySQL

Итак, MySQL установлен и работает, под Linux либо Windows — это не особенно важно. Теперь следует определить пользователей вместе с паролями. Сначала я по­кажу вам, как это делается с помощью графического интерфейса, а затем поясню этапы этой процедуры при работе в режиме командной строки.

рис. 333. добавление информации о соединении с сервером
i mysol conlioicentcfo 2.2Λ∣plm [mycc ofital∣βs*- connection... f∙ ∣jfe∙×l
i3 coniote wmdow βρtnra hek gmeial seveoptiora i,hoitneme ,iocahoit
uietname ∣oo(
peiswcnl ,
port |зэо6" ⅛j t able removal method 
<? showtafilestatus optiora
Γ~ utecompieisdn
Γ^ blociungqueriei
г enabe completion end syntax h⅝jt4gbtrg
srs⅛≈cl f¾ i
connect timeout (teeʧɔθ
c showtables
Γ^ prompt foι password Γ^ urieeiinaleconnection
p
,myscjl control ct nter 0.2. ? alpha ∙ (console manager]
s console window options hek action itx<xxs help
hfc j fc½ w э
* l⅛.
й; ιoot<stocahost 3306
,j property,connected datemodfe i fields enclosed by fieia separated by
j has syntax highlighting and completion no
,(value
yes
2002-04-020935:37
,hostname
lines tema>atedby
hysql connectdn version
mysql piotocolveision
mysql setvei version
mysql uptime
port
iuseineme
i using a sinde connection j using blockng queries -‘using ccmpiession ushg prompt toɪ password
,ioeehost
∖Λn
iocahostviatcpap
10
3.23.49-max-nt
59 min 21 sec
3306
loot
no
no
yes
no
⅛ ɔj d «abases
Γj}seιvβι aan jrtiaban
^user aanxxstiation
рис. 39.4. успешное подключение к базе данных mysql с помощью mycc
vmessaqes asqldebuo Γ

‘%i⅛nvAΛ ⅛frdow Qpbora Hdp

.⅛lfll,29

Ucejname: bfl-srjpe

Alow «coats to Г

Hort Iloeaihort

⅛l Л "ИТ^ИМ

Pstmwvd Jfoo

Ж □ »«х*

; — Pwvfaget.. — У:

Ж О ∏w

P AIPtivfaget

S □ ∙)to<

I ‘λ-MCi

I ksits

:’ Update

? "∙)-⅛5⅛

Qedte

Ds-%≈

Index

.⅛K*S

: HBieffcnCH

PefcAd

Srxf⅝M⅛∙∙n

1 >⅛xs3

ɪ r⅛

:p VrthGRANTopbon

⅛⅛ 1 ⅛nm I

ft? mysoj ventiot feπtpΓ (b<l2 alpha ∣add∣kvr [fbftdte⅛lm a∣hum. 3 t06j∣ ∣-, ofxрис. 39.5. установка нового пользователя в оболочке myccВыполните щелчок правой кноп­кой мыши на узле User Administration (Администрирование пользователей) в MySQL, как показано на рис. 39.4 Выберите в контекстном меню ко­манду Add User (Добавить пользова­теля). Появится диалоговое окно, показанное на рис. 39.5. Введите свое имя, машину-хост и пароль.

Своего первого пользователя вы на­верняка захотите сделать всемогу­щим, поэтому отметьте флажки All Privileges (Все полномочия), With GRANT option (С возможностью ко­манды GRANT) и Global Privileges (Глобальные полномочия). Щелкните на кнопке Add (Добавить) и затем на Cancel (Отменить), чтобы завершить процедуру. Когда вы закончите, в списке пользовате­лей под узлом User Administration должен появиться новый пользователь.

По умолчанию во вновь установленном MySQL будет также "безымянный узел". Если вы заботитесь о безопасности, вам следует удалить этот узел. Вам также нужно будет сменить пароль для привилегированного пользователя по умолчанию. Щелк­ните правой кнопкой мыши на root@localhost и выберите в контекстном меню ко­манду Edit (Редактировать). В появившемся диалоговом окне измените пароль для пользователя. Вы также заметите узел с именем root@%. Знак процента (%) — это символ-заполнитель, который может обозначать любой произвольно взятый сервер. Таким образом, root@% обозначает привилегированного пользователя, входящего с какой-то другой машины. Вам потребуется также изменить пароль и для этого пользователя

Теперь я покажу, как сделать то же самое в режиме командной строки. Эта ин­формация полезна по той причине, что графические оболочки для MySQL не явля­ются в достаточной степени стабильными, а также потому, что процедуры команд­ной строки вроде этой могут быть описаны в виде сценария и, следовательно, авто­матизированы.

Привожу полностью сеанс задания пользователя и пароля из командной строки:

:MysqlBin]mysql mysql

Welcome to the MySQL monitor. Commands end with ; or G.

Your MySQL connection id is 10 to server version: 3.23.49-max-nt

Type ‘help;’ or ‘H’ for help. Type ‘C’ to clear the buffer, mysql> DELETE FROM user WHERE Host=’Iocalhost, AND User=»;

Query OK, 1 row affected (0.05 sec)

Mysql> GRANT ALL PRIVILEGES ON *. * TO charlieglocalhost IDENTIFIED BY ‘fθθ’ WITH GRANT OPTION;

Mysql> GRANT ALL PRIVILEGES ON *.* TO Charlieg"%"

IDENTIFIED BY ‘foo’ WITH GRANT OPTION;

Mysql> update user set pasSword=PASSWORD("foo") where user="Charlie";

Mysql> QUIT

Bye

[f: MysqlBin]Biysqladmin User=charlie Password=foo reload

[f:MysqlBin]mysqladmin — u root password mypassword

Первая команда в этой последовательности позволяет войти в утилиту MySQL — монитора с использованием базы данных Mysql. База данных Mysql Входит в состав дистрибутива продукта. Здесь вы определяете пользователей и их полномочия. Если вы при запуске MySQL-монитора не указали базу данных, наберите Use mysql В командной строке MySQL-монитора, чтобы начать работу с системной базой данных:

Mysql> use mysql;

Database changed

B системной базе данных, называющейся mysql, хранится список пользовате­лей, их паролей и полномочий. Войдя в MySQL-монитор, удалите анонимного, или "пустого" пользователя:

Mysql> DELETE FROM user WHERE Host=’Iocalhost’ AND User=»;

После этого вы больше не сможете входить в mysql, просто набирая mysql в ко­мандной строке, а должны будете добавить имя пользователя, как показано ниже.

Следующий шаг после удаления безымянного пользователя состоит в добавле­нии нового пользователя, наделив его полномочиями привилегированного пользо­вателя. Обратите внимание, что вы предоставляете полномочия дважды, один раз как локальному пользователю и второй — с символом %, чтобы предоставить пользо­вателю возможность входа в систему из удаленного компьютера:

Mysql> GRANT ALL PRIVILEGES ON *. * ТО Charlie@localhost IDENTIFIED BY ‘foo’ WITH GRANT OPTION;

примечаниеMysql> GRANT ALL PRIVILEGES ON *.* TO charlieβ"%" IDENTIFIED BY ‘foo’ WITH GRANT OPTION;

Добавление таких опций предоставления полномочий — ключ к реше­нию проблемы типа "Host ‘x’ is not allowed to connect to this SQL Server"("Хост X Не имеет права подключения к данному SQL-серверу").

Измените пароль нового пользователя на "foo" или какой-нибудь более надеж­ный пароль по вашему выбору:

Mysql> update user set password=PASSWORD("foo") where user="Charlie";

Выйдите из MySQL-монитора и перезагрузите базу данных:

[£: MysqlBin]mysqladmin —user=charlie Password=foo reload

Перезагрузка необходима после изменения системных таблиц в базе данных mysql. При изменении обычных таблиц она не нужна.

Предпоследняя строка демонстрирует второй способ задания пароля для пользователя. Если вы однажды задали пароль для пользователя, строка для изме­нения пароля будет выглядеть так:

[∕usr/bin/]mysqladmin —user=root Password password ‘foo’

[f:MysqlBin]mysqladmin User=root Password=foo password newpw

Первая из этих строк — пример того, как следует поступать, если на сервере еще нет пароля, а вторая — что делать, когда пароль уже есть.

Если вы присвоили пользователю пароль, вы должны будете также указывать этот пароль, запуская MySQL-монитор:

[g:UtilitiesMysqlBiπ]mysql User=charlie Password=foo

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

Вы уже знаете, как получить список пользователей системы, находясь в оболочке Мусс. Как вам известно, список пользователей хранится в таблице Раскройте в Мусе узел Databases (Базы данных), выберите базу данных mysql и найдите таблицу user, как показано на рис. 39.2 в начале этой главы. Выполните двойной щелчок на узле user, чтобы открыть окно просмотра для этой таблицы (см. рис. 39.6).

В окне просмотра вы увидите, что Host и user являются полями первичного ключа. Также можно видеть различные полномочия, присвоенные каждому из пользователей. Y — "yes" — обозначает, что пользователь обладает полномочием, a N — "по" — что пользователь лишен этого полномочия.

В верхней части окна просмотра, показанного на рис. 39.6, расположена кнопка, пиктограмма которой содержит буквы SQL. Щелкнув на этой кнопке, вы заставите подготовленные SQL-операторы выполняться в отношении выбранного в данный момент узла. Например, на рис. 39.7 можно видеть выполняемый над таблицей user запрос на выборку записей привилегированного пользователя. Обратите вни­мание на окно истории, предназначенное для сохранения выданных вами команд.

Работая в режиме командной строки, получить список пользователей из табли­цы user можно следующим образом:

tt (iym)i < aniroictnier ou zniphb fp<ιla iii tebh-: ’ll ⅛eι* in *my⅛qf fchαι uef- jncaihumt3306jj .l∏>l
f! conxxn ⅛ftιdσw qfxnns hnn -jffix
e⅛ £<b queqi 
 ^⅞*j⅛. *⅛ jb f ⅛ 
 ⅞hori i g uxx i pattewrd j s⅛⅛dj⅝w i j updatejnv delete 0« r
1 toca⅛wss iroot 7c786c222596437t y !γ =y lγ
2 ⅛ yoot 7c7θ6c222596437b √ iγ lγ iy
 iocalhost i eharlie Γe7‰22259g437b y sy sy iγ
4 iocalhost :rnargie 7c788c222596437by !γ lγ jγ
5 iocaliost ∣γ jγ iy !γ
 -j jd

,: φlchariteΘlocalιost3306j5 rows round (0.02) sec,vmesseoes λ htstorv/",рис. 39.6. просмотр списка пользователей, который хранится в таблице user базы данных mysql,? mysql cnntrol center ож? alρl j - f∏atn in tab ικer' in 'rτty4<jf (that iieftiftraihbh: 1tf06j)
jχj iqoreote ⅛⅛¾dow qptiore hefe fte ea query Λ!Λ×
~—з
 d
j5⅛⅛b⅛l
b-<⅛ j ∕> °l⅜ ⅜ ⅛∙jte⅛e⅞w,l ¾ ⅜j,iseiecttrom dtr, am*=-
г 1«° tj⅝,shoh nu-w
∣7c7θ6c22259m371 v ’ 786e222596437bi,l,sotoc⅜jιw inxxljnv j⅛e⅛!⅛je≈*~

x * 
3 j о update user set password-*"' where user-root;
s = s select " from ,α⅛om^
i i tl select “ from user
б select "from user " . a showtabtes;
рис. 39.7. выдача запросов в оболочке mycc

[g:UtilitiesMysqlBin]mysql User=root —password=foo mysql Welcome to the MySQL monitor. Commands end with ; or G.

Your MySQL connection id is 5 to server version: 3.23.49-max-nt Type ‘help;’ or ‘H, for help. Type, C, to clear the buffer, mysql> select host, user from user;

———- -— ——-r———

Host I user

— — — — — — — — — ——"T — — — — —

% I

% I root

Iocalhost I

Iocalhost I root ————- — -.-.ɪ-_ —

4 rows in set (0.00 sec) mysql>

Обратите внимание, что при входе в систему я указал не только свое имя пользо­вателя и пароль, но и базу данных, которой хочу пользоваться. База данных mysql — это та, в которой хранятся все ключевые метаданные, такие как информация о пользователях.

Вот что произойдет, если вы удалите пользователя:

Mysql> delete from user where host=’Iocalhost’ and user=»;

Query OK, 1 row affected (0.01 sec) mysql> select host, user from user;

+■

I

Host

-+-

I

User

-+

I

+■

-+■

-+

I

%

I

I

I

%

I

Root

I

I

Iocalhost

I

Root

I

+■

-+-

-+

3 rows in set (0.00 sec)

Как видите, анонимный пользователь на Iocaihost Был удален, но анонимный пользователь для любой машины (%) остался. "Пустой" пользователь, входящий с любой машины (%), по умолчанию не имеет полномочий. (Вы можете отдать такую же команду в мусс, пользуясь окном просмотра, показанным на рис. 39.7.)

А вот как можно добавить одного пользователя с помощью SQL и как будет выг­лядеть после этого база данных:

Mysql> grant all privileges on *.* to Charlieglocalhost -> identified by, foo, with grant option ;

Query OK, O rows affected (0.00 sec)

Mysql> select host, user from user;

+——————— +————— +

I host I user

+——————— +————— +

I % I I

I % I root I

I Iocalhost Charlie

I Iocalhost root

+——————— +————— +

4 rows in set (0.00 sec)

Ниже приведены поля таблицы user:

Host

User

Password

Selectjpriv

Insertjpriv

Updatejpriv

Delete

Priv

Createjpriv

Dropj>riv

Reloadjpriv

Shutdownjpriv

Proceesjpriv

Filejpriv

Grantjpriv

Referencesjpriv

Indexjpriv

Alterj>riv

Располагая этой информацией, легко определить, что может делать конкретный пользователь:

Host

-+■

I

User

-+■

I

Insertj>riv

.+————————-

I Shutdownjpriv

-+■

I

Updatej>riv

-+

I

-+■

-+

-+————————

-+■

-+

Iocalhost

I

Root

I

Y

I Y

I

Y

I

%

I

Root

I

Y

I Y

I

Y

I

Iocalhost

I

Charlie

I

Y

I γ

I

Y

I

%

I

I

N

I N

I

N

I

-+•

-+

.+————————-

-+■

-+

4 rows in set (0.00 sec)

mysql> select host, user, password from user;,4 rows in set (0.00 sec),примечание
host .+ 
i user i password
iocalhost --f-- — — — — — — — ■
i root ɪ
i 
% i root i 
iocalhost i charlie i 34bd5ce05ed376e6
% i
-+ i

Обратите внимание, что анонимный пользователь с любой машины не имеет никаких полномочий. C помощью выборки из таблицы user также можно быстро узнать, у кого есть пароль, а у кого пароля нет:

Будьте внимательны, или со всеми этими сменами паролей у вас могут начать происходить странные вещи. Если вы находитесь в MyCC и узлы внезапно переста­ют открываться или не реагируют на ваши действия надлежащим образом, причиной мо­жет быть то, что вы изменили пароль в командной строке, тем самым сделав недействи­тельным свой текущий сеанс MyCC. Чтобы устранить проблему, просто синхронизируйте пароли в MyCC и MySQL-мониторе.

Просто ради ясности, давайте еще раз взглянем на присвоение пользователю па­роля и затем посмотрим, как выглядит база данных, когда у всех пользователей, за исключением не имеющего полномочий анонимного пользователя с удаленного компьютера, есть пароли:

Mysql> update user set password=password (‘mypassword,)

-> where user=, root,;

Query OK, 2 rows affected (0.00 sec)

Rows matched: 2 Changed: 2 Warnings: 0 mysql> select host, user, password from user;

Host

-+—————

I user

-+■

I

_x_

Password

Iocalhost

—f— — — — — — — — ∙

I root

ɪ

I

34bd5ce05ed376e6

%

I root

I

34bd5ce05ed37 6e6

Iocalhost

%

I Charlie

I

I

34bd5ce05ed376e6

I

.+—————

I

4 rows in set (0.00 sec)

На данном этапе вы обладаете тем минимумом знаний, который необходим, чтобы установить и привести в работоспособное состояние MySQL под управлени­ем Windows или Linux.

Создание простых баз данных и таблиц

примечаниеИтак, вы установили и настроили систему под Linux либо Windows; теперь пора создать базу данных и простую таблицу. Все приведенное ниже относится к Windows, но более или менее то же самое будет происходить и в Linux. Например, вместо Mysql. exe Набирайте Mysql. Или же, если вы пользуетесь графическим ин­терфейсом, набирайте Тусс Вместо MyCC. exe. Как только же вы попадете в Mysql Или Мусс, все будет абсолютно одинаковым.

Это не тот раздел главы, в котором я буду показывать, как загружать базу данных Jbbook, Которая содержит используемые в программах-примерах данные: Соответствующий раздел вы найдете ближе к концу этой главы.

На момент выхода книги ни мусс, ни MySQLGUi Не могли практически ничем по­мочь в создании таблиц. Пожалуй, лучшее, что могут предложить оба эти инстру­мента — это возможность ввода SQL-операторов. Собственно говоря, это и есть мое основное и предпочтительное средство для создания таблицы. Однако, принимая во внимание отсутствие в настоящее время хороших инструментов с графическим интерфейсом, я просто объясню, как все делается в режиме командной строки.

В MySQL имеется стандартная база данных с именем test, которую можно за­действовать в своих экспериментах:

[g:\utilities\mysql\binlmysql. exe User=charlie Password=foo test

Welcome to the MySQL monitor. Coimnands end with ; or G.

Your MySQL connection id is 25 to server version: 3.23.49-max-nt

Type ‘help;’ or ‘H’ for help. Type ‘C, to clear the buffer, mysql> create table test_table (test_field int) ;

Query OK, O rows affected (0.02 sec)

Обратите внимание, что в первой командной строке я указал, что желаю рабо­тать с базой данных test. Если бы я этого не сделал, моей первой командой внутри MySQL-монитора была бы use test.

В Приведенном здесь сеансе команда create table служит для создания про­стой таблицы с одним полем в базе данных Test. Именем таблицы является test_table, а единственное созданное в ней поле имеет тип int и называется Test_field:

Mysql> create table test_table (test_field int);

Чтобы ввести данные в таблицу и затем их просмотреть, наберите следующее:

Mysql> insert into test-table values(1) ;

Query OK, 1 row affected (0.00 sec) mysql> select * from test_table;

+——————— +

I test_field

+——————— +

I 1 I

+——————— +

1 row in set (0.00 sec)

примечаниеПервая команда обеспечила ввод данных, а вторая дала возможность их просмот­реть.

В случае если у вас возникло некоторое беспокойство, позвольте за­верить вас в том, что с течением времени я продемонстрирую, как делать все эти вещи в JBuiIder. Однако лучше заложить фундамент для последующей работы в JBuiIder, Сперва Разобравшись с тем, как база данных работает в автономном режиме.

На рис. 39.2 было показано, как просматривать метаданные из таблицы. Ниже показано, как просматривать столбцы таблицы, работая в MySQL-мониторе:

Mysql> show columns from test_table;

Field

+—————

I Туре

-+-

I

Null

-+——-

I Key

.+—————

I Default

-+————

I Extra

Test_field

I int(11) —+

I

-+-

YES

—f-— — — —

I

.+———

-f —— — — — — — — ‘

I NULL.+—-

ɪ ——

I

-+————

1 row in set (0.03 sec)

Создав пару-тройку таблицу, вы будете готовы к созданию своей собственной базы данных. Чтобы создать базу данных, введите следующую команду:

Mysql> create database mydatabase;

Query OK, 1 row affected (0.00 sec)

Теперь наберите Use mydatabase, И можно приступать к созданию таблиц, кото­рые вы хотите использовать в своих программах.

Чтобы создать базу данных в Мусе, выполните щелчок правой кнопкой мыши на узле Databases (Базы данных) и выберите в контекстном меню пункт Create new database (Создать новую базу данных). Появится диалоговое окно, позволяющее ввести имя базы данных.

Чтобы увидеть переменные, заданные вами в файлах My. cnf И my. ini, можно на­брать Show variables В командной строке MySQL-монитора. В Оболочке Мусе уви­деть эту информацию можно, щелкнув правой кнопкой мыши на узле Server Administration (Администрирование сервера) и выбрав в контекстном меню пункт Show Variables (Показать переменные). Как я объяснял выше в этой главе, с помо­щью значений этих переменных вы можете определить, какой из файлов конфигу­рации использует ваша система.

Введение в InterBase

Целью данного раздела является установка на вашем компьютере InterBase — мощной реляционной базы данных. Как вы узнаете из следующей главы, с помо­щью инструмента, называемого InterClient, вы сможете обеспечить JDBC-соедине — ния между своей базой данных InterBase и царством Java и JBuiIder.

Истоки InterBase можно найти в различных компаниях, включая DEC и Ashton­Tate. Частью линии продуктов Borland она стала после того, как Borland приобрела компанию Ashton-Tate. Не будучи для Borland крупным продуктом, она, тем не ме­нее, оставалась источником стабильных доходов вплоть до 2000 года, когда ей при­шлось пострадать от политических сражений между разработчиками и руковод­ством Borland.

Счастливым результатом этих сражений стало то, что Borland выпустила InterBase в качестве инструмента с открытым исходным кодом. Однако сам по себе выпуск продукта с открытым исходным кодом в очередной раз оказался далеко не однозначным. Существует, по меньшей мере, две версии InterBase, одна из кото­рых — коммерческий продукт, выпущенный Borland, а вторая — продукт с открытым кодом, выпущенный под названием Firebird. (Компания Borland также выпустила версию продукта с открытым исходным кодом, однако большая часть их усилий на­правлена именно на коммерческую версию.)

Несмотря на все эти проблемы, я всегда восхищался, да, собственно, и буду вос­хищаться InterBase. Технологичным отраслям промышленности свойственно нема­ло рассказов о хороших технологиях, остающихся позади, тогда как менее совер­шенные технологии получают широкое признание. По моему мнению, история InterBase — один из этих постыдных рассказов, в котором мы все виноваты в том, что позволили этой удивительной базе данных быть обойденной продуктами, менее со­вершенными. Отчасти скандальные эпизоды последних лет стали следствием разо­чарования менеджеров и разработчиков, потративших годы на разработку и продви­жение высококачественного продукта, продаваемого по позорно низкой цене и за­частую проигрывавшего конкурентам без каких-либо на то причин. Этим я не хочу сказать, что InterBase не используется в крупнейших критически важных вычисли­тельных системах во всем мире. InterBase популярна в течение долгого времени, и в длинный список ее приверженцев входят такие компании и организации, как Ми­нистерство труда США, компании Hewlett-Packard, SAP, NEC Electronics и многие, многие другие.

Выгрузка InterBase

Версию InterBase с открытым исходным кодом — FireBird — можно найти на сай­те Http://firebird. sourceforge. net/. C этого сайта вы сможете выгрузить как InterBase, так и InterClient. Я пользуюсь суперсерверной версией базы данных. В ка­честве ссылок на версию InterBase компании Borland с открытым исходным кодом МОЖНО Привести адреса Http://sourceforge. net/projects/interbase И Http:// Www. borland. com/devsupport/interbase/opensource/.

Домашняя страница коммерческой версии продукта от компании Borland нахо­дится ПО адресу Http://www. borland. com/interbase/.

примечаниеЕсли вы ранее пользовались продуктами Borland, существует шанс того, что InterBase уже установлена на вашей машине. Имеется несколько способов узнать, тот ли это случай. В среде Windows можно набрать Net start В командной строке и поискать в списке службу InterBase. Она должна находиться вслед за InterBase Guardian И InterBase Server. Другой прием — заглянуть на страницу служб в пане­ли управления (аплет Администрирование); на главной странице панели управления должен быть добавлен аплет с названием InterBase manager. На рис. 39.8 показа­но, как должна выглядеть панель управления, если и InterBase, и InterClient установ­лены в форме служб.

InterBase Guardian — это инструмент, используемый для обеспечения того, что сервер InterBase остается загруженным и будет автоматически перезагружать­Ся в случае сбоя.

Под управлением Linux InterBase обычно устанавливается по умолчанию в ката­лог ∕opt∕interbase Главная программа, хранящаяся в каталоге Bin, Называется Ibserver. В каталоге Usr∕lib Должен находиться файл Iibgds. so.

В файле служб должна быть подготовлена запись для InterClient. В Linux этот файл находится в каталоге Etc. В среде Windows он должен находиться в каталоге ∕windows∕system32∕drivers∕etc. (В среде Windows 2000 и старых продуктах NT этим каталогом будет ∕winnt∕system32∕drivers∕etc.)

gds_db 3050/tcp # interbase interserver
interserver 3060/tcp # interclient
,рис. 39.8. b панели управления windows легко найти установленные ранее службы interbase (firebird), interbase guardian и interclient (interserver)

Установка InterBase под Windows и Linux

Если вы выгрузили Firebird или у вас имеется копия версии InterBase от компа­нии Borland, установка не должны вызывать особых затруднений. Например, в Windows для установки Firebird потребуется набрать следующее:

[g:\downloads\partsi-s\interbaselFirebird-l.0.0.796-Win32.ехе

После этого программа установки проведет вас через простой набор стандартных диалоговых окон.

В среде Linux для установки Firebird InterBase потребуется ввести следующую ко­манду:

Rpm -Uhv FirebirdSS-1.0.0.796-0.i386. rpm

Вот команда, позволяющая запустить одну из версий InterBase от компании Borland под управлением Linux:

Rpm -Uhv InterBaseSS_LI_kylix2-V6.О.1-1.i386.rpm

Чтобы остановить и запустить InterBase в качестве Windows-службы, зайдите в панель управления, выберите аплет администрирования, в нем выберите просмотр списка служб, либо же наберите в командной строке следующее:

[g:DownloadsPartsi-sInterbase]net start "InterBase Guardian"

The InterBase Guardian service is starting.

The InterBase Guardian service was started successfully.

[g:\downloads\partsi-s\interbase]net stop "InterBase Guardian"

The InterBase Guardian service is stopping.

The InterBase Guardian service was stopped successfully.

Вам нужно только остановить и запустить InterBase Guardian. Сам же сервер InterBase последует его примеру.

В Linux вы можете перейти в каталог ∕opt∕interbase∕bin и запустить сервер следующим образом.

.∕ibmgr — start — forever — user sysdba — password masterkey

Чтобы остановить сервер, наберите:

.∕ibmgr — shut — user sysdba — password masterkey

Обратите внимание, что InterBase выполняется в виде службы Xinetd. Для этого приведенный ниже текстовый файл с именем Firebird Помещается в ∕etc∕χinetd Во время установки:

Service gds_db

I

Flags ≈ REUSE

Socket_type = stream wait = no

User = root

Log_on_success+= USERID log_on_f allure += USERID

Server = /opt/interbase/bin/gds_inet_server

Disable = no

I

Присутствия этого файла достаточно для обеспечения того, что InterBase будет запущен во время установки, Xinetd Предоставляет вам следующие опции:

[root@bree bin]# ∕etc∕init. d∕xinetd Help

Usage: ∕etc∕init. d∕xinetd

{start I stop I statusRestartCondrestartReload)

Так, один из "лобовых" методов запуска службы предполагает ввод следующих команд:

[root@bree bin]# ∕etc∕init. d∕xinetd restart

Stopping xinetd: [ OK ]

Starting xinetd: [ OK ]

B командной строке потребуется набрать Cat∕var∕iog∕messages, Чтобы убе­диться, что в ходе операции перезапуска не произошло никаких ошибок. Эта ко­манда выведет на экран файл сообщений. В конце этого файла — обычно очень длинного — вы должны увидеть отчет по последней из предпринимаемых вами опе­раций. Если при перезапуске Xinetd Произошли какие-либо ошибки, они должны быть присоединены в конец файла сообщений.

Тестирование InterBase под Windows и Linux

Windows-версия версии InterBase от компании Borland поставляется вместе с от­личной оболочкой, называемой IBConsole. Вы можете выгрузить бесплатную вер­сию IBConsole для Firebird, созданную неутомимым Джеффом Оверкэшем (JefT Overcash) из сайта CodeCentral, который находится по адресу:

Http://community. borland. com

В частности, попробуйте эту ссылку:

Http:/∕codecentral. borland.Сот/Codecentral∕ccweb. e×e∕listing7id=17154

Заменитель IBConsole, называющийся IBExpert Personal Edition, можно выгру­зить из сайта IBPhoenix по адресу Http://www. ibphoenix. com/. Исходный код (ко­торый может оказаться несколько устаревшим) для IBConsole также можно взять на сайте IBPhoenix. Все эти программы подобны оболочке Мусс, Рассмотренной выше в этой главе. В целях экономии пространства и интуитивной понятности продукта я не стану сейчас его обсуждать; тем не менее, я настоятельно рекомендую его ис­пользовать.

Вы можете запустить инструментальное средство InterBase в режиме командной строки, называемое Isqi, Дабы убедиться в правильном функционировании Linux. Этот инструмент примерно эквивалентен MySQL-монитору, который рассматривал­ся выше в этой главе.

В InterBase не нужно заранее задавать свой пароль. Можно предположить, что существует привилегированный пользователь с именем Sysdba И паролем Iiiasterkey.

Вот простой сеанс isgi, с помощью которого можно проверить, установлен ли InterBase:

[g:CompilβrsInterbaseBin]isql g:DataEmployee. gdb — u sysdba Ioasterkey

Database: g:\data\employee. gdb, User: sysdba

SQL>

SQL> select first-name, last-name from employee where last_name = "Nelson";

FIRST_NAME LAST_NAME

Robert Nelson

SQL>

Вам потребуется отредактировать эту строку так, чтобы она указывала на вашу копию базы данных Employee. Gdb, идущей в комплекте с InterBase. В Linux коман­да будет выглядеть точно так же, за исключением направления косых линий и мес­торасположения Employee. gdb.

Проверить, какие таблицы установлены в вашей базе данных, вы можете следую­щим образом:

customer
employee
job
project
salary_history
SQL> show tables; COUNTRY DEPARTMENT EMPLOYEE_PROJECT PHONE_LIST PROJ_DE PT_BUDGET SALES

SQL>

Вместо того чтобы вдаваться в дальнейшие подробности, на этом месте я ос­тановлюсь и не буду больше рассказывать об InterBase Однако существует актив­ное сообщество поклонников InterBase как в группах новостей Borland на Forums. borland. com, Так И на Web-сайтах Firebird. sourceforge. net. Кроме ТОГО, На эту тему написаны многочисленные статьи, которые можно найти, помимо про­чих мест, на сайтах Www. interbase. com И Www. ibphoenix. com.

Подготовка данных для выполнения примеров этой книги

Таблицы, которые вы будете использовать при работе с этой книгой, можно най­ти как в сопровождающих материалах на сайте издателя русскоязычной редакции книги, так и на оригинальном сайте автора по адресу Http://www. elvenware. com. Снабдить вас базами данных для InterBase и Access нетрудно, поскольку они пред­ставляют собой отдельные файлы:

■ Для случая Access найдите в сопровождающих материалах jbbook. mdb и Jbbook. Idb.

■ Для случая InterBase найдите в сопровождающих материалах jbbook. gdb.

Кроме того, просмотрите файл Index. html, Находящийся в корневом каталоге среди материалов, — в нем отражены все изменения и обновления, внесенные "в последние минуты". Со всеми дальнейшими вопросами по данным для Access и InterBase и обновлениях к ним обращайтесь на сайт Www. elvenware. сот.

Поделиться файлами InnoDB для MySQL, с другой стороны, не настолько про­сто, поэтому эти данные я даю в форме сценариев и предоставляю сценарии для Windows и Linux, которые позволяют автоматически импортировать данные в MySQL. Имея данные в текстовой форме, вы сможете заново создать таблицы, если они будут повреждены в процессе проведения с ними экспериментов. Выполнить команду для создания таблицы очень просто; о ней вы прочитаете в следующем раз­деле.

В следующих нескольких разделах этой книги я буду приводить SQL-команды, которые вы сможете давать MySQL, InterBase и Access для создания таблиц. Эти ко­манды не вставляют данные в таблицы; они только создают метаданные для таблиц. Тем не менее, будут приведены и способы, позволяющие заново заполнять базы данных необходимой информацией.

Интересно, что на различных платформах команды, позволяющие загрузить базу данных, несколько отличаются. Ниже показана команда для создания таблицы с именем book при работе с MySQL. Не пытайтесь ее вводить: она не будет работать, поскольку вы не еще не определили таблицы types, medium и artist, на которые имеются ссылки во внешних ключах. Как создать эти таблицы, я расскажу позже; пока что просто взгляните на этот SQL-синтаксис, чтобы мы могли его обсудить:

CREATE TABLE BOOK

(

CODE INT NOT NULL,

TYPES INT NOT NULL,

MEDIUM INT NOT NULL,

RATING INT NOT NULL,

COMMENT TEXT,

Groupcode int not null,

BOOK VARCHAR(50),

INDEX INDEXJΓYPES (TYPES),

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE),

INDEX INDEX_MEDIM (MEDIUM),

FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE), INDEX INDEX-GROUPCODE (GROUPCODE), Foreign key(groupcode) references artist(code), PRIMARY KEY (CODE)

) TYPE=INNODB;

Здесь присутствуют предельно ясные операторы создания внешнего ключа и до­бавления индекса.

примечаниеMySQL требует индексирования внешних ключей, указывающих на первичный ключ другой таблицы. Обратите внимание на задание типа таблицы InnoDB. Нако­нец, обратите внимание на простую команду, создающую текстовое поле, которое представляет собой разновидность типа blob.

BLOB — это большой двоичный объект (Binary Large OBject). BLOB-поля предназначены для хранения любых неопределенных данных, например, изображений или больших текстовых полей. В MySQL Вы можете использовать либо тип TEXT, Либо BLOB,- В зависимости от своих потребностей. Подтипы включают TINYBLOB, BLOB, MEIjIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT И LONGTEXT. Если вы хотите, что­Бы текст отображался в текстовых полях Java, Лучше использовать типы TEXT.

Вот та же таблица, определенная для InterBase. Опять-таки, я не прошу вас это вводить, — просто изучите синтаксис команды:

CREATE TABLE BOOK

(

CODE INT NOT NULL,

TYPES INT NOT NULL,

MEDIUMINT NOT NULL,

Ratingint not null,

COMMENT BLOB SUB_TYPE TEXT SEGMENT SIZE 80,

Groupcode int not null,

BOOK VARCHAR(50) ,

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE),

FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE),

FOREIGN KEY(GROUPCODE) REFERENCES ARTIST(CODE),

PRIMARY KEY (CODE)

) ;

BLOB-поле объявляется несколько сложнее, однако позволяет задать свой под­тип. В InterBase не нужно создавать индекс на внешних ключах, и сделать это в опе­раторе создания таблицы нельзя.

Наконец, вот код для создания этой таблицы в Access:

CREATE TABLE BOOK

(

CODE INT NOT NULL,

TYPES INT NOT NULL,

MEDIUM INT NOT NULL,

RATING INT NOT NULL,

COMMENT MEMO,

GROUPCODE INT NOT NULL,

BOOK VARCHAR(50),

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE), FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE), FOREIGN KEY(GROUPCODE) REFERENCES ARTIST(CODE) PRIMARY KEY (CODE)

B данном случае все идентично команде создания таблицы для InterBase, за ис­ключением поля с типом blob, которое теперь называется мемо.

Я также обнаружил несколько небольших различий между базами данных. На­пример, если я использую поле Smallint в одной таблице и int во второй, и затем связываю таблицы с помощью внешнего ключа на поле, о котором идет речь, в InterBase все работает, но в MySQL, когда я пытаюсь вставить запись, происходит сбой. Таблица Access не поддерживает тип smallint. В конце концов, я везде стал использовать тип int.

Тем не менее, в большинстве своем эти различия весьма незначительны; в общем же, три этих типа баз данных вполне взаимозаменяемы.

Создание таблиц для MySQL

Из-за характера работы файлов баз данных InnoDB я не снабдил вас базой дан­ных jbbook для MySQL в двоичном формате. Вместо этого я предложу вам создать

Двоичный файл самостоятельно с помощью предоставленного мною сценария. Сце­нарий хранится в 200-килобайтном текстовом файле с именем jbbook-backup. sqi, который можно найти в каталоге Database в сопровождающих материалах.

Если же вы создаете базу данных с нуля, выдайте следующие команды:

[g:∖srcjava∖jbbook∖database]mysql —user=charlie —password=foo

Welcome to the MySQL monitor. Commands end with ; or ∖g.

Your MySQL connection id is 124 to server version: 3.23.49-max-nt Type ‘help;’ or,∖h’ for help. Type,∖c, to clear the buffer, mysql> create database jbbook;

Query OK, 1 row affected (0.00 sec) mysql> use jbbook;

Database changed

Mysql> source jbbook-backup. sql;

C помощью следующей команды вы можете создавать, заново создавать или вос­станавливать базу данных из текстового файла, если база данных уже существует:

Mysql —User=Charlie —password=foo jbb`ook < jbbook-backup. sql А вот команда, с помощью которой я создал резервный файл:

примечаниеMysqldump —user=charlie —password=foo —opt jbbook > jbbook-backup. sql

Эти команды содержатся в небольших командных файлах и сценариях оболочек, входящих в состав сопровождающих книгу материалов. Например, последняя команда хранится в файле mysql-backup-jbbook. bat, а команда, приведенная перед Ней, — в файле Restore-mysql-jbbook. bat.

В листинге 39.1 вы найдете определение данных для базы данных MySQL. Загля­ните в файл index. html в корневом каталоге сопровождающих материалов и там же в файл с именем create-music-mysqi. sql в каталоге Database/scripts на случай каких-либо изменений или дополнений, внесенных мною в последний момент.

Листинг 39.1. Создание базы данных Music для MySQL

CREATE TABLE TYPES

(

TYPES 4 VARCHAR (15) NOT NULL,

CODE INTEGER NOT NULL,

PRIMARY KEY (CODE)

) TYPE=INNODB;

CREATE TABLE ARTIST

code
last
first
born
died
birthplace comment artisttype primary key
) type=ihnodb
INT NOT NULL, VARCHAR(30) , VARCHAR(30), TIMESTAMP, TIMESTAMP, VARCHAR(35), BLOB,

INTEGER NOT NULL, (CODE)

CREATE (

LOUDNESS

CODE

PRIMARY KEY

TABLE LOUDNESS

VARCHAR(15) NOT NULL, INTEGER NOT NULL, (CODE)

) TYPE=INNODB;

CREATE TABLE MEDIUM (

MEDIUM

CODE

PRIMARY KEY

VARCHAR(15) NOT NULL, INTEGER NOT NULL, (CODE)

) TYPE=INNODB;

CREATE TABLE ALBUM (

CODE INT NOT NULL,

ALBUM VARCHAR (45) NOT NULL,

Types Smallint,

LOUDNESS INT,

MEDIUM INT,

RATING INT,

Groupcode int not null,

CDDBID VARCHAR(20),

Cddbname varcħar(4 О),

INDEX INDEX__TYPES (TYPES) ,

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE),

INDEX INDEX_LOUDNESS (LOUDNESS),

FOREIGN KEY(LOUDNESS) REFERENCES LOUDNESS(CODE),

INDEX INDEX_MEDIM (MEDIUM) ,

FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE),

INDEX INDEX_GROUPCODE (GROUPCODE),

Foreign key(groupcode) references artist(code),

PRIMARY KEY (CODE)

) TYPE=INNODB;

CREATE TABLE ALBUMINFO

(

CODE INT NOT NULL,

COMMENT TEXT,

Cddbdata text,

Albumcode int not null,

Index index_albumcode (Albumcode),

Foreign key(Albumcode) references album(code),

PRIMARY KEY (CODE)

) TYPE=INNODB;

CREATE TABLE ARTISTTYPE

(

ARTISTTYPE

CODE

PRIMARY KEY

VARCHAR(15) NOT NULL, INTEGER NOT NULL, (CODE)

) TYPE=INNODB,

CREATE TABLE BOOK (

CODE

TYPES

MEDIUM

RATING

COMMENT

GROUPCODE

BOOK

INT NOT NULL, INT NOT NULL, INT NOT NULL, INT NOT NULL, TEXT,

INT NOT NULL, VARCHAR(50),

INDEX INDEX TYPES (TYPES),

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE),

INDEX INDEX_MEDIM (MEDIUM),

FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE), INDEX INDEX_GROUPCODE (GROUPCODE),

FOREIGN KEY(GROUPCODE) REFERENCES ARTIST(CODE), PRIMARY KEY (CODE)

) TYPE=INNODB;

CREATE TABLE CDROM

int not null, integer, varchar(50), varchar(50), varchar(50), text , integer,(

CODE

Locationcode name idvalue keyvalue comment types

(code)PRIMARY KEY ) TYPE=INNODB;

CREATE TABLE LOCATION

integer, varchar(25)(

int not null,
varchar(65) not null,
varchar(45) ,
smallint,
int not null,
smallint,
CODE LOCATION ) TYPE=INNODB; CREATE TABLE SONGS (

CODE SONG WRITER RATING Albumcode songnumber

INDEX INDEX_ALBUMCODE (ALBUMCODE),

FOREIGN KEY(ALBUMCODE) REFERENCES ALBUM(CODE), PRIMARY KEY (CODE)

) TYPE=INNODB;

Приведенный здесь текст будет выполняться как сценарий в среде MySQL. Что­бы база данных его прочитала, введите следующую команду, изменив имя пользова­теля и пароль в соответствии со своими настройками:

Mysql Password="foo,’ User="charlxe" jbbook < create-music-mysql. sql

Вы найдете среди сопровождающих книгу материалов также и другие сценарии, например, для удаления всех таблиц и ввода данных в пустые таблицы

Создание таблиц для InterBase

Создавать таблицы для InterBase нет нужды; вместо этого можно просто восполь­зоваться базой данных Jbbook. gbd, Которую вы найдете в сопровождающих матери­алах. Окончательные метаданные для базы данных хранятся в файле InterBase — jbbook-metadata. txt В каталоге Database. В Следующей главе я расскажу, как под­ключиться в этой базе данных из среды JBuilder.

Листинг 39.2. Создание базы данных Music для InterBase

varchar(15) not null, integer not null,CREATE TABLE LOUDNESS (

LOUDNESS CODE

PRIMARY KEY (CODE)

) ;

char (15) not null, integer not null,CREATE TABLE MEDIUM (

MEDIUMVAR CODE

PRIMARY KEY (CODE)

) ;

CREATE TABLE TYPES

(

TYPES VARCHAR (15) NOT NULL,

CODE INTEGER NOT NULL,

PRIMARY KEY (CODE)

) ;

CREATE TABLE ARTIST

int not null,
varchar(30),
varchar(30),
timestamp,
timestamp,
varchar(35),
blob sub_type text segment size 80, integer not null,
(

CODE LAST FIRST BORN DIED

primary key (code)
) ;
create table album
(
code album types loudness medium rating groupcode cddbid cddbname
BIRTHPLACE COMMENT Artisttype

INT NOT NULL,

VARCHAR(45) NOT NULL,

Smallint,

Smallint,

Smallint,

Smallint,

INT NOT NULL,

VARCHAR(20),

VARCHAR(40),

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE), FOREIGN KEY(LOUDNESS) REFERENCES LOUDNESS(CODE), FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE), Foreign key(Groupcode) references artist(code), PRIMARY KEY (CODE)

) ;

CREATE TABLE ALBUMINFO

(

CODE INT NOT NULL,

COMMENT BLOB SUB_TYPE TEXT SEGMENT SIZE 80,

Cddbdata blob sub_type text segment size 80,

Albumcode int not null,

FOREIGN KEY (ALBUMCODE) REFERENCES ALBUM,

PRIMARY KEY (CODE)

);

create table (
artisttype
code
primary key ) ;
create table (
code types medium rating comment groupcode book foreign foreign foreign
,key
key
key
,primary key ) ;
create table
,artisttype
varchar(15) not null,
integer not null,
(code)
book
int not null,
int not null,
int not null,
int not null,
blob sub_type text segment size 80, int not null,
varchar(50),
(types) references types(code), (medium) references medium(code), (groupcode) references artist(code), (code)
cdrom
code
locationcode
name
idvalue
keyvalue
comment
types
primary key
,int not null,
integer,
varchar(50),
varchar(50),
varchar(50),
blob sub_type text segment size integer,
(code)
80,
create table location
(
code
location
) ;
create table
integer, varchar(25)
songs

code song writer rating albumcode songnumber foreign key primary key
) ;
INT NOT NULL,

VARCHAR(65) NOT NULL,

VARCHAR(45),

Smallint,

INT NOT NULL,

Smallint,

(Albumcode) references album (code), (CODE)

Создание таблиц для Access

База данных для Access находится в файле с именем jbbook. mdb, который входит в состав сопровождающих книгу материалов. В листинге 39.3 показаны метаданные для этой базы данных.

Листинг 39.3. Метаданные для данных, хранящихся в базе данных Access С именем Jbbook

create table loudness

not null, null,
loudness
code
primary key ) ;
create table (
medium
code
primary key ) ;
create table (
types
code
primary key ) ;
create table (
code
last
first
born
died
birthplace comment artisttype primary key
) ;
create table
varchar(15) integer not
(code)
medium
varchar(15) not null, integer not null,
(code)
types
not null, null,
varchar(15) integer not
(code)
artist
int not null, varchar(30), varchar(30), timestamp, timestamp, varchar(35), memo,
integer not null, (code)
album

CODE

INT NOT NULL,

ALBUM

VARCHAR(45) NOT NULL,

TYPES

INT,

LOUDNESS

INT,

MEDIUM

INT,

RATING

INT,

Groupcode

INT NOT NULL,

CDDBID

VARCHAR(20) ,

Cddbname

VARCHAR(40) ,

FOREIGN KEY(TYPES) REFERENCES TYPES(CODE),

FOREIGN KEY(LOUDNESS) REFERENCES LOUDNESS(CODE)

FOREIGN KEY(MEDIUM) REFERENCES MEDIUM(CODE),

Foreign key (Groupcode) references artist(code),

PRIMARY KEY

(CODE)

) ;

CREATE TABLE ALBUMINFO

code comment cddbdata albumcode foreign key primary keyINT NOT NULL,

MEMO,

MEMO,

INT NOT NULL,

(Albumcode) references album, (CODE)

CREATE

(

Table Artisttyfe

VARCHAR (15) NOT NULL, INTEGER NOT NULL,

(CODE)

CODE

INT NOT NULL,

TYPES

INT,

MEDIUM

INT,

RATING

INT,

COMMENT

MEMO,

Groupcode int not null,

Book

VARCHAR(50),

FOREIGN

KEY(TYPES) REFERENCES TYPES(CODE),

FOREIGN

KEY(MEDIUM) REFERENCES MEDIUM(CODE),

FOREIGN

Key(groupcode) references artist(code)

PRIMARY

KEY (CODE)

Artisttype

Code

PRIMARY KEY ) ;

CREATE TABLE

B∞K

CREATE TABLE CDROM

(

CODE

Locationcode name IDVALUE Keyvalue comment types

PRIMARY KEY ) ;

CREATE TABLE (

CODE LOCATION ) ;

CREATE TABLE SONGS

INT NOT NULL, INTEGER, VARCHAR(50), VARCHAR(50), VARCHAR(50), MEMO, INTEGER,

(CODE)

LOCATION

INTEGER, VARCHAR(25)

CODE SONG WRITER RATING Albumcode songnumber FOREIGN KEY PRIMARY KEY

) ;

INT NOT NULL,

VARCHAR(65) NOT NULL,

VARCHAR(45),

Smallint,

INT NOT NULL,

Smallint,

(Albumcode) references album (code), (CODE)

Загрузка исходных данных

B каталоге Database∕data в сопровождающих материалах вы найдете множество файлов с именами вроде album. sqi и artist. sqi. В этих файлах содержатся исход­ные данные, используемые в базе данных jbbook. Присутствуют также сценарии для загрузки этих данных в MySQL, однако сценарии эти предназначены главным обра­зом для того, чтобы служить примерами для пользователей других баз данных, кото­рые желают загрузить эти данные.

Например, вот один из самых простых файлов из каталога data:

insert into loudness insert into loudness insert into loudness insert into loudness(LOUDNESS, CODE) values("UNKNOWN", O); (LOUDNESS, CODE) values("PEACEFUL”, 1); (LOUDNESS, CODE) values("MODERATE”, 2); (LOUDNESS, CODE) values("LOUD", 3);

Если таблица loudness уже существует, этот простой сценарий загрузит в нее данные. Не все SQL-файлы в этом каталоге столь же просты; некоторые из них со­держат сотни записей, хранящихся во множестве поле, часть из которых — поля типа blob. Такие файлы будут пострашнее приведенного выше.

Я пользовался этими файлами, чтобы переносить свои данные из InterBase в MySQL и Access. Вы можете воспользоваться ими, чтобы переносить информацию в другие базы данных. Подобные этим простые сценарии могут дать вам значитель­ную власть над миром баз данных. Если вас это заинтересовало, можете просмот­реть JBuilder-программы, представленные в сопровождающих материалах — AccessSetup, ConvertAddress, CountryData И MusicConvert. Назначение ЭТИХ Программ описано в HTML-файлах, расположенных в корневых каталогах кода этих программ.

Настройка среды в Windows

Код взаимодействия с базами данных JBuilder основывается на множестве JAR — файлов, которые поставляются вместе с JBuilder. В частности, вам нужно будет по­местить в свой путь классов файлы dχ. jar, dbswing. jar и interclient. jar. Это не имеет значения, когда вы находитесь в JBuilder, но понадобится, если вы захотите компилировать что-либо из командной строки. В частности, если вы пользуетесь Ant, вам потребуется включить эти файлы в свой путь классов.

Чтобы правильно настроить среду командной строки в Windows, запустите на выполнение командный файл, приведенный в листинге 39.4. В среде Linux выпол­ните сценарий, показанный в листинге 39.5.

Пути в этих файлах нужно будет изменить так, чтобы они отображали местона­хождение тех или иных файлов на вашей машине. Эти сценарии написаны таким образом, что вам потребуется только отредактировать несколько переменных в на­чале каждого из файлов. После того, как вы это сделаете, все остальное в файле дол­жно будет стать на свои места без особых проблем.

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

Листинг 39.4. Простой командный файл для настройки среды под Windows

βecho off

Rem ——————————————————————————

Rem Настраиваем среду для вашей машины.

Rem Вам нужно будет отредактировать первые четыре параметра в разделе Rem Каждого пользователя

Rem CLASSESDIR — место для хранения некоторых глобально необходимых JAR-файлов Rem

If %1==1 goto chaclie

If %1≈2 goto margie

Echo Настраиваем среду для вашей машины.

Echo Вы можете определить несколько пользователей.

Echo Вероятно, вам потребуется отредактировать следующие ниже операторы Echo Для соответствия вашей системе

Echo 1: Чарли

Echo 2: Марджи

Goto end

Rem — Чарли —————————————

:Charlie

Set ANT_HOME=g:/SrcJava/ant

Set JAVA_HOME=g:/Compilers∕ j 2 sdkl.4.0

Set JBUILDER_HOME=g: ∕ jb7

Set CLASSESDIR=g:∕utils∕classes

Set INTERCLIENT_JAR=g:∕Compilers∕interbase∕InterClient∕interclient. jar

Rem Несколько JAR-Файлов общего назначения

Set CLASSPATH=%CLASSESDIR%/jaxp. jar;%CLASSESDIR%∕codebox. jar

Rem Настройки Borland data express

Set CLASSPATH=%CLASSPATH;%JBUILDER_HOME/lib/dx. jar;

%JBUILDER_HOME/lib/dbswing. jar;%JBUILDER_HOME/lib/jbcl. jar;

%JBUILDER-HOME%∕lib∕junit. jar;

Rem Настраиваем Mm. mysql

Set CLASSPATH=%CLASSPATH,∙%CLASSESDIR∕mm. mysql-2.0 . ll-bin. jar

Rem Настраиваем Interbase

Set CLASSPATH=%CLASSPATH;%INTERCLIENT_JAR

Set PATH=% PATH%; %ANT_HOME/bin

Rem — Марджи ————————————-

:margie

Set ANT_HOME=g:∕src∕srcjava/jakarta-ant-1.4.1

Set JAVA_HOME=E:/Compilers/j2sdkl.4.0

Set JBUILDER_HOME=E:/Utilities/JBuilder

Set CLASSESDIR=g:∕utils∕classes

Rem Несколько JAR-Файлов общего назначения

Set CLASSPATH=%CLASSESDIR%/jaxp. jar,∙%CLASSESDIR%∕codebox. ɔar

Rem Настройки Borland data express

Set CLASSPATH=%CLASSPATH;%JBUILDER_HOME/lib/dx. jar;

%JBUILDER_HOME/lib/dbswing. jar;%JBUILDER-HOME

%∕lib∕junit. jar;%JBUILDER-HOME%∕lib∕jbcl. jar

Rem Настраиваем Mm. mysql

Set CLASSPATH=%CLASSPATH,∙%CLASSESDIR∕mm. mysql-2.0. ll-bin. jar

Set PATH=%PATH%;%ANT_HOME/bin

: end

Настройка среды в Linux

B листинге 39.5 показан сценарий для Linux.

Листинг 39.5. Простой сценарий для настройки среды на Linux-машине

#! ∕bin∕bash

# Вам нужно будет отредактировать первые четыре параметра в коде этого файла.

# CLASSESDIR — место для хранения некоторых глобально необходимых JAR-файлов.

# Самый важный файл в CLASSESDIR — это Codebox, который можно

# Собрать, запустив Ant В каталоге зге для файлов, входящих в состав

# Сопровождающих материалов для этой книги.

# Вам также потребуется получить файл Mm. mysql-2.O.11-bin. jar — из

# Internet Или из сопровождающих материалов.

Export ANT_HOME=/home/ccalvert/src/srcjava/jakarta-ant-1.4.1

Export JAVA_HOME=/usr/java/j2sdkl.4.0

Export JBUILDER_HOME=/home/ccalvert/jb7

Export CLASSESDIR=∕home∕ccalvert/classes

Export INTERCLIENT_JAR=/usr/interclient/interclient. jar

Export Classpath=Sclassesdir/Jaxp. jar:SCLASSESDiR∕codeboχ.jar

Export Classpath=Sclasspath:$jBUiLDER_HOME/iib/dx. jar:$Jbuilder-home

/lɪb/dbswing. jar:$JBUILDER_HOME/lib/jbcl. jar:$JBUILDER_HOME/jiɪnit. jar

# ————————————

# Раздел баз данных

# ————————————

# Mm. mysql. jar Является символической ссылкой на текущий

# Файл Mm. mysql-2.0.11-bin. jar

Export Classpath=Sclasspath∙SCLASSESDiR∕mm. mysqi. jar

Export Classpath=Sclasspath:$interclient_jar

# ——————————————————-

# Пути

# ——————————————————-

PATH=SPATH : /hoɪne/eealvert/sre/sre java/ jakarta-ant-1.4.1/bin

Настройка Ant

B листинге 39.6 показан типичный Ant-файл, которым я пользуюсь в данной ча­сти книги. Чтобы адаптировать его под другой проект, просто измените свойства Small-name, caps-name И Camel-name В начале файла.

Если на вашей машине Ant настроен надлежащим образом, вы можете вводить следующие команды:

Команда Назначение

Ant Собрать проект и поместить его в JAR-файл.

Ant run Скомпилировать проект, поместить его в JAR-файл и запустить его. Ant clean Удалить каталог Classes, JAR-файл и прочие посторонние файлы.

Листинг 39.6. Пользуйтесь этим Ant-файлом, набирая в командной строке ant, ant clean или ant run

<project name="MasterDetail" default="dist" basedir=". ,,> <target name="init’,>

<!— sβt global properties for this build —> <property name="src" value="src"∕>

<property name="build" value="classes"∕>

<property name="dist" value=,’lib" ∕>

<property name=»doc" value="doc" ∕>

<•— you should only have to edit these —>
<property name="small-name" <property name="camel-name" <property name="caps-name" <!— end edit section —> <property name="project-jar"
<echo message="project jar = <!-- create the time stamp —> <tstamp∕>
<∕target>
value="masterdetail"∕> value="masterdetail"∕> value="masterdetail"∕>
value="${dist}\${small-name}.jar"∕> ${project-jar}"∕>

<target name="compile" depends="init">

<!— Create the build directory structure used by compile —> <mkdir dir="${build}"∕>

<!— Compile the java code from ${src} into ${build} —> <javac srcdir="⅞{src}" destdir=”${build}"∕>

<copy todir=n${build}/${small-name}">

<fileset dir="${src}/${small-name}∕">

<exclude name="**/*.java"∕>

<∕fileset>

<∕copy>

<∕target> <target name="dist" depends="compiIe">

<!— Create the distribution directory —>

<mkdir dir="${dist}"∕>

<jar jarfile="${project-jar}" basedir="${build}"∕>

</target>

fork="yes"><target name="run" depends="dist">

<java Classname="${small-name}.${caps-name}"

<classpath>

<pathelement Iocation=nS{project-jar}"∕> <pathelement path="${java. class. path}"∕>

</classpath>

</java>

<∕target>

<target name="clean" depends="init">

<!— Delete the ${build} and ${dist} directory trees —> <delete dir="${build}"∕>

<delete dir="${dist}"∕>

<delete dir="${doc}"∕>

jpx.local~"∕> jp×~"∕><delete file="${caps-name}.jpx. local"∕>

<delete file="S{caps-name}

<delete file="${caps-name}

<delete file="${caps-name}.html~"∕>

<∕target>

<∕project>

Листинг 39.6 будет работать только в том случае, если вы сначала настроите свой путь классов, как показано в листингах 39.4 и 39.5. В качестве альтернативы можно сделать нечто вроде следующего, где определенные значения получены из среды си­стемы, а пути к JAR-файлам явно объявлены в файле сборки Ant

<target name="set-name">

<property environment="env"∕>

<!Set up class path. See index. html in root dir. —>

<property name="classes-dir" value="5{env. CLASSESDIR}"∕>

<property name=" jbuilder-home” value= " $ {env. JBUILDER_HOME } " ∕> <property name="dx-jar" value="${jbuilder-home}∕lib∕dx. jar"∕> <property name="dbswing" value="${jbuilder-home}∕lib∕dbswing. jar"∕> <proρerty name="junit-jar" value="${classes-dir}∕junit. jar"∕>

<echo message="dx-jar=${dx-jar}"∕>

<echo message="junit-jar=${junit-jar}"∕>

<echo message="junit-jar=${dbswing)"∕>

<∕target>

Слишком много вариантов?

B этой главе я представил на ваше рассмотрение множество различных вариан­тов. Если вам кажется, что вы "потерялись" во всех этих альтернативах, я бы предло­жил вам остановиться (если возможно) на следующем:

■ Установить MySQL на машине под Linux.

■ Поместить все свои данные в свою базу данных MySQL под Linux.

■ Использовать для соединения с данными "чистые" драйвера JDBC, как опи­сывается в следующей главе.

Последовав этим рекомендациям, вы будете подготовлены к весьма серьезному программированию приложений баз данных. Крупные компании с большими база­ми данных нашли, что подобное решение удовлетворяет их нуждам. И, самое глав­ное, все это — бесплатное программное обеспечение. Если вы привязаны к какой-то иной базе данных или у вас нет компьютера с установленной операционной систе­мой Linux, который вы могли бы использовать для подобного дела, у вас не полу­чится так сделать. Но, если у вас есть возможность устроить все так, как описано выше, мой вам совет — поступайте именно так.

Резюме

В этой главе вы несколько ближе познакомились с MySQL и InterBase. Новички в SQL смогли получить некоторое представление о том, что можно делать с этим язы­ком. Я также предоставил решение для тех, кто предпочитает пользоваться Access.

Ближе к концу главы я объяснил, как получить доступ к данным для программ — примеров, используемых в этой книге. Я также показал, как настроить среду таким образом, чтобы вы могли запускать программы для работы с базами данных JBuilder в режиме командной строки. Коротенький раздел в самом конце главы содержит всю информацию, необходимую пользователям Ant для настройки своей среды.

В следующей главе вы наконец-то узнаете, как получить доступ к этим базам данных из среды JBuilder. Основное назначение следующей главы — познакомить вас с драйверами ODBC и JDBC, которые формируют связь между Java и всеми база­ми данных, рассмотренными в этой главе.

Чарли Калверт

Глава 40

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *