Java デスクトップデータベースアプリケーションの構築
このチュートリアルでは、データベースにアクセスして更新できる、デスクトップ Java アプリケーションを作成する方法を示します。このチュートリアルでは、次のテクノロジのための NetBeans IDE のサポートが利用されています。
- Java Persistence API (JPA)。Java コードを使用したデータベースとの対話を可能にします。
- Beans Binding (JSR-295)。さまざまな JavaBeans コンポーネントのプロパティー値を相互に同期できます。たとえば、Beans Binding を使用して、JTable ビジュアルコンポーネント内のセルの値を、エンティティークラス内のフィールドの値と同期できます。このとき、エンティティークラスはデータベース表を表します。
- Swing Application Framework (JSR-296)。デスクトップアプリケーションの迅速な作成に使用できる便利な構成要素が含まれます。
このチュートリアルでは、データベースの CRUD (作成、読み取り、更新、削除) アプリケーションを作成します。データの視覚化 (車のデザインのプレビュー) にはカスタムコンポーネントを使用します。
このチュートリアルは、主に以前のバージョンの IDE の開発ビルドに基づいたスクリーンキャストに基づいています。一部のユーザーインタフェースはこのデモの作成後に変更されているので、このチュートリアルとデモは一部異なる場合があります。今すぐデモを表示 (約 9 分) するか、デモの zip ファイルをダウンロードできます。
予想される所要時間: 45 分
目次
このチュートリアルを完了するには、次の表に示すソフトウェアおよびリソースが必要です。
IDE でデスクトップの CRUD (作成、読み取り、更新、削除) アプリケーションの作成を開始する前に、アプリケーションで使用するデータベースに IDE を接続する必要があります。事前に接続を設定しておくと、データベースをアプリケーションに自動的にバインドする IDE の機能を利用できます。
このチュートリアルでは、Java DB データベースを使用します。これは、IDE から Java DB データベースサーバーの起動や停止ができるインタフェースが用意されているからです。ただし、ほかのデータベースサーバーも簡単に使用できます。
最初に Java DB が IDE に登録されていることを確認します。Java DB は自動的に IDE に登録されている可能性があります。たとえば、IDE に GlassFish アプリケーションサーバーが登録されている場合、または JDK 6 を使用している場合です。Java DB が IDE に登録されていない場合は、手動で登録します。
Java DB が IDE に登録されているかどうかを確認する
- 「サービス」ウィンドウを開きます。
- 「データベース」>「Java DB」ノードを右クリックし、「プロパティー」を選択します。
Java DB が登録されている場合、「Java DB インストール」フィールドと「データベースの場所」フィールドが入力されます。
Java DB が登録されていない場合は、次の 2 つのフィールドに入力します。
- Java DB インストール。データベースサーバーへのパスを入力します。
- データベースの場所。データベースを保存するフォルダを入力します。
- 「閉じる」をクリックします。
Java DB が IDE に登録されたら、簡単にデータベースサーバーを起動または停止したり、新しいデータベースを作成したりできます。
IDE でデータベースサーバーを起動する
サーバーが起動したら、「出力」ウィンドウで「Java DB データベースプロセス」タブが開き、次のようなメッセージが表示されます。
Apache Derby Network Server - 2007-09-05 10:26:25.424 GMT に 10.2.2.0 - (485682) が開始され、ポート 1527 で接続を受け入れる準備ができました。
データベースを作成する
- 「サービス」ウィンドウで、「データベース」>「Java DB」ノードを右クリックし、「データベースを作成」を選択します。
- 「データベース名」テキストフィールドに「car_database」と入力します。またユーザー名とパスワードを「nbuser」に設定します。
- 「閉じる」をクリックします。
ここまでで、データベースサーバーを起動し、データベースを作成できました。この新しいデータベースを IDE で使用するには、このデータベースに接続する必要があります。car_database データベースに接続するには、次の手順に従います。
- 「サービス」ウィンドウに切り替え (Ctrl+5)、「データベース」ノードを展開して新しいデータベースを表示します。
- データベース接続ノード (jdbc:derby://localhost:1527/car_database[nbuser on NBUSER]) を右クリックし、「接続」を選択します。
接続ノードのアイコンがつながって表示され (
)、正常に接続されたことを示します。
- 接続ノードを展開し、「表」サブノードを右クリックし、「コマンドを実行」を選択します。
- car.sql ファイルの内容をコピーし、ソースエディタの「SQL コマンド 1」タブにペーストします。
これは、車に関するデータをデータベースに挿入する SQL スクリプトです。
- ソースエディタのツールバーにある「SQL を実行」ボタン (
) をクリックしてスクリプトを実行します。
- 「ファイル」>「新規プロジェクト」を選択します。
- ウィザードの最初のパネルで「Java」カテゴリを展開し、「Java デスクトップアプリケーション」テンプレートを選択します。「次へ」をクリックします。
「Java デスクトップアプリケーション」テンプレートには、基本的なメニュー項目やコマンドを含む、視覚的なアプリケーションの基本要素が含まれます。
- ウィザードの「名前と場所」ページで、次の操作を行います。
- 「プロジェクト名」フィールドに「CarsApp」と入力します。このフィールドの値は、「プロジェクト」ウィンドウでのプロジェクトの表示名になります。
- 「主プロジェクトとして設定」チェックボックスを選択します。
- (任意) 「プロジェクトの場所」フィールドを編集し、プロジェクトのメタデータの場所を変更します。
- (任意) 「ライブラリの格納用に専用フォルダを使用」チェックボックスを選択し、ライブラリフォルダの場所を指定します。このオプションの詳細は、「プロジェクトライブラリの共有」を参照してください。
- 「アプリケーションシェルを選択」フィールドで「データベースアプリケーション」を選択します。
- 「次へ」をクリックします。
- ウィザードの「マスター表」ページで CAR データベースのデータベース接続を選択します。データベースは jdbc:derby://localhost:1527/car_database[NBUSER の nbuser] のように表示されます。
- データベースのパスワード (nbuser) を入力し、「セッション中はパスワードを保存」チェックボックスを選択します。
データベースへの接続が確率されたら、「データベース表」フィールドに CAR と表示され、「取り込む列」リストに CAR データベースの
10 列の名前が表示されます。現時点では、このうち 5 つだけをアプリケーションで使用します。
- 最後の 5 つの列名 (SUN_ROOF から MODERNNESS まで) を選択し、「<」ボタンをクリックして左側の列に移動します。「次へ」をクリックします。
- 「詳細オプション」パネルで「完了」をクリックします。
ウィザードによって、表とデータベース接続を含む基本のユーザーインタフェースが生成されます。IDE によるプロジェクトとコードの生成には数秒かかる場合があります。
ここまでで、次のグラフィカルユーザーインタフェース (GUI) 機能を備えた基本のアプリケーションが完成しました。
- CAR データベースの 5 つの列の値を表示および変更する機能。
- 基本のメニュー項目。
- セッション間でのウィンドウの状態の維持。アプリケーションを終了するときに、ウィンドウの位置とサイズが記憶されます。したがって、アプリケーションを再び起動したときに、最後にウィンドウを閉じたときと同じ位置にウィンドウが開きます。
- 簡単にカスタマイズできる「About」ダイアログ。
- ユーザーインタフェースのラベルが含まれる .properties ファイル。.properties ファイルを使用すると、コードのロジックと、アプリケーションのユーザーインタフェースに表示するテキストを分離できます。このような分離には、プログラムのローカライズが簡単であるなどの利点があります。
アプリケーションにすでに組み込まれている機能を確認する
- プロジェクトのノードを右クリックし、「実行」を選択します。
数秒後にアプリケーションが起動し、「Database Application Example」というウィンドウが表示されます。このウィンドウには、表と、CARS データベースを編集できるコントロールがいくつか含まれます。
- 表内の最初のレコード (Acura) を選択します。
- 「Price」テキストフィールドを選択し、既存の値を 46999 に置き換えます。次に Enter キーを押します。
表で値が更新されます。ただし、「Save」をクリックするまでデータベースに値は反映されません。
同様に、表内のほかの任意の値を更新できます。
- 新しいレコードを作成するには、「New」をクリックし、各フィールドに値を入力します (Make、Model、Price、Body Style、Color)。たとえば、「Trabant」、「Classic」、「1000」、「wagon」、および「blue」と入力できます。「Save」をクリックしてエントリをデータベースに保存します。
- 「Database Application Example」タイトルバーをクリックし、アプリケーションを画面上の別の場所までドラッグします。
- 「Database Application Example」ウィンドウの左の境界をクリックして左方向にドラッグし、ウィンドウを拡大します。
- 「Database Application Example」のメニューバーで、「File」>「Exit」を選択します。
- IDE でプロジェクトノードを右クリックし、コンテキストメニューから「プロジェクトを実行」を選択します。
「Database Application Example」ウィンドウが、アプリケーションを終了したときと同じ位置に、同じサイズで表示されます。
マスター表 (JTable コンポーネント) とデータベースの接続は、次のメカニズムの組み合わせで処理されます。これらはすべて IDE によって生成されています。
- Car.java エンティティークラス。CAR データベース表のデータの読み取りと書き込みに使用します。エンティティークラスは、Java コードを使用したデータベースとの対話を可能にする特殊な種類のクラスです。エンティティークラスは Java の注釈を使用して、クラスのフィールドをデータベースの列にマッピングします。
- META-INF/persistence.xml ファイル。データベースとエンティティークラスの間の接続を定義します。このファイルは持続性ユニットとも呼ばれます。
- Beans Binding を使用した、エンティティークラスのプロパティーと、JTable コンポーネントのプロパティーの接続。Beans Binding は JSR 295 に基づく新技術であり、Java SE の今後のリリースに含まれる予定です。
- entityManager、query、および list の各オブジェクト。CarsView クラスで定義され、「インスペクタ」ウィンドウに一覧表示されます。
- エンティティーマネージャーオブジェクトは、定義された持続性ユニットの範囲内でのデータの取得とコミットに使用します。
- クエリーオブジェクトは、特定のデータコレクションをエンティティーマネージャーから取得する方法を定義します。クエリーオブジェクトの動作は変更できます。変更するには、「インスペクタ」ウィンドウでクエリーオブジェクトを選択し、プロパティーシートで「query」プロパティーを変更します。「query」プロパティーには JPA クエリー言語を使用します。
- list オブジェクトは、クエリーからのデータを保持する監視可能なコレクションです。監視可能なコレクションは、特殊なコレクションであり、コレクションの変更を検出するリスナーを設定できます。
「インスペクタ」ウィンドウとプロパティーシートを使用して、次の手順で JTable からデータへのバインドを確認できます。
- 「インスペクタ」ウィンドウで「mainPanel[JPanel]」>「masterScrollPane [ScrollPane]」>「masterTable [JTable]」ノードを選択します。次に「プロパティー」ウィンドウで「バインド」タブをクリックします。
- 「elements」プロパティーが list にバインドされていることを確認します。
- 省略符号ボタン (...) をクリックすると、「バインド masterTable.elements」カスタマイザが開き、表とデータベースの間のバインドをさらにカスタマイズできます。たとえば、カスタマイザでは、バインドする表の列を指定できます。
プロパティーシートの「バインド」カテゴリのほかに、コンテキストメニューの「バインド」項目を使用することもできます。
その他のコントロールの追加
ここで、最初に除いた属性用のコントロールをフォームに追加します。表は使用せずに、JSlider コンポーネント (タイヤのサイズと最新性の属性) と JCheckbox コンポーネント (サンルーフとスポイラ) を使用します。
コンポーネントを追加する
- 「パレット」ウィンドウの「スライダ」ボタンをクリックし、フォーム内で「New」ボタンのすぐ上をクリックすることで、最初のスライダを追加します。フォーム内をクリックしてスライダを挿入する前に、横方向に点線のガイドラインが表示されていないことを確認します。この線は、スライダがフィールドやボタンと同じ行に挿入されることを示します。フォーム内でスライダをドロップする位置は、次の図を参照してください。

注: 意図していなかった位置にコンポーネントをドロップし、その結果、レイアウトが変更された場合は、「元に戻す」コマンドを使用して変更を取り消すことができます。「編集」>「元に戻す」を選択するか、Ctrl-Z キーを押します。
- 必要な場合は、スライダを左方向に伸ばし、テキストフィールドコンポーネントの左端に合わせます。
- スライダを右方向に、フォームの端まで伸ばします。
- スライダの左側にラベルを追加し、そのテキストを「Tire Size」に設定します。ラベルを編集するにはクリックします。
- 最初のスライダの下にさらに別のスライダを追加し、必要に応じてその幅と配置を調整します。
- 「Tire Size」ラベルの下にさらにラベルを追加し、テキストを「Modernness」に設定します。
- スライダの下にチェックボックスを 2 つ追加します。そのテキストを「Spoiler」と「Sun Roof」に設定します。表示テキストを編集するには、チェックボックスを 1 回クリックし、しばらくしてからもう一度チェックボックスをクリックします。チェックボックスを右クリックして「テキストを編集」を選択することもできます。
フォームは次のスクリーンショットのようになります。
ここで、Beans Binding 機能を使用して表のセルに表示されている値を、追加したコントロールの状態に関連付けます。このようにすると、スライダやチェックボックスを使用して表内のセルの値を変更できるようになります。
スライダを、対応する表要素にバインドする
- フォーム内で「Tire Size」スライダを右クリックし、「バインド」>「value」を選択します。
- 「バインド」ダイアログの「ソースをバインド」ドロップダウンリストで「masterTable」を選択します。
- 「式をバインド」ドロップダウンリストで「selectedElement」>「tiresize」ノードを選択します。

- フォーム内で「Modernness」スライダを右クリックし、「バインド」>「value」を選択します。
- 「バインド」ダイアログの「ソースをバインド」ドロップダウンリストで「masterTable」を選択します。
- 「式をバインド」ドロップダウンリストで「selectedElement」>「modernness」を選択します。
チェックボックスを、対応する表要素にバインドする
- フォーム内で「Spoiler」チェックボックスを右クリックし、「バインド」>「selected」を選択します。
- 「バインド」ダイアログの「ソースをバインド」ドロップダウンリストで「masterTable」を選択します。
- 「式をバインド」ドロップダウンリストで「selectedElement」>「spoiler」を選択します。
- 「了解」をクリックして「バインド」ダイアログを終了します。
- フォーム内で「Sun Roof」チェックボックスを右クリックし、「バインド」>「selected」を選択します。
- 「バインド」ダイアログの「ソースをバインド」ドロップダウンリストで「masterTable」を選択します。
- 「式をバインド」ドロップダウンリストで「selectedRow」>「sunRoof」を選択します。
- 「閉じる」をクリックします。
これで、スライダとチェックボックスを使用してデータベースのエントリを変更できるようになります。
スライダとチェックボックスが機能することを確認する
- 「サービス」ウィンドウを開きます。
- 「データベース」>「jdbc:derby;//localhost:1527/car_database」を右クリックして「接続」を選択し、IDE をデータベースに接続します。
- 「データベース」>「jdbc:derby;//localhost:1527/car_database」>「表」> ノードを右クリックし、「データを表示」を選択します。
- 最初のレコードの SUN_ROOF、SPOILER、TIRE_SIZE、および MODERNNESS の値を確認します。
- 「実行」>「主プロジェクトを実行」を選択して、アプリケーションを実行します。
実行中のアプリケーションは次のスクリーンショットのようになります。
- 実行中のアプリケーションで、最初のレコードを選択します。
- スライダを動かし、チェックボックスの選択を変更します。
- 「Save」をクリックして変更内容をデータベースに保存します。
- 「サービス」ウィンドウで、「データを表示」コマンドをまた使用します。
データベース内のデータに変更内容が反映されているはずです。
Beans Binding のよりグラフィカルなデモとして、選択した車のプレビューを表示するカスタムコンポーネントを追加します。このコンポーネントのプロパティーを、対応する表要素にバインドします。すると、アプリケーションを再び実行したときに、選択した行を変更し、各フィールドの値を変更すると、車のプレビューが変更されます。
CarPreview コンポーネントを CarsApp プロジェクトで使用可能にする
- CarPreview.zip ファイルをまだダウンロードしていない場合はダウンロードします。
- 標準の zip ツールを使用して zip ファイルのアーカイブを展開します。
- 「ファイル」>「プロジェクトを開く」を選択し、zip ファイルから展開した内容の中から CarPreview プロジェクトを選択します。
- 「プロジェクトを開く」をクリックします。
IDE でプロジェクトが開きます。
- 「CarPreview」ノードを右クリックし、「生成物を削除して構築」を選択します。
プロジェクト内のファイルがコンパイルされ、CarPreview クラスを Bean として使用し、フォームに直接ドラッグ&ドロップできるようになります。
このコンポーネントは JavaBeans コンポーネントとして作成されているので、パレットに追加することもできます。コンポーネントを複数のアプリケーションに追加する場合はパレットへの追加が便利です。このチュートリアルでは、「プロジェクト」ウィンドウからコンポーネントをアプリケーションに直接ドラッグします。
CarPreview コンポーネントをアプリケーションに追加する
- 「プロジェクト」ウィンドウで「Car Preview」>「ソースパッケージ」>「carpreview」ノードを展開します。
- CarPreview.java クラスをフォームまでドラッグします。メニューのすぐ下の適切な位置に挿入するには、次の図に示すように、ほかのコントロールと左揃えでテーブルの上に重ね、メニューバーの下端にスナップして配置します。

- プレビューコンポーネントの幅をフォームの端まで広げます。
- スライダとチェックボックスを masterTable コンポーネントの要素にバインドしたのと同じ方法で、CarPreview コンポーネントのすべてのバインドプロパティーを masterTable の対応する selectedElement 属性にバインドします。「バインド」ポップアップメニューまたはプロパティーシートの「バインド」タブを使用します。
- CarApp アプリケーションを再び実行します。
実行中のアプリケーションで、表内で別の行を選択したり、表内の値を変更したり、スライダを動かしたり、チェックボックスの選択と選択解除を切り替えたりすると CarPreview コンポーネントが変化することを確認できます。
次の画像は、最終的なアプリケーションを実行しているところを示します。
アプリケーションが正しく動作することを確認したら、そのアプリケーションを IDE の外部に配備する準備ができます。この節では、アプリケーションの配布可能な出力を構築し、IDE の外部からアプリケーションを実行します。
アプリケーションの構築
IDE の主な構築コマンドは、生成物を削除して構築コマンドです。生成物を削除して構築コマンドは、以前にコンパイルされたクラスとその他の構築アーティファクトを削除し、プロジェクト全体を最初から再構築します。
注: 古い構築アーティファクトを削除しない構築コマンドもありますが、このコマンドはデフォルトで無効になっています。詳細については、「Java プロジェクトの作成、インポート、および構成」の「保存時にコンパイル」節を参照してください。
アプリケーションを構築する
- 「実行」>「主プロジェクトの生成物を削除して構築」(Shift-F11) を選択します。
Ant 構築スクリプトの出力が、「出力」ウィンドウに表示されます。「出力」ウィンドウが表示されない場合、「ウィンドウ」>「出力」>「出力」を選択し、手動で開くことができます。
プロジェクトの生成物を削除して構築した場合、次のことが発生します。
- 以前の構築アクションで生成された出力フォルダが削除 (「消去」) されますほとんどの場合、
build フォルダおよび dist フォルダです。
build フォルダおよび dist フォルダは、プロジェクトフォルダ (以後 PROJECT_HOME フォルダと呼ぶ) に追加されます。
- すべてのソースは、PROJECT_HOME
/build フォルダにある .class ファイルにコンパイルされます。
- プロジェクトが含まれた JAR ファイルが
PROJECT_HOME/dist フォルダ内に作成されます。
- プロジェクトのライブラリを指定した場合 (JDK に加えて)、
dist フォルダに lib フォルダが作成されます。ライブラリが dist/lib にコピーされます。
- JAR にあるマニフェストファイルが更新され、プロジェクトのクラスパスにある主クラスとライブラリを指定するエントリが含まれます。
IDE の外部でのアプリケーションの実行
IDE の外部でアプリケーションを実行する
- IDE の外部で Java DB を起動します。http://db.apache.org/derby/docs/dev/getstart/ を参照してください。
注: IDE の内部から Java DB を起動することもできますが、IDE を終了するとサーバーは停止します。
- システムのファイルエクスプローラまたはファイルマネージャーを使用し、
CarsApp/dist ディレクトリに移動します。
CarsApp.jar ファイルをダブルクリックします。
数秒後、アプリケーションが起動するはずです。
注: JAR ファイルをダブルクリックしてもアプリケーションが起動しない場合、使用しているオペレーティングシステムに対応する JAR ファイルの設定に関する情報をこの記事で確認してください。
アプリケーションは、コマンド行からも起動できます。
コマンド行からアプリケーションを起動する
- IDE の外部で Java DB を起動します。
- システムで、コマンドプロンプトまたはターミナルウィンドウを開きます。
- コマンドプロンプトで、ディレクトリを
CarsApp/dist ディレクトリに変更します。
- コマンド行に、次の文を入力します。
java -jar CarsApp.jar
アプリケーションのほかのユーザーへの配布
IDE の外部でアプリケーションが動作することを確認したので、アプリケーションを配布する準備ができました。
アプリケーションを配布する
- システムで、アプリケーション JAR ファイル (
CarsApp.jar) とそれに付随する lib を含む ZIP ファイルを作成します。これには、アプリケーションが必要とするほかの JAR ファイルが含まれています。
- このアプリケーションを使用する人に、ファイルを送信します。ZIP ファイルを展開するよう指示し、
CarsApp.jar ファイルおよび lib フォルダが同じフォルダにあることを確認します。
- ユーザーに、前述の「IDE の外部でのアプリケーションの実行」の手順に従うように指示します。
次の手順
このチュートリアルでは、IDE での Swing Application Framework と Beans Binding のサポートの概要を示しました。
Swing アプリケーションの持続性レイヤーの Hibernate の使用に関する詳細については、「Java Swing アプリケーションでの Hibernate の使用」を参照してください。
GUI アプリケーションのデザインの詳細については、Swing GUI のデザインを参照してください。
IDE での Beans Binding の使用の詳細については、デスクトップアプリケーションでの Beans とデータのバインドを参照してください。
関連項目