NetBeans IDEからのOracleデータベースへの接続

This tutorial needs a review. You can open a JIRA issue, or edit it in GitHub following these contribution guidelines.

NetBeans IDEには、Oracleデータベースのサポートが組み込まれています。IDE内から簡単に接続を確立してデータベースの操作を開始できます。このチュートリアルでは、無償で開発、デプロイおよび配布できる小規模なデータベースであるOracle Database 10_g_ Express Edition (Oracle Database XE)のローカル・インストールの使用方法を説明します。

このドキュメントでは、NetBeans IDEからOracle Database XEのローカル・インストールへの接続の設定、IDEの組込みのSQLエディタを使用したデータベース・データの処理、およびOCI 8 PHP拡張を有効にして、Oracleデータベースに接続するPHPコードを記述する方法について説明します。

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

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

NetBeans IDE

7.2、7.3、7.4、8.0、Java EEバンドル版

Java Development Kit (JDK)

バージョン7または8

Oracle Database XE

10 g Express Edition

Oracle JDBCドライバ

ojdbc6.jar

始める前に

このチュートリアルを始める前に、次を考慮してください。

  • このチュートリアルでは、ローカル・システムにインストールされているOracle Database XEインスタンスに接続する方法を説明しますが、その手順は、リモート・インスタンスに接続する場合にも適用できます。ローカル・インスタンスに接続する場合、Oracle Database XEをダウンロードして、インストールする必要があります。インストール・プロセスは単純で直観的ですが、質問がある場合は、使用しているプラットフォームのOracle Database XEインストレーション・ガイドを参照してください。

  • Oracle JDBCドライバには、OCIとJDBC Thinの2つのカテゴリがあります。

  • OracleのJDBC Thinドライバは、Javaに基づいており、プラットフォームから独立しています。このスタンドアロン・ドライバは他のOracleライブラリの存在を必要とせず、Oracleデータベースに直接接続できます。このチュートリアルでは、このドライバを使用して、Oracleデータベースへの接続方法を説明します。チュートリアルを進める前に、 ojdbc6.jar ファイルをダウンロードしてシステムに保存する必要があります。

Windowsユーザーに対する注意: Windowsでは、ダウンロード・ファイルの拡張子が.jarから.zipに変わることがあります。ただし、それは.jarファイルのままです。ファイルの名前を.jarに変更できます。

  • OracleのOCIドライバは、Oracleのネイティブ・クライアント・ライブラリを使用してデータベースと通信します。これらのライブラリは、Oracle Instant Clientの一部として取得します。ほとんどの場合はThinドライバで十分ですが、NetBeans IDEでのOCI JDBCドライバの使用の手順に従って、OCIドライバを使用する必要がある場合もあります。 OCIドライバの使用のよい例は、Oracle Instant Clientライブラリを使用して、PHPアプリケーションからリモートOracleデータベースにアクセスすることです。PHP用にOCI 8拡張を有効にする方法については、このチュートリアルのOCI 8およびPHP向けのNetBeans IDEの項を参照してください。

  • これまでOracle Database XEを使用したことがない場合、Oracle Database XE入門チュートリアルを実行してください。

GlassFishユーザーに対する警告: データベースの管理に使用するOracle Database XEホーム・ページでは、デフォルトでポート8080を使用します。Oracle GlassFishアプリケーション・サーバーもデフォルトでポート8080を使用します。両方のプログラムを同時に実行すると、Oracle Database XEは、ブラウザがlocalhost:8080でGlassFishにアクセスしないようにブロックします。この場合、GlassFishにデプロイされたすべてのアプリケーションが404を返します。単純な解決方法は、GlassFishを実行する場合に、Oracle Database XEが必要なければ、それを停止することです。同時に両方を実行する必要がある場合は、Oracle Database XEが使用するデフォルトのポートを変更します。これは、GlassFishのデフォルトのポートを変更するよりも簡単です。Oracle Database XEのデフォルトのポートの変更についての手順は、Oracleフォーラムのものを含めて、インターネット上に多く掲載されています。

