// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Работа с базой данных Java DB (Derby)
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Работа с базой данных Java DB (Derby) - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Работа с базой данных Java DB (Derby)

Вь этом документе описывается настройка соединения с базой данных link:http://www.oracle.com/technetwork/java/javadb/overview/index.html[+Java DB+] в IDE NetBeans. По завершении установки подключения можно начинать работу с базой данных в среде IDE, позволяющей создавать таблицы, заполнять их данными, выполнять операторы и запросы SQL и т.д.

База данных Java DB является поддерживаемым корпорацией Sun дистрибутивом link:http://db.apache.org/derby/[+Apache Derby+]. Java DB - полностью транзакционный безопасный сервер базы данных на основе стандартов, написанный целиком на языке Java, полностью поддерживающий технологии SQL, интерфейс API JDBC и Java EE. База данных Java DB поставляется с сервером приложений link:http://glassfish.dev.java.net/[+GlassFish +], а также включена в пакет link:http://download.oracle.com/javase/6/[+JDK 6+]. Дополнительные сведения о базе данных Java DB приведены в link:http://www.oracle.com/technetwork/java/javadb/documentation/index.html[+официальной документации+].


image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]


*Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |7.2, 7.3, 7.4, 8.0, Java EE 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |Версия 7 или 8 

|Java DB |версии 10.4.x, 10.5.x 
|===

*Примечание.*

* Java DB был установлен при установке JDK 7 или JDK 8 (за исключением Mac OS X). При использовании Mac OS X можно загрузить и установить link:http://www.oracle.com/technetwork/java/javadb/downloads/index.html[+базу данных Java+] вручную или использовать базу данных Java, установленную с помощью версии Java EE средства установки IDE NetBeans.


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

При регистрации сервера GlassFish Server в установленной среде IDE NetBeans база данных Java DB также будет зарегистрирована. Для получения дополнительных сведений обратитесь к разделу <<starting,Запуск сервера и создание базы данных>>.

Если сервер GlassFish загружен отдельно, и требуется помощь в регистрации его в среде IDE NetBeans, ознакомьтесь со справкой по среде IDE (F1), раздел *Регистрация экземпляра сервера GlassFish*.

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

1. Выполните самораспаковывающийся файл. В месте хранения файла будет создана папка javadb. Если требуется, чтобы сервер базы данных находился не в той папке, в которую он был извлечен, его необходимо переместить сразу по завершении загрузки Java DB.
2. Создайте в системе новый каталог для использования в качестве домашнего каталога для отдельных экземпляров сервера базы данных. Например, можно создать эту папку в корневом каталоге базы данных Java DB (javadb) или в другой папке.

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

* Подкаталог  ``demo``  содержит демонстрационные версии программ.
* Подкаталог  ``bin``  содержит сценарии для выполнения служебных программ и настройки среды.
* Подкаталог  ``javadoc``  содержит документацию по интерфейсу API, созданную из комментариев исходного кода.
* Подкаталог  ``docs``  содержит документацию по Java DB.
* Подкаталог  ``lib``  содержит архивы JAR базы данных Java DB.


== Регистрация базы данных в IDE NetBeans

Теперь, после настройки базы данных, выполните следующие шаги для регистрации Java DB в среде IDE.

1. В окне 'Службы' щелкните правой кнопкой мыши узел базы данных DB Database и выберите 'Свойства', чтобы открыть диалоговое окно 'Настройки  DB Java'.
2. В текстовое поле "Установка Java DB" введите путь к корневому каталогу Java DB (javadb), указанный в предыдущем шаге.
3. В качестве местоположения базы данных используйте местоположение по умолчанию, если оно предлагается. Нажмите кнопку "OK".

Например, на компьютере под управлением Windows местоположение по умолчанию может иметь следующий вид:  ``C:\Documents and Settings\username\.netbeans-derby`` .

image::images/javadb-props.png[title="пример настроек по умолчанию сервера и базы данных Java DB"]

*Примечание.* Если поле 'Расположение базы данных' пустое необходимо указать путь к каталогу, который содержит базы данных. Если каталога нет, для баз данных потребуется создать каталог.


== Запуск сервера и создание базы данных

