// 
//     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)データベースの操作

このドキュメントでは、NetBeans IDEでlink:http://www.oracle.com/technetwork/java/javadb/overview/index.html[+Java DB+]データベースへの接続を設定する方法を紹介します。いったん接続が作成されると、IDEでデータベースの操作を開始することができ、表の作成、表へのデータの生成、およびSQL文や問合せの実行が可能になります。

Java DBデータベースは、Sunがサポートするlink:http://db.apache.org/derby/[+Apache Derby+]のディストリビューションです。Java DBは、完全なトランザクション型で、規格に準拠し、保護されたデータベース・サーバーです。すべてJavaで記述されており、SQL、JDBC APIおよび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="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます"]


*このチュートリアルに従うには、次のソフトウェアとリソースが必要です。*

|===
|ソフトウェアまたはリソース |必須バージョン 

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

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |バージョン7または8 

|Java DB |バージョン10.4.x、10.5.x 
|===

*注意:*

* JDK 7またはJDK 8をインストールすると、Java DBがインストールされます(Mac OS Xの場合を除く)。Mac OS Xを使用する場合、link:http://www.oracle.com/technetwork/java/javadb/downloads/index.html[+Java DB+]を手動でダウンロードしてインストールするか、NetBeans IDEインストーラのJava EEバージョンによってインストールされるJava DBを使用できます。


== データベースの構成

NetBeans IDEのインストールでGlassFish Serverを登録した場合、Java DBはすでに登録されています。このため、<<starting,サーバーの起動とデータベースの作成>>に進むことができます。

GlassFishサーバーを別途ダウンロードしていて、NetBeans IDEへの登録方法が不明な場合は、IDEのヘルプ目次(F1)にある*GlassFish Serverインスタンスの登録*を参照してください。

Java DBを単独でダウンロードした場合は、次の手順を実行します。

1. 自己抽出型のファイルを実行します。このファイルと同じ場所に「javadb」というフォルダが作成されます。Java DBをダウンロードし、抽出先とは異なる場所にデータベース・サーバーを置く場合は、ここで場所を変更します。
2. システム上で、データベース・サーバーの個々のインスタンスのホーム・ディレクトリとして使用する新しいディレクトリを作成します。たとえば、このフォルダをJava DBルート・ディレクトリ(javadb)などのその他の場所に作成できます。

次に進む前に、Java DBのルート・ディレクトリにあるコンポーネントについて理解しておく必要があります。

*  ``demo`` サブディレクトリには、すべてのデモ・プログラムが含まれています。
*  ``bin`` サブディレクトリには、ユーティリティの実行や環境設定用のスクリプトが含まれています。
*  ``javadoc`` サブディレクトリには、ソース・コードのコメントから生成されたAPIのドキュメントが含まれています。
*  ``docs`` サブディレクトリには、Java DBのドキュメントが含まれています。
*  ``lib`` サブディレクトリには、Java DB jarファイルが含まれています。


== NetBeans IDEへのデータベースの登録

データベースが構成されたので、次の手順を実行して、Java DBをIDEに登録します。

1. 「サービス」ウィンドウで、「Java DBデータベース」ノードを右クリックし、「プロパティ」を選択して、Java DB設定ダイアログ・ボックスを開きます。
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[]


. 「Java DB」ノードを右クリックし、「データベースを作成」を選択して、「Java DBデータベースを作成」ダイアログを開きます。
. 「データベース名」に「 ``contact`` 」と入力します。
. 「ユーザー名」および「パスワード」に「 ``nbuser`` 」と入力します。「OK」をクリックします。

image::images/javadb-createdb.png[]

*注意:*「データベースの場所」は、GlassFishからのJava DBのインストール中に設定したデフォルトの場所です。Java DBを別途インストールした場合は、この場所が異なることがあります。

データベースの作成後、「サービス」ウィンドウで「データベース」ノードを展開すると、IDEによってデータベース接続が作成されて、そのデータベースが「Java DB」ノードの下に追加されたことを確認できます。


== データベースへの接続