Oracleデータベースへの接続の確立

この課題では、データベースへの新しい接続をテストし、作成します。

  1. Oracleデータベースを起動します。

  2. 「サービス」ウィンドウ(「ウィンドウ」>「サービス」またはCtrl-5、Macの場合は⌘-5)を開きます。「サービス」ウィンドウで、「データベース」ノードを右クリックし、「新規接続」を選択します。

new connection
  1. 新規接続ウィザードで、「ドライバ」ドロップダウン・リストの「Oracle Thin」を選択します。

  2. 「追加」をクリックし、前にダウンロードした ojdbc6.jar ファイルを見つけます。「次」をクリックします。

  3. ウィザードの「接続をカスタマイズ」パネルで、次の値を入力して、「次」をクリックします。

名前

ドライバ名

Oracle Thin (サービスID (SID))

ホスト

localhost または127.0.0.1 注意: リモート接続の場合、データベースがインストールされているマシンのIPアドレスまたは解決可能なホスト名を指定します。

ポート

1521 (デフォルト)

サービスID (SID)

XE (Oracle Database XEのデフォルトのSID) 注意: リモート・データベースに接続する場合、データベース管理者に、データベースSIDの提供を依頼します。

ユーザー名

ユーザー名を入力してください。 チュートリアルの目的のため、「 system 」(デフォルトのデータベース管理者アカウント)と、データベースのインストール時に使用したパスワードを入力します。

パスワード

選択したユーザー名のパスワードを入力します。

  1. 「接続をテスト」をクリックし、IDEがデータベースに接続できることを確認します。「次」をクリックします。

成功した場合、ウィザードにメッセージ「接続に成功しました」が表示されます。

customize conn
  1. 「スキーマを選択」ドロップダウン・リストの「 HR 」を選択します。「終了」をクリックします。

NetBeansでHRスキーマにアクセスする前に、それをロック解除する必要があります。HRデータベースのロック解除については、Oracle Database XE入門チュートリアルで説明されています。

「サービス」ウィンドウの「データベース」ノードの下に新しい接続が表示されます。それを展開し、データベース・オブジェクトの構造の参照を開始できます。 接続ノードの表示名を変更します。ノードのポップアップ・メニューから「プロパティ」を選択し、「表示名」プロパティの省略符号ボタンをクリックします。「表示名」として「OracleDB」と入力し、「OK」をクリックします。

connection
前述の手順では、ローカル・データベース・インスタンスに接続する場合について説明していますが、リモート・データベースに接続する場合の手順も同じです。唯一の違いは、ホスト名として localhost を指定するかわりに、Oracleデータベースがインストールされているリモート・マシンのIPアドレスまたはホスト名を入力することです。

Oracleデータベースのデータの操作

データベースと対話する一般的な方法は、SQLエディタまたはデータベース管理インタフェースを使用して、SQLコマンドを実行することです。たとえば、Oracle Database XEにはブラウザ・ベースのインタフェースがあり、データベースの管理、データベース・オブジェクトの管理、およびデータの操作を行うことができます。

Oracleデータベース管理インタフェースから、ほとんどのデータベース関連タスクを実行できますが、このチュートリアルでは、NetBeans IDEでSQLエディタを使用して、これらのタスクの一部を実行する方法を説明します。次の課題では、新しいユーザーを作成し、表をすばやく再作成して、表データをコピーする方法を説明します。

ユーザーの作成

新しいデータベース・ユーザー・アカウントを作成して、データベースの表とデータを操作します。新規ユーザーを作成するには、データベース管理者アカウント、この例では、データベースのインストール時に作成したデフォルトの system アカウントでログインする必要があります。

  1. 「サービス」ウィンドウで、OracleDB接続ノードを右クリックし、「コマンドの実行」を選択します。これにより、NetBeans IDEのSQLエディタが開き、データベースに送信するSQLコマンドを入力できます。