Параметры меню базы данных Java DB отображаются при щелчке правой кнопкой мыши узла Java DB в окне 'Службы'. Появившиеся пункты контекстного меню позволяют запускать сервер базы данных и останавливать его работу, создавать новые экземпляры базы данных, а также регистрировать серверы базы данных в среде IDE (как описано в предыдущем действии). Запуск сервера базы данных.

1. В окне 'Службы' щелкните правой кнопкой мыши узел Java DB и выберите 'Запустить сервер'. Обратите внимание на следующую информацию, выведенную в окне "Вывод" и сообщающую о запуске сервера:
image::images/output-start-db.png[]
2. Правой кнопкой мыши щелкните узел Java DB и выберите "Создать базу данных", чтобы открыть диалоговое окно "Создание базы данных DB".
3. В качестве имени базы данных введите  ``contact`` .
4. В качестве имени пользователя и пароля введите  ``nbuser`` . Нажмите кнопку "ОК".
image::images/javadb-createdb.png[]

*Примечание.* Поле "Расположение базы данных" указан путь по умолчанию, определенный во время установки Java DB из GlassFish. Если база данных Java DB установлена отдельно, это местоположение может быть другим.

После создания базы данных при развертывании узла 'Базы данных' в окне 'Службы', можно увидеть, что среда IDE создала соединение с базой данных и что база данных была добавлена в список под узлом Java DB.


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

Итак, сервер базы данных успешно запущен, и в среде IDE создан экземпляр базы данных с именем  ``contact`` . В окне 'Службы' в IDE вы можете выполнять следующие общие задачи в структурах баз данных.

* создание, удаление, изменение таблиц;
* заполнение таблиц данными;
* просмотр табличных данных;
* выполнение операторов SQL и запросов.

Для начала работы с базой данных  ``contact`` необходимо создать подключение к ней. Для соединения с базой данных  ``контактов``  выполните следующие шаги.

1. Разверните узел 'Базы данных' в окне 'Службы' и найти новую базу данных и узлы подключения к базе данных.

Узел подключения к базе данных ( image::images/connection-node-icon.png[]) отображается ниже узла 'Базы данных'. Имя базы данных отображается ниже узла Java DB.

image::images/services-window.png[]

*Примечание.* Также отобразится соединение с базой данных `образец [app on APP]`, которое является схемой базы данных по умолчанию.

[start=2]
. Щелкните правой кнопкой мыши узел подключения к базе данных *контактов* ( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` ) и выберите команду "Подключить".

Отобразится весь значок узла подключения ( image::images/connection-node-icon.png[]), что означает, что соединение установлено успешно.
3. Задайте удобное отображаемое имя для базы данных, щелкнув правой кнопкой мыши узел подключения к базе данных ( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` ) и выберите 'Переименовать'. В текстовом поле введите  ``Contact DB``  и нажмите кнопку "ОК".


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

Созданная база данных  ``contact``  в настоящее время пуста. Она еще не наполнена таблицами или данными. В IDE NetBeans можно добавить таблицу баз данных либо с помощью диалогового окна 'Создать таблицу' или путем ввода оператора SQL и запуска его напрямую из редактора SQL. Можно использовать оба метода:

* <<createTable,Использование диалогового окна "Создание таблицы">>
* <<sqlEditor,Использование редактора SQL>>


=== Использование диалогового окна "Создание таблицы"

1. Разверните узел подключения  ``Contact DB``  и обратите внимание, что он имеет несколько подузлов. В этом учебном курсе рассматривается схема "app". Щелкните правой кнопкой мыши узел "APP" и выберите "Установить как схему по умолчанию".

2. Разверните узел APP и обратите внимание, что он имеет три подкаталога: "Таблицы", "Представления" и "Процедуры". Правой кнопкой мыши щелкните узел 'Таблицы' и выберите 'Создать таблицу', чтобы открыть диалоговое окно 'Создание таблицы'.
3. Введите  ``FRIENDS``  в текстовое поле "Имя таблицы".
4. Нажмите кнопку "Добавить столбец". Появится диалоговое окно "Добавить столбец".
5. В поле "Имя столбца" введите  ``id`` . В поле "Тип данных" выберите элемент  ``INTEGER``  в раскрывающемся списке.
6. При определенных обстоятельствах может потребоваться установить флажок "Первичный ключ" для указания того, что данный столбец является первичным ключом для таблицы. Все таблицы, созданные в реляционных базах данных, должны содержать первичный ключ. Обратите внимание, что при выборе флажка "Первичный ключ" выполняется автоматическая установка флажков "Индекс" и "Уникальный", а флажок "Значение отсутствует" при этом снимается. Это объясняется тем, что первичные ключи используются для определения уникальной строки базы данных и по умолчанию применяются как индекс таблицы. Поскольку все строки должны быть определены, первичные ключи не могут иметь значение  ``Null`` .