ここまでで、データベース・サーバーを起動させ、 ``contact`` というデータベース・インスタンスをIDEに作成することに成功しました。IDEの「サービス」ウィンドウで、データベース構造に対して次の一般的なタスクを実行できます。

* 表の作成、削除、変更
* 表へのデータの生成
* 表形式のデータの表示
* SQL文と問合せの実行

 ``contact`` データベースの操作を始めるには、そのデータベースへの接続を作成する必要があります。 ``contact`` データベースに接続するには:

1. 「サービス」ウィンドウで「データベース」ノードを展開し、新しいデータベース・ノードとデータベース接続ノードを検索します。

データベース接続ノード(image:images/connection-node-icon.png[])は、「データベース」ノードの下に表示されます。データベースの名前は、「Java DB」ノードの下に表示されます。

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

*注意:*デフォルトのデータベース・スキーマである`sample [app on APP]`データベース接続を表示することもできます。


. *contact*データベース接続ノード( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` )を右クリックし、「接続」を選択します。

接続ノード・アイコン全体(image:images/connection-node-icon.png[])が表示され、これは接続が成功したことを示します。


. データベース接続ノード( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` )を右クリックし、「名前変更」を選択して、データベースのわかりやすい表示名を作成します。テキスト・フィールドに「 ``Contact DB`` 」と入力し、「OK」をクリックします。


== 表の作成

作成した ``contact`` データベースは現在空です。まだ表やデータは含まれていません。NetBeans IDEでは、「表を作成」ダイアログを使用するか、SQL文を入力してSQLエディタから直接実行することで、データベースに表を追加できます。次の両方の方法について学習できます。

* <<createTable,「表を作成」ダイアログの使用>>
* <<sqlEditor,SQLエディタの使用>>


=== 「表を作成」ダイアログの使用

1.  ``Contact DB`` 接続ノードを展開すると、複数のスキーマ・サブノードがあることがわかります。appスキーマは、このチュートリアルに適用する唯一のスキーマです。「APP」ノードを右クリックし、「デフォルトのスキーマとして設定」を選択します。
2. 「APP」ノードを展開します。「表」、「ビュー」、「プロシージャ」の3つのサブフォルダがあります。「表」ノードを右クリックして「表を作成」を選択し、「表を作成」ダイアログ・ボックスを開きます。
3. 「表名」テキスト・フィールドに「 ``FRIENDS`` 」と入力します。
4. 「列を追加」をクリックします。「列を追加」ダイアログ・ボックスが表示されます。
5. 「列名」に「 ``id`` 」と入力します。「データ型」のドロップダウン・リストから「 ``INTEGER`` 」を選択します。
6. 「制約」で「主キー」チェックボックスを選択して、この列が表の主キーであることを指定します。リレーショナル・データベースにあるすべての表に、主キーを含める必要があります。「主キー」チェックボックスを選択すると、「索引」および「一意」チェックボックスが自動的に選択され、「Null」チェックボックスが選択解除されます。これは、主キーを使用してデータベース内の行を一意に識別するためです。デフォルトでは、主キーは表の索引として使用されます。すべての行が識別される必要があるため、主キーに ``Null`` 値を含むことはできません。

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


. この手順を繰り返し、次の表に示すようにフィールドを指定します。

|===

|キー |索引 |Null |一意 |列名 |データ型 |サイズ 

|[選択] |[選択] |[選択] |id |INTEGER |0 

|[選択] |firstName |VARCHAR |20 

|[選択] |lastName |VARCHAR |20 

|[選択] |nickName |VARCHAR |30 

|[選択] |friendSince |DATE |0 

|[選択] |email |VARCHAR |60 
|===

作成中の ``FRIENDS`` という表は、連絡先レコードごとに次のデータを保持します。

* *名*
* *姓*
* *ニックネーム*
* *知り合った日付*
* *電子メール・アドレス*

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


. 「表を作成」ダイアログが上に示す指定と同じになっていることを確認したら、「OK」をクリックします。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エディタで作成した文および問合せは、SQL (Structured Query Language)で構文解析されます。SQLは厳密な構文ルールに準拠しています。IDEのエディタで作業をするときは、これらのルールを理解しておいてください。SQL構文はまた、データベース管理システムによって異なることがあります。具体的なガイドラインについては、link:http://www.oracle.com/technetwork/java/javadb/documentation/index.html[+Java DB Reference Manual+]を参照してください。