execute
  1. 新しいユーザーを作成するには、SQLエディタ・ウィンドウで次のコマンドを入力し、ツールバーの「SQLの実行」ボタンをクリックします。

create user
create user jim identified by mypassword default tablespace users temporary tablespace temp quota unlimited on users;

このコマンドは、新規ユーザー jim をパスワード mypassword で作成します。デフォルトの表領域は users で、割り当てられる領域は無制限です。

  1. 次のステップは、 jim ユーザー・アカウントに、データベースのアクションを実行する権限を与えることです。ユーザーがデータベースに接続し、ユーザーのデフォルトの表領域で表を作成して変更し、サンプル hr データベースの Employees 表にアクセスできるようにする必要があります。

実際には、データベース管理者がカスタム・ロールを作成し、各ロールの権限を微調整します。ただし、チュートリアルの目的のため、 CONNECT などの定義済のロールを使用できます。ロールと権限の詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。

grant connect to jim;
grant create table to jim;
grant select on hr.departments to jim;

Oracleデータベースの表領域

表領域は、Oracleデータベースの論理データベース記憶域単位です。実際に、データベースのすべてのデータが表領域に保存されます。割り当てられた表領域内に表を作成します。デフォルトの表領域が明示的にユーザーに割り当てられていない場合、システムの表領域がデフォルトで使用されます(この状況は避けたほうが得策です)

表領域の概念の詳細は、Oracle FAQ: 表領域を参照してください。

表の作成

NetBeans IDEからデータベースに表を作成する方法は複数あります。たとえば、SQLファイルを実行する(ファイルを右クリックし、「ファイルを実行」を選択)、SQLコマンドを実行する(接続ノードを右クリックし、「コマンドの実行」を選択)、または「表を作成」ダイアログ・ボックスを使用する(「表」ノードを右クリックし、「表を作成」を選択)ことができます。この課題では、別の表の構造を使用して、表を再作成します。

この例では、ユーザー jim で、 hr データベースから表を再作成して、そのスキーマに Departments 表のコピーを作成します。表を作成する前に、サーバーから切断し、ユーザー jim としてログインする必要があります。

  1. 「サービス」ウィンドウで OracleDB 接続ノードを右クリックし、「切断」を選択します。

  2. OracleDB 」接続ノードを右クリックし、「接続」を選択して、 jim としてログインします。

  3. HRスキーマの下の「表」ノードを展開し、ユーザー jim から Departments 表にのみアクセスできることを確認します。

ユーザー jim の作成時に、選択権限が Departments 表にのみ制限されています。

hr view
  1. Departments 」表ノードを右クリックし、「構造を保存」を選択します。ディスクに .grab ファイルを保存します。

  2. JIM スキーマを展開し、「 」ノードを右クリックして、「表を再作成」を選択します。 作成した .grab ファイルをポイントします。

recreate
  1. 表の作成に使用するSQLスクリプトを確認します。「OK」をクリックします。

nametable

「OK」をクリックすると、新しい DEPARTMENTS 表が作成され、 JIM スキーマ・ノードの下に表示されます。表ノードを右クリックし、「データを表示」を選択すると、表が空であることがわかります。

元の Departments 表から新しい表にデータをコピーする場合、表エディタでデータを手動で入力するか、新しい表に対してSQLスクリプトを実行して、表に入力できます。

データを手動で入力するには、次の手順を実行します。

  1. JIM スキーマの下の DEPARTMENTS 表を右クリックし、「データを表示」を選択します。

  2. 「データを表示」ツールバーの「レコードを挿入」アイコンをクリックし、「レコードを挿入」ウィンドウを開きます。

insert rec
  1. フィールドにデータを入力します。「OK」をクリックします。

たとえば、元の DEPARTMENTS 表から取得した次の値を入力できます。

DEPARTMENT_ID

10

DEPARTMENT_NAME

Administration

MANAGER_ID

200

LOCATION_ID

1700

