ヘッダーをスキップ
Oracle® Database SQLJ開発者ガイド
11g リリース2 (11.2)
B56282-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 SQLJの基本事項

この章では、Oracle SQLJインストールと設定をテストし、簡単なアプリケーションを実行します。

この章では、次の項目について説明します。

前提と要件

ここでは、SQLJを実行するための環境の前提とシステム要件を、次の項目に従って説明します。

環境に対する前提

Oracle SQLJ実装を実行するシステムでは、次の内容を前提とします。

  • 使用しているシステム上で実行できる標準Java環境があること。通常は、Sun社のJava Development Kit(JDK)を使用しますが、他のJava環境も使用できます。Java(通常はjava)とJavaコンパイラ(通常はjavac)を実行できることを確認してください。

    Sun JDK上でSQLJアプリケーションを変換して実行するには、JDK 1.5.xまたはJDK 1.6.xを使用する必要があります。SQLJと同じバージョンのJDBCドライバ(ThinドライバまたはOCI8ドライバ)を使用する必要があります。


    関連項目:

    「SQLJ環境」


注意:

Java Runtime Environment(JRE)は、Oracle Database 11g にインストールされるものも含めて、単独ではSQLJプログラムを変換できません。ただし、すでに変換およびコンパイルされているSQLJプログラムの実行に関しては、JREで十分です

  • 使用している環境で、JDBCアプリケーションを実行できること。


    参照:

    JDBCドライバの詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

Oracle SQLJ実装を使用するための要件

Oracle SQLJ実装を使用するには、次のものが必要です。

  • JDBCドライバを使用してアクセスできるデータベース・システム

  • SQLJトランスレータ用クラス・ファイル

    トランスレータ関連クラスは、次のファイル内で使用可能です。

    ORACLE_HOME/sqlj/lib/translator.jar


    注意:

    translator.jarの詳細は、「PATHとCLASSPATHの設定」を参照してください。

  • SQLJランタイム用クラス・ファイル

    ORACLE_HOME/sqlj/lib/runtime12.jar


    注意:

    Oracle Database 11g リリース1(11.1)以上では、runtime12ee.jarが非推奨になりました。かわりに、runtime12.jarを使用してください。

SQLJ環境

完全な動作環境を確保するために、環境を様々な角度から(SQLJとそのコード生成モード、JDBCおよびJDKなど)考慮する必要があります。


注意:

コード生成は、SQLJの-codegenオプションによって決まります。詳細は、「コードの生成(-codegen)」を参照してください。

Oracle固有コード生成の一般的な環境設定を次に示します。

  • SQLJコード生成: -codegen=oracle(デフォルト)

  • SQLJ変換ライブラリ: translator.jar

  • SQLJランタイム・ライブラリ: runtime12.jar

  • JDBCドライバ: Oracle 11g リリース2(11.2)

  • JDKバージョン: 1.5.xまたは1.6.x


注意:

異なるバージョンのJDBCに対して実行する場合は、古い方のバージョンに対して変換します。

環境に関する考慮事項

アプリケーションは、コードを変換したバージョン以上のバージョンのJDKに対して実行できます。


注意:

translator.jarの詳細は、「PATHとCLASSPATHの設定」を参照してください。

SQLJの下位互換性

Oracle SQLJ実装の下位互換性に関して、次の点に注意する必要があります。

  • 現行より前のリリースのSQLJトランスレータで生成されたコードは、引き続き、現行のランタイム・ライブラリに対して実行およびコンパイルできます。ただし、「環境に関する考慮事項」で説明した相互の互換性の制限事項が適用されます。

  • Oracle固有のトランスレータ出力(デフォルトの-codegen=oracle設定で生成されたコード)は、runtime12.jarライブラリを使用して、作成および実行する必要があります。また、次のことに注意してください。

    • 前述のコードは、今後のOracle JDBCおよびSQLJ実装で実行できるようになる予定です。

    • ただし、前述のコードは、Oracle JDBCドライバおよびOracle SQLJランタイムの以前のリリースでは実行できなくなります。この状況では、コードを再変換する必要があります。