. エディタ([Ctrl]-[Shift]-[E])の上部にあるタスク・バーの「SQLの実行」(image::images/run-sql-button.png[])ボタンをクリックし、問合せを実行します。「出力」ウィンドウ([Ctrl]-[4])に、文の実行に成功したことを示すメッセージが表示されます。

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

. 変更内容を確認するには、「サービス」ウィンドウで「 ``Contact DB`` 」接続ノードを右クリックし、「リフレッシュ」を選択します。これで、指定したデータベースの現在のステータスにあわせて実行時UIコンポーネントが更新されます。NetBeans IDEでSQLエディタから問合せを実行するときは、このステップが必要です。「サービス」ウィンドウの「表」の下に、新しいCOLLEAGUES表ノード(image::images/table-node.png[])が表示されていることに注意してください。


== 表へのデータの追加

 ``contact`` データベースに1つ以上の表を作成したので、表へのデータの生成を開始できます。表にレコードを追加するには、いくつかの方法があります。

* SQLエディタに<<sqlstatement,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エディタのコード補完を使用できます。


. SQLエディタ内を右クリックし、「文を実行」を選択します。「出力」ウィンドウに、文の実行に成功したことを示すメッセージが表示されます。
.  ``FRIENDS`` 表に新しいレコードが追加されたことを確認するには、「サービス」ウィンドウで「 ``FRIENDS`` 」表ノードを右クリックし、「データを表示」を選択します。

「データを表示」を選択すると、表からすべてのデータを選択する問合せがSQLエディタの上部ペインに自動的に生成されます。文の結果は、SQLエディタの下部ペインに表示されます。この場合、 ``FRIENDS`` 表は下部ペインに表示されます。SQL文から供給されたデータを使用して、新しい行が追加されています。

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


=== SQLエディタの使用

1. 「 ``FRIENDS`` 」表ノードを右クリックして、「データを表示」を選択します(前の項の最後のステップで実行しなかった場合)。
2. 「レコードを挿入( ``Alt+I`` )」ボタンをクリックして、行を追加します。
「レコードを挿入」ダイアログ・ボックスが表示されます。

[start=3]
. 各セルでクリックして、レコードを入力します。Dateデータ型のセルでは、カレンダから日付を選択できます。完了したら、「OK」をクリックします。

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

SQLエディタでは、行のヘッダーをクリックして結果をソートしたり、既存のレコードを変更および削除したり、(ポップアップ・メニューの「SQLスクリプトを表示」コマンドで)エディタで実行しているアクションのSQLスクリプトを表示したりできます。


== 表の削除

次の手順では、外部SQLスクリプトを使用して、新しい ``COLLEAGUES`` 表を作成します。しかし、 ``COLLEAGUES`` 表は前述の<<sqlEditor,SQLエディタの使用>>の項で作成したばかりです。SQLスクリプトによって本当に新しい表が作成されることが明確にわかるように、ここでは、すでに作成した ``COLLEAGUES`` 表を削除します。データベース表を削除するには:

1. 「サービス」ウィンドウのデータベース接続ノードの下にある「表」ノードを展開します。
2. 削除する表を右クリックして「削除」を選択します。


== 外部SQLスクリプトの使用

外部SQLスクリプトからコマンドを発行するのは、データベースを管理するのに一般的な方法です。他の場所でSQLスクリプトをすでに作成している場合、そのスクリプトをNetBeans IDEにインポートし、指定したデータベースに対して実行します。

この課題では、スクリプトで ``COLLEAGUES`` という名前の新しい表を作成してその表にデータを移入します。 ``contact`` データベースに対してこのスクリプトを実行するには、次の手順を実行します。

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エディタを開いてその中にファイルの内容を貼り付けます。


. エディタの最上部のツールバーにある「接続」ドロップダウン・ボックスで ``Contact DB`` への接続が選択されていることを確認します。

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