SQLスクリプトを使用して表に入力するには、次の手順を実行します。

  1. JIM スキーマの下の DEPARTMENT 表を右クリックして、「コマンドの実行」を選択します。

  2. 「SQLコマンド」タブでスクリプトを入力します。ツールバーの「実行」ボタンをクリックします。

次のスクリプトによって、新しい表の1行目に元の表のデータが入力されます。

INSERT INTO JIM.DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID) VALUES (10, 'Administration', 200, 1700);

元の表から表に入力するためのSQLスクリプトを取得するには、次の手順を実行します。

  1. HR スキーマの下の DEPARTMENTS 表を右クリックし、「データを表示」を選択します。

  2. 「データを表示」ウィンドウのすべての行を選択し、表を右クリックして、ポップアップ・メニューから「INSERTのSQLスクリプトを表示」を選択し、スクリプトを含む「SQLを表示」ダイアログを開きます。

スクリプトをコピーし、それを必要に応じて変更して、データを表に挿入できます。

SQLエディタの操作の詳細は、ヒントを参照してください。

表データの操作

表データの操作には、NetBeans IDEのSQLエディタを利用できます。SQL問合せを実行することによって、データベース構造内で保持されているデータを追加、変更および削除できます。

最初に、 jim スキーマにLocationsという2つ目の表を作成します(jimのユーザー・アカウントでログインしたまま)。今回は、IDEですぐに使用できるSQLファイルを実行するのみです。

  1. locations.sqlファイルをコンピュータ上の_USER_HOME_ディレクトリにダウンロードして保存します。

  2. IDEの「お気に入り」ウィンドウを開き、 locations.sql ファイルを見つけます。

「お気に入り」ウィンドウを開くには、メイン・メニューの「ウィンドウ」>「お気に入り」をクリックします(Ctrl-3キーを押します)。デフォルトで、「お気に入り」ウィンドウに_USER_HOME_ディレクトリが表示されます。

  1. locations.sql ファイルを右クリックし、「ファイルを実行」を選択します。

run file
IDEに複数のデータベース接続が登録されている場合は、IDEによって正しい接続を選択するように求められます。
  1. 「サービス」ウィンドウで、「表」ノードを右クリックし、ポップアップ・メニューの「リフレッシュ」を選択します。

データを含む Locations 表が JIM スキーマに追加されたことがわかります。

second table
  1. 「Locations」表ノードを右クリックし、「データを表示」を選択して、表の内容を確認します。「Locations」表の内容を確認します。

この表示ウィンドウで直接、新しいレコードを挿入したり、既存のデータを変更したりできます。

view data1
  1. 次に、DepartmentsとLocationsの2つの表の情報を表示する問合せを実行します。

この例では、両方の表に同じデータ型の値を保持する同じ「location_id」列があるため、単純な「自然結合」を使用します。この結合では、一致するlocation_id列に等しい値を持つ行のみが選択されます。

「SQLコマンド」ウィンドウを開き( JIM スキーマの下の「 」ノードを右クリックし、「コマンドの実行」を選択)、次のSQL文を入力して、「SQLの実行」アイコンをクリックします。

SELECT DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID, STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE
FROM departments NATURAL JOIN locations
ORDER by DEPARTMENT_NAME;

このSQL問合せは、location_id値がLocations表の一致する列の値に等しいDepartments表の行を、Department名で順序付けられた結果で返します。この問合せの結果には、単一の表の表現で実行できるように、直接新しいレコードを挿入することはできません。

join

ビューとしてSQL結合問合せを保存(「ビュー」ノードを右クリックし、「ビューの作成」を選択)して、必要なときにいつでも便利に実行できます。このため、データベース・ユーザーには、サンプル・ユーザーが持たないビューを作成する権限を付与するようにしてください。システム・アカウントでログインし、 jim にビューの作成権限を付与し(SQL文「grant create view to jim;」で)、独自のビューを作成してみます。

NetBeans IDE SQLエディタでの操作のヒント