インストールおよび設定の確認

前述の前提と要件が満たされていることを確認した後、SQLJインストールを確認します。次の操作を実行する必要があります。

SQLJおよびデモ用アプリケーションを利用できるかどうかの確認

SQLJおよびデモ用アプリケーションの可用性に関するリリース固有の注意事項を次に示します。

インストール先のディレクトリとファイルの確認

次のディレクトリがインストールされ、その中にファイルが格納されていることを確認します。

JDBCのディレクトリ

システムにインストールする必要のあるJDBCファイルの詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

SQLJのディレクトリ

Oracle Database 11g Java環境をインストールすると、sqljディレクトリがORACLE_HOME ディレクトリの下に作成されます。sqljディレクトリには次のサブディレクトリがあります。

  • demo(この章で説明するものを含むデモ用アプリケーション)

  • lib(SQLJのクラス・ファイルを含む.jarファイル)

これらのディレクトリがすべて作成され、ファイルが格納されたことを確認してください。特に、libは重要なディレクトリです。

ORACLE_HOME/binディレクトリには、SQLJおよびJPublisher実行可能ファイルを含む、すべてのJava製品で使用できるユーティリティが格納されています。

PATHとCLASSPATHの設定

環境変数PATHおよびCLASSPATHが、Oracle SQLJ実装用に設定されていることを確認します。Oracle SQLJ実装の環境変数PATHCLASSPATHは、次のように設定します。

  • PATHの設定

    絶対パスを指定せずにsqljスクリプト(SQLJトランスレータを起動するスクリプト)を実行する場合には、環境変数PATHに次のディレクトリが指定してあることを確認してください。

    ORACLE_HOME/bin
    

    Microsoft Windowsでは円記号(\)を使用します。ORACLE_HOME には、実際のOracleホーム・ディレクトリを指定します。

  • CLASSPATHの設定

    環境変数CLASSPATHを変更して、カレント・ディレクトリと次の設定を指定します。

    ORACLE_HOME/sqlj/lib/translator.jar
    

    Microsoft Windowsでは円記号(\)を使用します。ORACLE_HOME には、実際のOracleホーム・ディレクトリを指定します。

    CLASSPATHに、次のランタイム・ライブラリを指定します。

    ORACLE_HOME/sqlj/lib/runtime12.jar
    

    また、CLASSPATHの設定に、次のいずれかのJDBC JARを含める必要があります。

    ORACLE_HOME/jdbc/lib/ojdbc5*.jar
    ORACLE_HOME/jdbc/lib/ojdbc6*.jar
    

    注意:

    SQLJプログラムをJDK 1.5.x環境で変換または実行するにはCLASSPATHにojdbc5.jarを指定し、SQLJプログラムをJDK 1.6.x環境で変換または実行するにはCLASSPATHにojdbc6.jarを指定する必要があります。Oracle Databaseへの接続で実行時に正しいJDBC JARが使用されることを確認してください。


    注意:

    ランタイム・ライブラリを追加しない場合は、SQLJトランスレータを実行できません。CLASSPATHにランタイム・ライブラリとトランスレータ・ライブラリを指定する必要があります。

    SQLJが適切にインストールされていることと、SQLJ、JDBCおよびJavaのバージョン情報を確認するには、次のコマンドを実行します。

    % sqlj -version-long
    

sqljutlパッケージのインストールの確認

sqljutlパッケージは、Oracle Databaseインスタンスのストアド・プロシージャとストアド・ファンクションのオンライン・チェックを行うために使用します。Oracle8i データベース リリース8.1.5以上では、Java対応データベース用のサーバー側Java Virtual Machine(JVM)のインストール中に、SYSスキーマの下に自動的にインストールされます。Java対応でないデータベースを使用している場合は、このパッケージを手動でインストールする必要があります。