image::images/add-column.png[]

[start=7]
. Теперь повторите эту процедуру, определив поля, как показано на таблице ниже.

|===

|Ключ |Индекс |Значение отсутствует |Уникальный |Имя таблицы |Тип данных |Размер 

|[установлен] |[установлен] |[установлен] |идентификатор |INTEGER |0 

|[установлен] |firstName |VARCHAR |20 

|[установлен] |lastName |VARCHAR |20 

|[установлен] |nickName |VARCHAR |30 

|[установлен] |friendSince |DATE |0 

|[установлен] |эл. почта |VARCHAR |60 
|===

В создаваемой таблице  ``FRIENDS``  для каждой записи контакта содержатся следующие данные:

* *имя;*
* *фамилия;*
* *псевдоним;*
* *дата включения в список контактов;*
* *адрес электронной почты.*
image::images/create-table-friends.png[]
9. 
Если диалоговое окно "Создание таблицы" содержит значения, идентичные вышеописанным, нажмите кнопку "ОК". В IDE создается таблица  ``FRIENDS``  в базе данных и отображается новый узел таблицы  ``FRIENDS``  (image::images/table-node.png[]) ниже узла 'Таблицы'. Под узлом таблицы перечислены столбцы (поля), начиная с первичного ключа (image::images/primary-key-icon.png[]).

image::images/friends-table.png[]


=== Использование редактора SQL

1. В окне 'Службы' либо щелкните правой кнопкой мыши узел подключения  ``Contact DB``  или узел 'Таблицы' под ним и выберите пункт 'Выполнить команду'. В главном окне редактора SQL отобразится пустой холст.
2. Введите в редактор SQL запрос, как описывается ниже. Определение создаваемой таблицы COLLEAGUES:

[source,sql]
----

CREATE TABLE "COLLEAGUES" (
    "ID" INTEGER not null primary key,
    "FIRSTNAME" VARCHAR(30),
    "LASTNAME" VARCHAR(30),
    "TITLE" VARCHAR(10),
    "DEPARTMENT" VARCHAR(20),
    "EMAIL" VARCHAR(60)
);
----

*Примечание * Операторы и запросы, сформированные в редакторе SQL, анализируются в соответствии с нормами языка структурированных запросов (Structured Query Language, SQL). Для SQL характерны строгие синтаксические правила, применяемые также при работе с редактором среды IDE. Синтаксис SQL также может быть различаться в зависимости от системы управления базами данных. Дополнительные сведения приведены в link:http://www.oracle.com/technetwork/java/javadb/documentation/index.html[+Справочном пособии по JavaDB+].

[start=3]
. Нажмите кнопку 'Выполнить SQL' (image::images/run-sql-button.png[]) на панели задач в верхней части редактора (Ctrl-Shift-E) для выполнения запроса. В окне "Вывод" (CTRL+4) будет выведено сообщение об успешном выполнении оператора.

image::images/run-query.png[]

[start=4]
. Для проверки изменений щелкните правой кнопкой мыши узел подключения  ``Contact DB``  в окне 'Службы' и выберите 'Обновить'. В результате этого действия будет произведено обновление компонента пользовательского интерфейса среды выполнения до текущего состояния указанной базы данных. Этот шаг необходим при запуске запросов из редактора SQL в IDE NetBeans. Обратите внимание, что новый зузел таблицы COLLEAGUES (image::images/table-node.png[]) теперь отображается ниже 'Таблицы' в окне 'Службы'.


== Добавление данных в таблицу

После того, когда в базе данных  ``contact``  уже создана одна или несколько таблиц, можно начинать заполнять их данными. Существует несколько способов добавления записей в таблицу:

* <<sqlstatement,Запишите в редакторе SQL оператор SQL>>, который предоставляет значение для каждого поля в схеме таблицы.
* <<usesqleditor,Используйте редактор SQL>> для добавления записей в таблицу.
* <<using,Используйте внешний сценарий SQL>> для импорта записей в таблицу.