このチュートリアルに従っていれば、NetBeans IDE SQLエディタの機能をすでに使用しています。次に、役立つ可能性があるNetBeans IDE SQLエディタの他の機能をいくつか示します。

  1. データベース表のGUIビュー。「サービス」ウィンドウで表ノードを右クリックし、「データを表示」を選択すると、(上の図に示すように) IDEによって表とそのデータの視覚的表現が表示されます。このビューで、表のデータを直接追加、変更および削除することもできます。

    • レコードを追加するには、「レコードを挿入」(row add)アイコンをクリックし、開いた「レコードを挿入」ウィンドウに新しいデータを挿入します。「SQLを表示」ボタンをクリックして、この操作のSQLコードを表示します。表が新しいレコードで自動的に更新されます。

    • レコードを変更するには、表のGUIビューの任意のセル内を直接ダブルクリックし、新しい値を入力します。変更がコミットされるまで、変更したテキストは緑で表示されます。変更内容をコミットするには、「変更をコミット」(row commit)アイコンをクリックします。変更内容を取り消すには、「編集の取消」(row commit)アイコンをクリックします。

    • 行を削除するには、行を選択して「選択したレコードを削除」(row commit)アイコンをクリックします。

  1. 前のタブの保持。SQLエディタ・ツールバーの「前のタブの保持」(keepoldresulttabs)アイコンをクリックし、前の問合せの結果を開いた状態でウィンドウを保持します。これは、複数の問合せの結果を比較する場合に役立つことがあります。

  1. SQL履歴(Ctrl-Alt-Shift-H)。SQLエディタツールバーの「SQL履歴」(sql history)アイコンを使用して、各データベース接続に対して実行したすべてのSQL文を表示します。ドロップダウン・リストから接続を選択し、必要なSQL文を見つけて、「挿入」をクリックし、「SQLコマンド」ウィンドウに文を配置します。

  1. 接続の一覧。複数のデータベース接続があり、SQLエディタでそれらをすばやく切り替える必要がある場合、「接続」ドロップダウン・リストを使用します。

  1. SQL文の実行。SQLコマンド・ウィンドウに現在ある文全体を実行するには、「SQLの実行」(runsql)アイコンをクリックします。SQLの一部のみを実行する場合は、「SQLコマンド」ウィンドウでその部分を選択し、選択を右クリックして、「セクションを実行」を選択します。この場合、選択した部分のみが実行されます。

OCI 8およびPHP向けのNetBeans IDE

OCI 8 PHP拡張およびPHP向けのNetBeans IDEを使用して、Oracleデータベースと通信するPHPコードを記述できます。PHP向けのNetBeans IDEおよびOracleデータベースを使用するには:

  1. PHPの学習のPHP開発のための環境の構成の項で説明されているように、PHP環境を設定します。NetBeans IDEではPHP 5.2または5.3のみをサポートしています。

  2. エディタで php.ini ファイルを開きます。 extension_dir プロパティがPHP拡張のディレクトリに設定されていることを確認します。このディレクトリは通常 PHP_HOME/ext です。たとえば、PHP 5.2.9が C: のルート・ディレクトリにインストールされている場合、 extension_dir 設定は extension_dir="C:\php-5.2.9\ext" になります。

  3. extension=php_oci8_11g.dll (Oracle 11gの場合)または extension=php_oci8.dll (Oracle 10.2またはXEの場合)を見つけてコメントを解除します。これらの拡張のうち一度に有効にできるのは1つのみです。

*重要: * php.ini にそのような行がない場合、拡張フォルダでOCI 8拡張ファイルを探してください。拡張フォルダにOCI 8拡張ファイルがない場合、OCI 8のダウンロードとインストールについては、LinuxおよびWindowsへのPHPおよびOracle Instant Clientのインストールを参照してください。

  1. Apacheを再起動します。(Windowsユーザーはコンピュータを再起動するようにしてください。)

  2. phpinfo() を実行します。OCI 8を正常に有効にすると、 phpinfo() の出力にOCI 8セクションが表示されます。

OCI 8を有効にする方法と特にリモートOracle DBサーバーでOCI 8を使用する方法の詳細は、LinuxおよびWindowsへのPHPおよびOracle Instant Clientのインストールを参照してください。