sqljutlのインストールを確認するには、SQL*Plusから次のSQLコマンドを実行します。

describe sys.sqljutl

このコマンドを実行すると、パッケージの簡単な説明が出力されます。

パッケージが見つからないというメッセージが表示された場合、またはパッケージの更新版をインストールする場合は、SQL*Plusを使用してsqljutl.sqlスクリプト(Oracle8i データベースの場合はsqljutl8.sql)を実行します。

ORACLE_HOME/sqlj/lib/sqljutl.sql

設定のテスト

データベース、JDBCおよびSQLJセットアップをテストするには、次のソース・ファイルに定義されたデモ用アプリケーションを使用します。

  • TestInstallCreateTable.java

  • TestInstallJDBC.java

  • TestInstallSQLJ.sqlj

  • TestInstallSQLJChecker.sqlj

データベース接続の設定に役立つJavaプロパティ・ファイル(connect.properties)もあります。このファイルを編集して、適切なユーザー、パスワードおよびURL値を設定する必要があります。

この項で説明するデモ用アプリケーションは、SQLJインストールによりdemoディレクトリ中に格納されます。

ORACLE_HOME/sqlj/demo

必要に応じて一部のソース・ファイルを変更し、変換やコンパイルを行う必要がある場合があります。Oracle SQLJ実装で提供されるデモ用アプリケーションでは、ユーザー名scottおよびパスワードtigerのOracle Databaseアカウントで表を参照します。このアカウントは、ほとんどのOracle Database環境で使用されています。必要に応じて、scotttigerに別の値を使用します。


注意:

デモ用アプリケーションを実行するには、demoディレクトリをカレント・ディレクトリにし、このカレント・ディレクトリ(「.」)をCLASSPATHで指定する必要があります。

ここでは、次の項目について説明します。

ランタイム接続の設定

ここでは、connect.propertiesファイルを変更し、Oracleにランタイム接続を設定します。このファイルはdemoディレクトリにあり、次のように記述されています。


注意:

Oracle Database 11g のJDBC実装では、SIDを使用したデータベースURL接続文字列は非推奨です。次に例を示します(orclがSID)。
jdbc:oracle:thin:@localhost:1521:orcl

警告が生成されますが、致命的なエラーではありません。かわりに、次の例のようにmyserviceなどのデータベース・サービス名を使用することをお薦めします。

jdbc:oracle:thin:@localhost:1521/myservice

データベース・サービス名の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。


# Users should uncomment one of the following URLs or add their own.
# (If using Thin, edit as appropriate.)
#sqlj.url=jdbc:oracle:thin:@localhost:1521/myservice
#sqlj.url=jdbc:oracle:oci:@
#
# User name and password here
sqlj.user=scott
sqlj.password=tiger

Oracle JDBCドライバを使用した接続

新しいコードのOracle JDBC OCIドライバでは、接続文字列にociを使用します。ただし、下位互換性のために、oci8も使用できます。したがって、既存のコードを変更する必要はありません。

JDBC Thinドライバを使用する場合は、connect.propertiesthin URL行のコメントアウトを解除し、Oracle接続に合わせて変更します。URLは、JDBCドライバの設定時に指定したURLを使用してください。

データベース検証用の表の作成

ここでのテストでは、SALESという表を使用します。次のようにTestInstallCreateTableをコンパイルおよび実行します。

% javac TestInstallCreateTable.java
% java TestInstallCreateTable

データベースおよびJDBCドライバが動作しており、connect.propertiesファイル内の接続設定が適切である場合、表が作成されます。


注意:

SALES表がスキーマにすでにあり、それを変更しない場合は、TestInstallCreateTable.javaを編集して表の名前を変更します。または、元の表を削除して、新しい表に置き換えます。

TestInstallCreateTableを使用しない場合は、次のSQL文を使用してSALES表を作成できます。