Для получения сведений об использовании всех описанных методов заполнения таблицы  `` FRIENDS``  данными обратитесь к указанным ниже разделам.


=== Выполнение оператора SQL

1. Разверните 'Таблицы' под узлом  ``Contact DB``  в окне 'Службы', щелкните правой кнопкой мыши таблицу  ``FRIENDS``  и выберите 'Выполнить команду', чтобы открыть окно редактора SQL.
2. Введите в окне редактора SQL следующий оператор:

[source,sql]
----

INSERT INTO APP.FRIENDS VALUES (1,'Theodore','Bagwell','T-Bag','2004-12-25','tbag@foxriver.com')
----

При вводе можно использовать функцию автозавершения кода редактора SQL.

[start=3]
. Щелкните правой кнопкой мыши в пространстве внутри редактора SQL и выберите команду "Выполнить оператор". В окне "Вывод" появится сообщение об успешном выполнении оператора.
. Чтобы убедиться, что новая запись была добавлена к таблице  ``FRIENDS``  щелкните правой кнопкой мыши узел таблицы  ``FRIENDS``  в окне 'Службы' и выберите 'Просмотреть данные'.

При выборе команды "Просмотреть данные" на верхней панели редактора SQL автоматически создается запрос на выбор всех данных таблицы. На нижней панели редактора SQL выводятся выходные данные оператора. В этом случае таблица  ``FRIENDS``  будет отображена на нижней панели. Обратите внимание, что новая строка была добавлена с данными, предоставленными в операторе SQL.

image::images/new-record.png[]


=== Использование редактора SQL

1. Щелкните правой кнопкой мыши узел таблицы  ``FRIENDS``  и выберите "Просмотреть данные" (если просмотр не был выполнен в последнем действии предыдущего раздела).
2. Нажмите кнопку "Вставить записи" ( ``ALT+I`` ) для добавления строки.
Появится диалоговое окно "Вставить записи".
3. Щелкните каждую ячейку и введите записи. Обратите внимание, что для ячеек с типом данных срока можно выбрать дату из календаря. Нажмите кнопку "ОК" после выполнения действия. 

image::images/insert-records.png[]

В редакторе SQL можно отсортировать результаты, щелкнув заголовок строки, изменить и удалить существующие записи, а также просмотреть сценарий SQL для действий, выполняемых в редакторе (команда "Показать сценарий SQL" во всплывающем меню).


==  Удаление таблиц

В следующем действии потребуется использование внешнего сценария SQL для создания новой таблицы  ``COLLEAGUES`` . При этом в предыдущем действии раздела  ``Использование редактора SQL``  уже была создана таблица <<sqlEditor,COLLEAGUES>>. Чтобы убедиться в возможности создавать новые таблицы при помощи сценария SQL, можно удалить существующую таблицу  ``COLLEAGUES`` . Для удаления таблицы баз данных выполните следующие действия:

1. Разверните узел 'Таблицы' под узлом соединения с базой данных в окне 'Службы'.
2. Щелкните правой кнопкой мыши таблицу, которую необходимо удалить, и выберите команду "Удалить".


== Использование внешнего сценария SQL

Ввод команд из внешнего сценария SQL является распространенным способом управления базой данных. Возможно, сценарий SQL уже создан в другом местоположении и требуется выполнить его импорт в IDE NetBeans для запуска в указанной базе данных.

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

1. Загрузите link:https://netbeans.org/project_downloads/usersguide/colleagues.sql[+colleagues.sql+] в локальную систему.
2. В главном меню среды IDE выберите "Файл" > "Открыть". В браузере файлов перейдите к месту хранения файла  ``colleagues.sql``  и нажмите "Открыть". Сценарий автоматически откроется в редакторе SQL.

В качестве альтернативы вы можете скопировать содержимое link:https://netbeans.org/project_downloads/usersguide/colleagues.sql[+colleagues.sql+], а затем открыть редактор SQL и вставить содержимое файла в редактор SQL.

[start=3]
. Убедитесь, что подключение к базе данных  ``Contact DB``  в раскрывающемся списке "Подключение" на панели инструментов в верхней части редактора выбрано.

image::images/conn-drop-down.png[]