OCI 8を有効にすると、PHP向けのNetBeans IDEはコード補完とデバッグのためにこの拡張にアクセスします。

oci cc

NetBeans IDEでのOCI JDBCドライバの使用

OCIドライバ・パッケージは、JDBC Thinドライバと同じJARファイル( ojdbc6.jar )で利用できます。使用するドライバの選択は、インタフェースによって異なります。Thinドライバの場合は oracle.jdbc.OracleDriver 、OCIドライバの場合は oracle.jdbc.driver.OracleDriver です。Oracle Database Instant Clientには、OCIドライバがデータベースと通信するために必要なすべてのライブラリが含まれているため、OCIドライバを使用するには、Oracle Database Instant Clientもインストールする必要があります。

OracleのOCIドライバを使用してNetBeans IDEからOracle Databaseに接続するには:

  1. 使用しているプラットフォームに対応するOracle Database Instant Clientの「Basic」パッケージをダウンロードします。このページのインストール手順に従います。

  2. IDEの「サービス」ウィンドウで、「データベース」ノードを右クリックし、「新規接続」を選択します。

  3. 「ドライバを検索」ステップで、「Oracle OCI」を選択し、「追加」をクリックして、 ojdbc6.jar ファイルを指定します。

  4. 「接続をカスタマイズ」ダイアログ・ボックスで、IPアドレス、ポート、SID、ユーザー名とパスワードなどの接続の詳細を指定します。 OCIドライバとThinドライバのJDBC URLの違いに注意してください。

oci connection

トラブルシューティング

下のトラブルシューティングのヒントでは、発生したほんの少数の例外について説明しています。質問がここで解決されない場合は、独自に検索するか、「このチュートリアルに関するご意見をお寄せください」リンクを使用して、建設的なフィード・バックを提供してください。

  • 次のようなエラーが表示されます。

Shutting down v3 due to startup exception : No free port within range:
>> 8080=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@7dedad

これは、GlassFishアプリケーション・サーバーとOracle Databaseの両方でポート8080を使用しているために発生します。そのため、両方のアプリケーションを同時に使用する場合は、それらのどちらかのこのデフォルトのポートを変更する必要があります。Oracle Databaseのデフォルトのポートをリセットする場合は、次のコマンドを使用できます。

CONNECT SYSTEM/passwordEXEC DBMS_XDB.SETHTTPPORT(<new port number>);
  • 次のエラーが表示されます。

Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor.

これは、接続ディスクリプタによって指定されたデータベース・インスタンスのサービスID (SID)がリスナーによって認識されていない場合に発生します。この例外には多くの原因があります。たとえば、Oracle Databaseが起動されていない場合に発生する可能性があります(最も単純な例)。またはSIDが正しくないか、リスナーによって認識されていません。デフォルトのSID (たとえば、Oracle Database Express Editionの場合、デフォルトのSIDはXEです)を使用する場合、この問題が発生する可能性はほとんどありません。SIDは、 tnsnames.ora ファイル(Windowsマシンの場合、このファイルは %ORACLE_HOME%\network\admin\tnsnames.ora にあります)のCONNECT DATA部分に含まれています。 * 次のエラーが表示されます。

ORA-12705: Cannot access NLS data files or invalid environment specified.

一般的な場合、これは、NLS_LANG環境変数に、言語、地域または文字セットの無効な値が含まれることを意味します。この場合は、無効なNLS_LANG設定をオペレーティング・システム・レベルで無効にするようにしてください。Windowsでは、Windowsレジストリの\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEにあるNLS_LANGサブキーの名前を変更します。Linux/Unixでは、コマンド「unset NLS_LANG」を実行します。

関連項目

Oracle Databaseの管理と操作の詳細は、対応するOracleのドキュメントを参照してください。下に、最もよく使用されるドキュメントの簡単な一覧を示します。

NetBeans IDEで他のデータベースを操作する方法については、次を参照してください。