CREATE TABLE SALES (
      ITEM_NUMBER NUMBER,
      ITEM_NAME CHAR(30),
      SALES_DATE DATE, 
      COST NUMBER, 
      SALES_REP_NUMBER NUMBER,
      SALES_REP_NAME CHAR(20));

JDBCドライバの検証

Oracle JDBCドライバをさらに詳しく調べる場合は、TestInstallJDBCデモを使用します。接続がconnect.propertiesファイルに正しく設定されていることを確認します。その後、次のようにTestInstallJDBCをコンパイルして実行します。

% javac TestInstallJDBC.java
% java TestInstallJDBC

次のように出力されます。

Hello, JDBC! 

SQLJトランスレータとランタイムの検証

TestInstallJDBCと似た機能を持つSQLJアプリケーションのTestInstallSQLJデモを、変換して実行してみます。次のコマンドを使用して、ソースを変換します。

% sqlj TestInstallSQLJ.sqlj

このコマンドではアプリケーションのコンパイルも行われることに注意してください。

UNIX環境では、sqljスクリプトはORACLE_HOME/binにあります(このパスはすでにPATHに指定されているはずです)。Windowsでは、binディレクトリのsqlj.exe実行可能ファイルを使用します。SQLJ translator.jarファイルには、SQLJトランスレータおよびランタイムのクラス・ファイルが含まれています。これはORACLE_HOME/sqlj/libにあり、このパスはすでにCLASSPATHに指定されているはずです。

次のコマンドを実行して、アプリケーションを実行します。

% java TestInstallSQLJ

次のように出力されます。

Hello, SQLJ!

SQLJトランスレータからデータベースへの接続の検証

SQLJトランスレータをデータベースに接続できる場合、変換時にSQL操作のオンラインのセマンティクス・チェックを実行できます。SQLJトランスレータはJavaで記述されており、JDBCを使用して必要な情報を指定されたデータベース接続から取得します。オンラインのセマンティクス・チェックの接続パラメータを指定するには、sqljスクリプト・コマンドラインまたはSQLJプロパティ・ファイル(デフォルトでは、sqlj.properties)を使用します。

demoディレクトリで、sqlj.propertiesファイルを編集し、必要に応じてsqlj.password行、sqlj.url行およびsqlj.driver行に対して更新、コメントアウトまたはコメントアウトの解除を行い、データベース接続情報に反映します。詳細は、sqlj.propertiesファイルのコメントを参照してください。

Oracle JDBC OCIドライバを使用する場合の、ドライバ、URLおよびパスワードの設定例を次に示します。

sqlj.url=jdbc:oracle:oci:@
sqlj.driver=oracle.jdbc.OracleDriver
sqlj.password=tiger

オンラインのセマンティクス・チェックは、変換時の接続に対してユーザー名を指定した時点で有効になります。ユーザー名を指定するには、sqlj.propertiesファイルのsqlj.user行のコメントアウトを解除するか、-userコマンドライン・オプションを使用します。userpasswordurlおよびdriverオプションは、コマンドラインまたはプロパティ・ファイルで設定できます。

オンラインのセマンティクス・チェックをテストするには、次のようにTestInstallSQLJChecker.sqljファイル(demoディレクトリ)を変換します。(または、別のユーザー名を使用してテストする方法もあります。)

% sqlj -user=scott TestInstallSQLJChecker.sqlj

Oracle JDBCドライバを使用している場合は、次のエラー・メッセージが表示されます。

TestInstallSQLJChecker.sqlj:41: Warning: Unable to check SQL query. Error returned by database is: ORA-00904: 
invalid column name

TestInstallSQLJChecker.sqljを編集して、行41のエラーを修正します。列名は、ITEM_NAMAEではなくITEM_NAMEである必要があります。このように変更すると、次のコマンドを使用してエラーなしでアプリケーションを変換および実行できます。

% sqlj -user=scott TestInstallSQLJChecker.sqlj
% java  TestInstallSQLJChecker

正常に処理されると、次の行が表示されます。

Hello, SQLJ Checker!