. SQLエディタのタスク・バーにある「SQLの実行」(image::images/run-sql-button.png[])ボタンをクリックします。選択したデータベースに対してスクリプトが実行され、「出力」ウィンドウにフィード・バックが生成されます。
. 変更内容を確認するには、「サービス」ウィンドウで「 ``Contact DB`` 」接続ノードを右クリックし、「リフレッシュ」を選択します。SQLスクリプトからの新しい ``COLLEAGUES`` 表が、「サービス」ウィンドウの「 ``contact`` 」の下に表ノードとして表示されます。
. 新しい表に含まれているデータを表示するには、 ``COLLEAGUES`` 表を右クリックして「データを表示」を選択します。このように、表形式のデータとSQLスクリプトに含まれるデータとを比較して、一致しているかどうかを確認することもできます。


== 異なるデータベースの表の再作成

異なるデータベースにある表を、NetBeans IDEから操作中のデータベースで再作成したい場合、IDEには便利なツールが用意されています。まず、このチュートリアルの最初に説明したものに似た2つ目のデータベースがIDEに登録されている必要があります。このチュートリアルの目的で、Java DBにパッケージされている ``sample`` データベースを使用します。このプロセスは基本的に2つの段階に分けて実行されます。まず、選択した表の表定義を「保存」し、その後選択したデータベースに表を再作成できます。

1. 「サービス」ウィンドウの「データベース」ノードの下にある接続ノードを右クリックして、「接続」を選択し(ユーザー名とパスワードは ``app`` )、 ``sample`` データベースに接続します。
2.  ``sample`` データベース接続の下にある「表」ノードを展開し、 ``CUSTOMER`` 表ノードを右クリックして「構造を保存」を選択します。

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


. 開いた「表を保存」ダイアログで、作成される保存(grab)ファイルを保存するコンピュータの場所を指定します。「保存」をクリックします。

保存ファイルには、選択した表の表定義が記録されます。


.  ``Contact DB`` データベース接続の下にある「APP」スキーマ・ノードを展開し、「表」ノードを右クリックして「表を再作成」を選択し、「表を再作成」ダイアログ・ボックスを開きます。
.  「表を再作成」ダイアログ・ボックスで、 ``CUSTOMER`` 保存ファイルを保存した場所に移動して「開く」をクリックし、「表に名前を付ける」ダイアログ・ボックスを開きます。

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


.  ここで表の名前を変更したり、表定義を編集したりできます。そうしない場合、「OK」をクリックすると、 ``contact`` データベースにすぐに表が作成されます。「 ``Contact DB`` 」接続ノードの下に「 ``CUSTOMER`` 」表ノードが新しく表示されます。

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

新しい ``CUSTOMER`` 表にデータを表示するとデータベースにレコードが表示されませんが、表の構造は保存した表と同一です。

link:/about/contact_form.html?to=3&subject=Feedback:%20Working%20With%20Java%20DB[+ご意見をお寄せください+]

== 関連項目

これで、Java DB (Derby)データベースの操作のチュートリアルは終わりです。このチュートリアルでは、NetBeans IDEでJava DBデータベースへの接続を設定する方法を紹介しました。次に、IDEの「サービス」ウィンドウの表を作成、表示、変更および削除する方法を紹介しました。SQLエディタを操作して表にデータを追加する方法や、他のデータベースの定義を使用して表を再作成するIDEの機能の使用方法も示しました。

関連するチュートリアルおよびさらに高度なチュートリアルについては、次のリソースを参照してください。

* link:mysql.html[+MySQLデータベースへの接続+]。NetBeans IDEでMySQLデータベースを構成し、接続する方法を示します。
* link:../web/mysql-webapp.html[+MySQLデータベースを使用した単純なWebアプリケーションの作成+]。MySQLデータベース・サーバーに接続する単純なWebアプリケーションを作成する方法を示します。
* link:http://platform.netbeans.org/tutorials/nbm-crud.html[+NetBeansプラットフォームCRUDアプリケーションのチュートリアル+] Java DBデータベースをNetBeansプラットフォーム・アプリケーションに統合する方法を示します。
