この章から5章にわたって、Oracle Databaseにアクセスし、データベース上のデータを表示、変更、削除および更新するJavaアプリケーションの作成方法を説明します。このJavaアプリケーションのパーツの作成方法を各章で説明します。Javaアプリケーションからデータベースにアクセスするには、java.sql.Connection
オブジェクトを使用してデータベースに接続する必要があります。
この章は次の項で構成されています。
JDeveloperでデータベース接続を設定および管理して、アプリケーションをOracle Databaseやオフライン・データベース・オブジェクトなどの外部データソースと通信可能にすることができます。これは、データベース・ナビゲータを使用して行います。アプリケーション・サーバーへの接続など、アプリケーションが必要とする他の接続の管理にも同じナビゲータを使用します。次の項目では、データベース・ナビゲータを使用してデータベースとそのオブジェクトを表示し、データベースへの接続を作成する方法について説明します。
データベース・ナビゲータには、現在定義されている接続がすべて表示されます。データベース・ナビゲータを表示するには、JDeveloperの画面左上にあるナビゲータ・パネルで「データベース・ナビゲータ」タブ(表示されている場合)を選択するか、「表示」メニューを使用します。JDeveloper IDEのデフォルトのレイアウトは、図1-1を参照してください。
データベース・ナビゲータを使用して、表示されている接続を参照できます。特に、データベース・スキーマについては、データベース・オブジェクト、表、ビューおよびそれらの内容を表示することもできます。
データベース接続は、「IDE接続」ノードの下に表示されます。データベース内のオブジェクトを表示するには、接続を開きます。スキーマを開くと、そのスキーマ内のオブジェクト・タイプのノードが表示されます。オブジェクト・タイプのノードを開くと、個々のオブジェクトが表示されます。表のノードを開くと、表の構造および表内のデータを表示できます。
接続の詳細がわかっている任意のデータベースに接続できます。データベース接続を作成するときは、ユーザー名とパスワードを指定する必要があります。デフォルトでは、接続で指定したユーザーのスキーマのみを表示できます。
接続を作成するには、次の手順を実行します。
JDeveloperを起動します。
「表示」メニューから「データベース・ナビゲータ」を選択します。データベース・ナビゲータが表示され、選択可能な接続のリストが表示されます。
「IDE接続」を右クリックし、ショートカット・メニューで「新規接続」を選択します。「データベース接続の作成」画面が表示されます。
「接続」画面では、接続名およびタイプのデフォルト値(Connection1
およびOracle (JDBC)
)を変更しないでください。「ユーザー名」フィールドと「パスワード」フィールドの両方にHR
と入力します。「ロール」の値は入力せず、「パスワードを配布」を選択します。データベースが配置されているコンピュータに関する情報を入力する必要があります。この情報は、データベース管理者から入手します。
次の情報を入力します。
「接続のテスト」をクリックします。接続が成功すると、「ステータス」フィールドに「成功」と表示されます。
図3–1に、これらの詳細を入力する「接続」画面を示します。
「終了」をクリックして接続を作成し、画面を閉じます。
JDeveloperでのOracle Databaseからの切断と再接続
JDeveloperでデータベースから切断するには、データベース・ナビゲータで、接続名を右クリックして「切断」を選択します。データベース・ナビゲータの表示には接続名のみが表示され、ノードを開くためのプラス(+)記号は表示されなくなります。データベースに再接続するには、接続名を右クリックして「接続」を選択します。
データベースへの接続を正常に確立した後で、その内容をデータベース・ナビゲータで表示できます。データベース・ナビゲータには、データベース、そのオブジェクト、それらのインスタンスおよびそれぞれの内容について、ナビゲーション可能な階層ツリー構造が表示されます。作成したデータベース接続の階層の各レベルで内容を表示するには、次の手順を実行します。
データベース・ナビゲータの「IDE接続」ノードには、接続名が付いたノードが表示されています。接続名の左にあるプラス記号(+)をクリックして、ナビゲーション・ツリーを開きます。あるオブジェクト・タイプ(たとえば表)についてインスタンスのリストを表示するには、「表」ナビゲーション・ツリーを開きます。
ナビゲータの下の構造ウィンドウには、ナビゲータで選択したオブジェクトの詳細な構造が表示されます。ナビゲータで表(Employeesなど)を選択して、構造ウィンドウにその表の列を表示します。
ナビゲータで表をダブルクリックすると、その表の構造がウィンドウのメインの編集領域に表示されます。すべての列(名前、タイプ、サイズなど)の詳細が含まれているため、表の定義を調べることができます。
データベース・ナビゲータでオブジェクトを編集することもできます。表を編集するには、表を右クリックし、ショートカット・メニューで「編集」を選択します。選択した表をダイアログ・ボックスで変更できます。
JDeveloperでは、アプリケーション内で作業を行い、アプリケーション内で、多数のプロジェクトに編成できます。JDeveloperには多数のアプリケーション・テンプレートがあり、標準的なタイプのアプリケーションに合うプロジェクト構造を、比較的迅速かつ簡単に作成するために役立ちます。JDeveloperでアプリケーションを作成する際は、構築するアプリケーションのタイプに合ったアプリケーション・テンプレートを選択します。
選択するアプリケーション・テンプレートによって、初期プロジェクト構造(アプリケーション内の名前付きプロジェクト・フォルダ)および含められるアプリケーション・テクノロジが決まります。特定のアプリケーションで必要となるライブラリまたはテクノロジをさらに追加して、必要であればプロジェクトを追加で作成できます。
アプリケーション・ナビゲータには、アプリケーションとプロジェクトがすべて表示されます。JDeveloperを初めて起動すると、JDeveloper IDEの左側にデフォルトでアプリケーション・ナビゲータが表示されます。
アプリケーション・ナビゲータを表示するには(表示されていない場合)、JDeveloper画面の左上にあるナビゲータ・パネルで「アプリケーション」タブをクリックするか、「表示」メニューで「アプリケーション・ナビゲータ」を選択します。
アプリケーション・ナビゲータには、プロジェクト内の項目の論理的なグループが表示されます。個々の項目の構造を表示するには、項目を選択して、その構造を構造ウィンドウに表示できます。
アプリケーション・ナビゲータから、項目を適切なデフォルト・エディタで表示できます。たとえば、JavaファイルをダブルクリックするとファイルはJavaソース・エディタで開き、JavaServer Pages (JSP)ファイルをダブルクリックするとファイルはJSP/HTMLビジュアル・エディタで開きます。
JDeveloperの使用を開始するには、アプリケーションを作成する必要があります。また、作業を格納するためのプロジェクトを少なくとも1つ作成する必要があります。手順は次のとおりです。
アプリケーション・ナビゲータで、「新規アプリケーション」をクリックします。
「汎用アプリケーションの作成」ウィザードが表示されます。「アプリケーション名」フィールドにHRApp
と入力し、「アプリケーション・テンプレート」リストから「汎用アプリケーション」を選択します。「次へ」をクリックします。
汎用プロジェクトの名前付け画面で、プロジェクトの名前としてview
を入力します。「終了」をクリックします。
新しいHRApp
アプリケーションがアプリケーション・ナビゲータに表示されます。
アプリケーションを保存します。このことを行うには、「ファイル」メニューで、「すべて保存」を選択します。
プロジェクトのテクノロジ範囲内で利用可能なクラスのJavadocまたはコードをJDeveloperで表示できます。また、それらのクラスに対して利用可能なすべてのメソッドの詳細を表示できます。
たとえば、Connection
クラスのコードまたはJavadocを表示するには、次の手順を実行します。
アプリケーション・ナビゲータでプロジェクトが選択されている状態で、「ナビゲート」メニューで「Javaクラスに移動」を選択します。この操作は、プロジェクト内の特定のファイルに対して行うこともできます。
「Javaクラスに移動」ダイアログ・ボックスで、「ソース」または「Javadoc」を選択します。
表示するクラスの名前を「名前」フィールドに入力するか、「参照」をクリックしてクラスを検索します。Connection
クラスの場合、まずConnection
と入力し、表示されるリストで「Connection (java.sql)」を選択します。
「OK」をクリックします。
ここまでは、JDeveloperからデータベースに接続する方法を見てきました。Javaアプリケーションから接続を起動するには、JDBC Application Program Interface(API)のConnection
オブジェクトを使用します。
この項では、Javaアプリケーションからのデータベースへの接続について、次の項目で説明します。
Javaでは、DataSource
オブジェクトのインスタンスを使用してデータベースへの接続を取得します。DataSource
インタフェースは、以前のJDBC DriverManager
クラスに完全に置き換わるものです。oracle.jdbc.pool
パッケージのOracleDataSource
クラスにより、javax.sql.DataSource
インタフェースが実装されました。オーバーロードされたgetConnection
メソッドによって、データベースへの物理接続が返されます。
そのDataSource
オブジェクトに適したset
xxx
メソッドを使用してプロパティを設定することも、これらのプロパティを入力パラメータとして受け入れるgetConnection
メソッドを使用することもできます。
表3-1に、DataSource
の主要なプロパティを示します。
名前 | 型 | 説明 |
---|---|---|
|
サーバー上の特定のデータベースの名前。Oracleの用語では、サービス名(またはSID)とも呼ばれます。Oracle Databaseでは、デフォルトは |
|
|
基礎となるデータソース・クラスの名前。 |
|
|
データソースの説明。 |
|
|
サーバーとの通信のためのネットワーク・プロトコル。Oracleでは、JDBC Oracle Call Interface(OCI)ドライバにのみ該当し、デフォルトは |
|
|
接続するユーザーのパスワード。 |
|
|
サーバーがリクエストをリスニングするポートの番号。 |
|
|
データベース・サーバーの名前。 |
|
|
ログインに使用されるユーザー名 |
|
|
Oracle JDBCドライバのタイプ。 これは、Oracle固有のプロパティです。 |
|
String |
データベース接続文字列のURLを指定します。標準の これは、Oracle固有のプロパティです。 |
DataSource
オブジェクトのurl
プロパティを必要なすべてのパラメータとともに設定すると、他のプロパティを設定したり、getDBConnection
メソッドに追加パラメータを指定しなくても、データベースに接続できます。データベースURLの設定の詳細は、「データベースURLの指定」の項を参照してください。
注意: getConnection メソッドで指定したパラメータは、それまでにアプリケーションで指定されたすべてのプロパティおよびurl パラメータの設定よりも優先されます。 |
関連項目: 『Oracle Database JDBC開発者ガイドおよびリファレンス』 |
今回のリリースのOracle JVMでは、URL内のInternet Protocol Version 6(IPv6)アドレスと、IPv6アドレスに解決するデータベース内のJavaコードのマシン名をサポートしています。
データベースURLは、DataSource
オブジェクトのurl
プロパティの値に指定する文字列です。完全なURLの構文は次のとおりです。
jdbc:oracle:driver_type:[username/password]@database_specifier
URLの最初の部分には、使用するJDBCドライバを指定します。クライアント側アプリケーションでサポートされているdriver_type
の値は、thin
およびoci
です。大カッコは、ユーザー名とパスワードの組合せがオプションであることを示します。database_specifier
の値は、アプリケーションが接続されるデータベースを示します。
次に示すのは、ThinドライバによってサポートされるThinスタイルのサービス名の構文です。
jdbc:oracle:
driver_type
:[
username
/
password
]@//
host_name
:
port_number
:
SID
例3-1に、このマニュアルで作成するサンプル・アプリケーションで、ユーザー名とパスワードを指定し、さらにデータベースがローカルに格納されている場合のデータベース接続URLを示します。
Oracle Databaseに、新しい接続機能があります。Oracle Databaseクライアントをインストールすると、接続URLのデータベース識別子部分に詳細を指定する必要はありません。一定の条件では、Oracle Database接続アダプタに必要な指定は、データベースがインストールされているコンピュータのホスト名のみです。
Oracle Databaseに導入されたこの機能により、JDBC接続URLの構文の一部はオプションになります。
jdbc:oracle:
driver_type
:[
username/password
]@[//]
host_name
[:
port
][:ORCL]
このURLでは、次のようになります。
//はオプションです。
:port
はオプションです。
デフォルトのOracle Netリスナー・ポート(1521)が使用されない場合にのみ、ポートを指定します。
:ORCL
(サービス名)はオプションです。
Oracle Databaseクライアントの接続アダプタは、ホスト上のデフォルトのサービスに接続します。これは、ホストのlistener.ora
ファイルで、ORCL
に設定されています。
例3-2に、listener.ora
ファイルの基本構成を示します。ここでは、デフォルトのサービスが定義されています。
例3-2 listener.oraのデフォルト・サービス構成
MYLISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=test555)(PORT=1521)) ) DEFAULT_SERVICE_MYLISTENER=dbjf.regress.rdbms.dev.testserver.com SID_LIST_MYLISTENER = (SID_LIST= (SID_DESC=(SID_NAME=dbjf)(GLOBAL_DBNAME=dbjf.regress.rdbms.dev.testserver.com)(ORACLE_HOME=/test/oracle)) )
listener.ora
ファイルを変更した後で、次のコマンドを使用してリスナーを再起動する必要があります。
> lsnrctl start mylistener
jdbc:oracle:thin:@//test555.testserver.com jdbc:oracle:thin:@//test555.testserver.com:1521 jdbc:oracle:thin:@test555.testserver.com jdbc:oracle:thin:@test555.testserver.com:1521 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com)(PORT=1521))) jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com))) jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test555.testserver.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=)))
注意: デフォルト・サービスは、Oracle Database 11gリリース1の新機能です。他のバージョンのOracle Databaseクライアントを使用してデータベースに接続する場合は、SIDおよびポート番号を指定する必要があります。 |
Javaアプリケーションを作成するための最初の手順は、Javaクラスを作成することです。次の手順では、DataHandler
という名前のクラスの作成方法を説明します。このクラスには、データベースに問合せを行いデータベース内のデータを変更するメソッドが含まれています。
アプリケーション・ナビゲータで、Viewプロジェクトを右クリックし、ショートカット・メニューで「新規」を選択します。
「新規ギャラリ」で、「一般」カテゴリを選択します。「項目」リストで、「Javaクラス」を選択し、「OK」をクリックします。「Javaクラスの作成」ダイアログ・ボックスが表示されます。
「Javaクラスの作成」ダイアログ・ボックスで、クラスの「名前」としてDataHandler
と入力し、「パッケージ」としてhr
と入力します。「オプション属性」のデフォルト値は変更せず、「OK」をクリックします。図3-6に、適切な値が指定された「Javaクラスの作成」ダイアログ・ボックスを示します。
スケルトンDataHandler
クラスが作成され、Javaソース・エディタに表示されます。デフォルトで、パッケージ宣言、クラス宣言およびデフォルト・コンストラクタが作成されます。図3-7は、Javaソース・エディタに表示された、Javaコードを追加できる状態のクラスを示しています。
Oracle JDeveloperには、Javaアプリケーション・プログラミングに役立つ標準ライブラリがあります。これらのライブラリには、Application Development Framework(ADF)、JDBC用のOracleライブラリ、JSPなどのAPIサポートが含まれています。
プロジェクトでJDBCを使用するには、Oracle JDBCライブラリをプロジェクトにインポートします。同様に、JSPテクノロジを使用するには、JSPランタイム・ライブラリをインポートします。
Oracle JDBCライブラリの主要なパッケージは、次のとおりです。
oracle.jdbc
: oracle.jdbc
パッケージのインタフェースは、java.sql
パッケージのインタフェースに対するOracleの拡張機能を定義します。これらの拡張機能によって、Oracle SQL形式のデータおよびその他のOracle固有の機能(Oracleのパフォーマンス拡張など)にアクセスできます。
oracle.sql
: oracle.sql
パッケージは、SQL形式のデータへの直接アクセスをサポートします。このパッケージは、主に、SQLデータへのJavaマッピングを提供するクラスとそれらのサポート・クラスによって構成されます。
oracle.jdbc.pool
: このパッケージには、データベースへの接続を取得するために使用されるOracleDataSource
クラスが含まれています。オーバーロードされたgetConnection
メソッドによって、データベースへの物理接続が返されます。
プロジェクトにライブラリを含めるには、次の手順を実行します。
アプリケーション・ナビゲータでViewプロジェクトをダブルクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。
「ライブラリとクラスパス」をクリックし、「ライブラリの追加」をクリックします。「ライブラリの追加」ダイアログ・ボックスが表示され、Java 2 Platform, Standard Edition(J2SE)バージョンの選択可能なライブラリのリストが表示されます。
「ライブラリの追加」ダイアログ・ボックスで、Extensionフォルダ内のライブラリのリストをスクロールします。「JSP Runtime」ライブラリを選択し、「OK」をクリックして、プロジェクトの選択されたライブラリのリストに追加します。同様に、Oracle JDBCライブラリを追加します。図3-8に、View
プロジェクトに追加したOracle JDBCライブラリを示します。
「OK」をクリックします。
JavaアプリケーションでJDBCを使用するには、次のJDBCパッケージをインポートします。
DataHandler.java
クラスがJavaソース・エディタで開かれていない場合は、アプリケーション・ナビゲータで、Viewプロジェクト、「アプリケーション・ソース」および自分のパッケージ(「hr」)を開き、「DataHandler.java」をダブルクリックします。
生成されたパッケージ宣言の最後で、新しい行に、例3-3に示すとおりimport
文を入力します。
接続情報は、接続変数(接続URL、ユーザー名および対応するパスワード)を使用して接続メソッドに渡されます。
JDeveloperのJavaソース・エディタを使用して、DataHandler.java
クラスを次のように編集します。
DataHandler
コンストラクタの後に行を追加し、3つの接続変数を次のように宣言します。
String jdbcUrl = null; String userid = null; String password = null;
これらの変数は、ユーザーがログイン時に入力した値をアプリケーションで保持し、ユーザーを認証してデータベースへの接続を作成するために使用されます。jdbcUrl
変数は、接続するデータベースのURLを保持するために使用されます。userid
およびpassword
変数は、ユーザーを認証し、セッションで使用されるスキーマを識別するために使用されます。
注意: ログイン変数は、アプリケーションを保護するためにnullに設定されています。この時点では、アプリケーション・ログイン機能はまだアプリケーションに組み込まれていません。そのため、ログイン機能が組み込まれるまでの間にアプリケーションをテストするため、ログイン変数の値を次のように設定できます。データベースの接続文字列に、 String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL"; 変数 String userid = "hr"; String password = "hr"; テストが終了したらすぐに、これらを セキュリティ機能およびプラクティスの詳細は、Oracle Databaseのセキュリティ・ガイドおよび使用する開発環境についてベンダーが提供するドキュメントを参照してください。 |
新しい行で、次のように接続インスタンスを宣言します。
Connection conn;
これで、Javaクラスには例3-4のコードが含まれます。
データベースに接続するには、次のようにメソッドを作成します。
接続宣言の後に次のメソッド宣言を追加します。
public void getDBConnection() throws SQLException
Javaコード・インサイト機能によって、SQLException
エラー処理パッケージのインポートを促すメッセージが表示されます。[Alt]キーを押しながら[Enter]キーを押してインポートします。import java.sql.SQLException
文がインポート・パッケージのリストに追加されます。
同じ行の最後で、開きカッコ({
)を追加し、[Enter]キーを押します。JDeveloperによって自動的に閉じカッコが作成され、カッコの間の新しい空の行にカーソルが置かれます。
新しい行で、次のようにOracleDataSource
インスタンスを宣言します。
OracleDataSource ds;
次のように入力して、新しいOracleDataSource
オブジェクトを追加します。
ds = new OracleDataSource();
次のように入力を開始して、DataSource
オブジェクトのURLを設定します。
ds.setURL(jdbcUrl);
Javaコード・インサイトによって、選択可能なOracleDataSource
メソッドのリストが表示されます。リストをスクロールしてsetURL(String)
メソッドを選択し、[Enter]キーを押してコードに挿入します。このファンクションのカッコ内に、jdbcUrl
と入力します。
図3-9に、JDeveloperのJavaコード・インサイト機能がコードの挿入にどのように役立つかを示します。
次の行で、次のように入力します。
conn = ds.getConnection(userid,password);
通常、Javaコード・インサイトによってds
のメソッドのリストが表示されます。今回は、getConnection(String,String)
を選択します。カッコ内に、userid
,password
と入力します。行の最後にセミコロン(;)を付けます。
コードは、例3-5のコードのようになります。
例3-5 データベースに接続するメソッドの追加
package hr; import java.sql.Connection; import java.sql.SQLException; import oracle.jdbc.pool.OracleDataSource; public class DataHandler { public DataHandler() { } String jdbcUrl = null; String userid = null; String password = null; Connection conn; public void getDBConnection() throws SQLException{ OracleDataSource ds; ds = new OracleDataSource(); ds.setURL(jdbcUrl); conn=ds.getConnection(userid,password); } }
クラスをコンパイルして、構文エラーがないことを確認します。このことを行うには、Javaソース・エディタで右クリックし、ショートカット・メニューで「メイク」を選択します。Javaソース・エディタ・ウィンドウの下のログ・ウィンドウに、コンパイルが成功したことを示す
メッセージが表示されます。