[start=4]
. Нажмите кнопку 'Выполнить SQL' (image::images/run-sql-button.png[]) на панели инструментов редактора SQL. Сценарий будет выполнен для выбранной базы данных, возвращаемые данные будут выведены в окне "Вывод".
. Для проверки изменений щелкните правой кнопкой мыши узел подключения  ``Contact DB``  в окне 'Службы' и выберите 'Обновить'. Обратите внимание, что новая таблица  ``COLLEAGUES``  сценария SQL теперь отображена в виде узла таблицы  ``contact``  в окне "Службы".
. Для просмотра данных. содержащихся в новой таблице, щелкните правой кнопкой мыши таблицу  ``COLLEAGUES``  и выберите 'Просмотреть данные'. Таким образом можно сравнить данные в таблицах с данными сценария SQL, чтобы убедиться в их соответствии.

==  Восстановление таблиц из различных баз данных

При наличии таблицы из другой базы данных, которую необходимо повторно создать в базе данных, с которой пользователь работает из IDE NetBeans, среда IDE обеспечивает для этой задачи удобный инструмент. Для начала потребуется наличие второй базы данных, зарегистрированной в среде IDE, как описывается в начале учебного курса. Для работы в рамках данного учебного курса используйте  ``пример``  базы данных, входящий в пакет Java DB. Этот процесс выполняется в два этапа: сначала необходимо "захватить" определение выбранной таблицы, а потом восстановить таблицу в выбранной базе данных.

1. Подключитесь к базе данных  ``sample``  щелкнув правой кнопкой мыши узел подключения под узлом 'Базы данных' в окне 'Службы' и выберите 'Подключение' (имя пользователя и пароль:  ``app`` ).
2.  Разверните узел 'Таблицы' под подключением к базе данных  ``sample`` , щелкните правой кнопкой мыши узел таблицы  ``CUSTOMER``  и выберите 'Копировать структуру'.

image::images/grab-structure.png[]

[start=3]
. В открывшемся диалоговом окне "Сохранение таблицы" укажите путь для сохранения создаваемого файла захвата на компьютере. Нажмите кнопку "Сохранить".

Определение выбранной таблицы будет записано в файл захвата.

[start=4]
. Разверните узел схемы APP в подключении к базе данных  ``Contact DB`` , щелкните правой кнопкой мыши узел 'Таблицы' и выберите 'Повторно создайте таблицу', чтобы открыть открыть диалоговое окно 'Повторно создайте таблицу'.
. В открывшемся диалоговом окне "Восстановление таблицы" перейдите по пути хранения файла захвата  ``CUSTOMER`` , скопируйте файл и нажмите кнопку "Открыть", чтобы открыть диалоговое окно 'Именование таблицы'.

image::images/recreate-table.png[]

[start=6]
. В выведенном окне можно изменить имя таблицы или отредактировать ее определение. Для немедленного создания таблицы в базе данных  ``contact``  нажмите кнопку "ОК". Узел таблицы  ``CUSTOMER``  отобразится под узлом подключения к базе данных  ``Contact DB`` .

image::images/new-customer-node.png[]

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

link:/about/contact_form.html?to=3&subject=Feedback:%20Working%20With%20Java%20DB[+Мы ждем ваших отзывов+]



== Дополнительные сведения

Это заключительный раздел учебного курса по работе с базой данных Java DB (Derby). В этом учебном курсе описывается настройка соединения с базой данных DB Java в IDE NetBeans. Также были описаны способы создания, просмотра, изменения и удаления таблиц в окне "Службы" среды IDE. Кроме того, были представлены методы работы с редактором SQL для добавления данных в таблицы и использование возможностей среды IDE для восстановления таблиц при помощи определений из других баз данных.

Более подробные учебные курсы представлены на следующих ресурсах:

* link:mysql.html[+Подключение к базе данных MySQL+]. Описывается настройка и подключение к базе данных MySQL в IDE NetBeans.
* link:../web/mysql-webapp.html[+Создание простого веб-приложения, использующего базу данных MySQL+]. Демонстрируется способ создания простого веб-приложения, устанавливающего подключение к серверу базы данных MySQL.
* link:http://platform.netbeans.org/tutorials/nbm-crud.html[+Учебный курс по приложению CRUD для платформы NetBeans.+] В этом учебном курсе демонстрируется способ интеграции базы данных Java DB в приложение, работающее на платформе NetBeans.
