基本に戻る: Apache Derby の ij ツール をスクリプト記述する

最近では誰もが Web アプリケーションをビルドしています。でも、ほんの少しのデータだけが必要な場合はどうでしょう?わざわざ、アプリケーションをまるごと作成する必要が本当にあるでしょうか?Derby には、そんな場合に利用できるツールがあるでしょうか?もちろん、あります。Derby のメイン・コマンドラインツールである ij は、まさにそのために設計されたものです。つまり、コマンドラインからデータベースのデータを操作し、取得してくれます。ij は SELECT ステートメントを入力するだけのものではありません。カーソル (cursor) を使ったり、カーソルを操作したりする機能など、かなり包括的なひととおりのツールとコマンドが用意されています。この記事では、ij の高度なスクリプト機能の使い方を説明します。これでもう、Web アプリケーションに戻ることはなくなるでしょう。

Nicholas Chase, Freelance writer, Backstop Media, LLC

Author1 photoNicolas Chase は、Lucent Technologies、Sun Microsystems、Oracle、Tampa Bay Buccaneers などの企業の Web サイト開発に従事してきました。Nick は高校の物理教師、低レベル放射性廃棄物施設のマネージャー、オンライン・サイエンス・フィクション雑誌の編集者、マルチメディア・エンジニア、Oracle インストラクター、そして対話型通信会社の最高技術責任者としての経歴があります。『XML Primer Plus』をはじめとした本の著者でもあります。



2006年 7月 18日

ij ツールの目的とは?

Apache Derby データベース (および兄弟製品である IBM ® CloudscapeTM) は、アプリケーションへの組み込み用として完全に位置付けられています。JDBC (JavaTM Database Connectivity) と ODBC (Open Database Connectivity) の両方に準拠するこの小型の製品は Java プラットフォームでビルドされているため、多数のオペレーティング・システムで使用できます。一方その汎用性によって、この製品の最も強力なツールの 1 つが隠されてしまっています。

ij ツールは、データベースの作成や SQL ステートメントの実行などの単純なタスクを簡単に実行する手段です。例えば、2 つの単純なデータベースを作成できます。1 つはプロジェクトの情報を保持するデータベースで、もう 1 つは開発者の情報を保持するデータベースです ( リスト 1 を参照)。

リスト 1. データベースとテーブルの作成
ij> connect 'jdbc:derby:projectDB;create=true;';
ij> create table projects (
   id integer,
   project_name varchar(75),
   status integer,
   comments varchar(255)
);
0 rows inserted/updated/deleted
ij> insert into projects values (1, 'Wheel O Fish', 0, 'Waiting for
 contract');
1 row inserted/updated/deleted
ij> insert into projects values (2, 'Bass O Matic', 1, 'In production');
1 row inserted/updated/deleted
ij> insert into projects values (3, 'Patty O Furniture', -1, 'Need
 clarification
.  Does anybody know what this is?');
1 row inserted/updated/deleted
ij> connect 'jdbc:derby:developerDB;create=true;';
ij(CONNECTION1)> create table developers (
   id integer,
   developer_name varchar(75),
   availability varchar(255)
);
0 rows inserted/updated/deleted
ij(CONNECTION1)> insert into developers values (1, 'Jim Bacon', 'Open');
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into developers values (2, 'Brady James', 'Open');
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into developers values (3, 'Michelle Rappaport',
 'Busy u
ntil October');
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into developers values (4, 'Aaron Templeton', 'A
 joy every time we use him.  Hire him.');
1 row inserted/updated/deleted
ij(CONNECTION1)>

(もちろん、これらのテーブルは通常同じデータベースに配置しますが、コンセプトを説明するためにあえてこのようにさせてください。)

ij で可能なことがデータベース、テーブル、データの作成だけであったとしても便利なツールであることに変わりはありませんが、このツールでできることはそれだけではありません。ij では、例えばカーソル (cursor) の操作や準備済みステートメント (prepared statement) の作成と実行など、本格的な JDBC アプリケーションでしか達成できないと思っている多くのタスクを実行できます。

でもまずは、2 つ目のデータベースを作成したときに、ij がどのように 2 番目の接続を作成したかに注目してください。projectDB への最初の接続はまだアクティブですが、ij にこの接続を使うように具体的に指示する必要があります。

それでは、どのように機能するか見てみましょう。


接続と分離レベル

ij で可能になることの 1 つに、データベース・システム全体とデータベースへの接続の制御があります。例えば、2 つのデータベース接続がある場合、SET CONNECTION コマンドで、どちらの接続を使うかを選択できます ( リスト 2 を参照)。

リスト 2. データベース接続の選択
ij(CONNECTION1)> select * from projects;
ERROR 42X05: Table 'PROJECTS' does not exist.
ij(CONNECTION1)> show connections;
CONNECTION0 -   jdbc:derby:projectDB
CONNECTION1* -  jdbc:derby:developerDB
* = current connection
ij(CONNECTION1)> set connection connection0;
ij(CONNECTION0)> select * from projects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
-----------------------------------------------------------------
1          |Wheel O Fish       |0          |Waiting for contract

2          |Bass O Matic       |1          |In production

3          |Patty O Furniture  |-1         |Need clarification.  
Does anybody know what this is?


3 rows selected

プロジェクト・テーブルから接続を選択しようとすると、その接続がまだオープンであってもエラーになります。これは、developerDB データベースへの接続が使用中になっているためです。 show connections コマンドを実行すると、使用中の接続を確認できます。接続を変更するには、 set connection コマンドの後に show connections コマンドで確認したデータベースの名前を続けます。

ij ではデータベース全体のプロパティーを設定することもできます。例えば、データベースの derby.database.propertiesOnly プロパティーを設定するには、以下のようにします。

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(
'derby.database.propertiesOnly', 'true');

上記のコマンドを実行することで、このデータベースに特定して設定したプロパティー (認証要件など) が、全体のシステム構成に設定された他の値によって無効にされることがなくなります。

Derby が認識するシステム・プロパティーは多数あり、 derby.database.defaultConnectionMode、derby.authentication.ldap.searchAuthDN derby.authentication.ldap.searchAuthPW、derby.user.UserName などが認識されます。

次に、データの処理方法をいくつか見てみましょう。


カーソルを操作する

カーソルか、それともレコードセットか?

カーソル (cursor) とレコードセット (RecordSet) は、複数行のデータの操作において、同じ機能を数多く提供します。それでは、この 2 つを区別するものとは何でしょうか。それは、JDBC アプリケーションではレコードセットを作成し、ij ではカーソルを作成するということです。ただし実際は、ij はレコードセットを使用してバックエンドにカーソルをインプリメントします。

テーブルまたはデータベースのテーブルから一連のデータを選択すると、戻されたデータはカーソルとして認識されます。(よく知られた話によると、カーソル (cursor) は「行の現行セット (current set of rows)」の省略形ということです。) 分離レベルに関する資料では常にカーソルについて述べていますが、ij で直接カーソルを操作する方法についてはあまり話題にされていません。実は、Java レコードセット (RecordSet) の操作が必要であるように思われる操作の多くは、ij でカーソルを使って直接行うことができます。

前方スクロール・カーソル

最も単純なカーソルのタイプは、消防ホース、つまり前方スクロール・カーソルです。このカーソルにはデータがすべて含まれ、カーソル内のそれぞれのレコードに移動できますが、逆方向には移動できません。例えば、 リスト 3 を見てください。

リスト 3. 前方スクロール・カーソル
ij(CONNECTION0)> get cursor projectCursor as 'select * from projects';

ij(CONNECTION0)> next projectCursor;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
---------------------------------------------------------------------
1          |Wheel O Fish       |0          |Waiting for contract

ij(CONNECTION0)> next projectCursor;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
---------------------------------------------------------------------
2          |Bass O Matic       |1          |In production

ij(CONNECTION0)> next projectCursor;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
---------------------------------------------------------------------
3          |Patty O Furniture  |-1         |Need clarification.  Does
anybody know what this is?

ij(CONNECTION0)> next projectCursor;
No current row

ij(CONNECTION0)> previous projectCursor;

IJ ERROR: PREVIOUS は前方スクロール・カーソルでは許可されていません。上記のリストでは get cursor コマンドを使ってカーソルを作成し、カーソルに含めるデータを表す SQL ステートメントを入力しています。ここでは、1 つのテーブルからデータを引き出しているだけですが、SQL ステートメントは Derby が許す限り複雑にすることができます。

カーソルが作成されたら、次のレコードを表示するようにカーソルに指示できます。するとカーソルは、SQL ステートメントでの指定順にレコード・リストの下へと移動します。一番下にたどり着くと、ij はレコードがこれ以上ないことを通知します。リストを下に移動することはできますが、前に戻ることはできません。つまり前に述べたように、標準カーソルは前方スクロール・カーソルとなります。ただし、だからと言って、常に単一の方向に移動することしかできないわけではありません。

スクロール・インセンシティブ・カーソル

前方スクロール・カーソルでは必要を満たさないこともあります。例えば、レコードをあちこち移動したいような場合です。このような場合には、 リスト 4 に示すようなスクロール・インセンシティブ・カーソルを作成します。

リスト 4. スクロール・インセンシティブ・カーソル
ij(CONNECTION0)> get scroll insensitive cursor projectScroll as 
'select * from projects';
ij(CONNECTION0)> absolute 2 projectScroll;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
2          |Bass O Matic       |1          |In production

ij(CONNECTION0)> relative -1 projectScroll;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish       |0          |Waiting for contract

ij(CONNECTION0)> relative 2 projectScroll;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
3          |Patty O Furniture  |-1         |Need clarification.  Does
anybody know what this is?

ij(CONNECTION0)> previous projectScroll;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
2          |Bass O Matic       |1          |In production

ij(CONNECTION0)> before first projectScroll;
No current row
ij(CONNECTION0)> next projectScroll;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish       |0          |Waiting for contract

スクロール・インセンシティブ・カーソルを使うには、自動コミットをオフにしなければならないことに注意してください。

上記のリストでは、 get scroll insensitive カーソル・コマンドを使っています。ここでも、カーソルに含めるデータを SQL ステートメントで指定します。スクロール・インセンシティブ・カーソルを作成すると、より自由に移動できるようになります。absolute コマンドで 2 番目の行にジャンプしたり、relative コマンドで指定した行数の分だけ前進または後進したり、あるいは前の行や次の行に移動することができます。また、before first や after last コマンドを使って、カーソルをデータの先頭または末尾に配置することもできます。

更新可能カーソル

今まで説明したカーソルもすべて価値あるものですが、カーソルを直接操作することの真価は、特定の位置でデータベースを更新できることです。例えば、複数のプロジェクトをループして、現行のカーソル位置をベースにプロジェクトの状況を更新することができます ( リスト 5 を参照)。

リスト 5. 更新可能カーソル
ij(CONNECTION0)> autocommit off; 
ij(CONNECTION0)> get cursor updateProjects as 
                     'select * from projects for update';
ij(CONNECTION0)> next updateProjects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish       |0          |Waiting for contract

ij(CONNECTION0)> update projects set status = 1, comments = 
'Contract received, starting work.' where current of updateProjects;
1 row inserted/updated/deleted

ij(CONNECTION0)> next updateProjects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS

--------------------------------------------------------------------
2          |Bass O Matic       |1          |In production

ij(CONNECTION0)> next updateProjects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
3          |Patty O Furniture  |-1         |Need clarification.  Does
anybody know what this is?

ij(CONNECTION0)> delete from projects where current of updateProjects;
1 row inserted/updated/deleted
ij(CONNECTION0)> select * from projects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish       |1          |Contract received, 
starting work.
2          |Bass O Matic       |1          |In production

2 rows selected
ij(CONNECTION0)> commit;
ij(CONNECTION0)> close updateProjects;

何よりもまず、更新可能カーソルを作成する前に、自動コミットがオフであることを絶対に確実にしておく必要があります。次に、更新可能カーソルは前方スクロール・カーソルで、SELECT ステートメントには for update 節が含まれることが条件となります。

カーソルの操作は以前と同じですが、特定のデータ要件ではなく、現行のカーソル位置を where 節で指定した update および delete ステートメントを実行することもできます。

最後に、操作が完了したら、カーソルを閉じてリソースを解放します。


準備済みステートメントを使う

通常はコマンドラインと結び付けて考えることのないもう 1 つのタスクは、準備済みステートメントを使うことです。準備済みステートメントはパフォーマンスの向上のために再コンパイルされるもので、同じことを何度も繰り返し行わなければならない場合に便利です。例えば、 リスト 6 のように、現在のすべての開発者を有効に設定するステートメントを作成できます。

リスト 6. ステートメントの準備
ij(CONNECTION0)> set connection connection1;
ij(CONNECTION1)> prepare allDevelopersOpen as 
                    'update developers set availability = ''open''';
ij(CONNECTION1)> execute allDevelopersOpen;
4 rows inserted/updated/deleted
ij(CONNECTION1)> select * from developers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
1          |Jim Bacon            |open

2          |Brady James          |open

3          |Michelle Rappaport   |open

4          |Aaron Templeton      |open


4 rows selected
=

上記のリストでは、もう一方の接続に切り替えて、特定のハードコーディングされた SQL ステートメントで準備済みステートメントを作成した後、そのステートメントを実行しています。

これよりさらに役立つのは、 リスト 7 に示すように、異なる行と異なる値に使用可能なステートメントを作成することです。

リスト 7. 値を持つ準備済みステートメント
ij(CONNECTION1)> prepare updateOneDeveloper as 
               'update developers set availability = ? where id = ?';
ij(CONNECTION1)> execute updateOneDeveloper using 
      'VALUES (''Im really serious here.  Hire this guy!'', 4)';
1 row inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select * from developers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
1          |Jim Bacon            |open

2          |Brady James          |open

3          |Michelle Rappaport   |open

4          |Aaron Templeton      |Im really serious here.  Hire this 
guy!


4 rows selected

JDBC アプリケーションの準備済みステートメントと同様、ステートメントでの出現順に各プレースホルダーの値が置き換わっています。

さらに、複数のデータ・セットで使うことができる準備済みステートメントを作成することもできます ( リスト 8 を参照)。

リスト8. 複数の値のセットを持つ準備済みステートメント
ij(CONNECTION1)> prepare addDeveloper as 
                     'insert into developers values (?, ?, ?)';
ij(CONNECTION1)> execute addDeveloper using 
      'VALUES (5, ''Corben Deeto'', ''Available this summer''), 
              (6, ''Seetha Pio'', ''Open'')';
1 row inserted/updated/deleted
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from developers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------------------
1          |Jim Bacon            |open

2          |Brady James          |open

3          |Michelle Rappaport   |open

4          |Aaron Templeton      |Im really serious here.  HIRE this 
guy!

5          |Corben Deeto         |Available this summer

6          |Seetha Pio           |Open


6 rows selected

カーソルで準備済みステートメントを使う

最も便利な準備済みステートメントと言えば、入力値を使うだけではなく、カーソルの現在行の演算も用いたステートメントでしょう。例えば、現在カーソルがある行の開発者だけに適用されるステートメントを作成できます ( リスト 9 を参照)。

リスト9. 更新可能カーソルを使った準備済みステートメント
ij(CONNECTION1)> get cursor updateDevelopers as 
                    'select * from developers for update';
ij(CONNECTION1)> prepare busyDeveloper as 
                   'update developers set availability = ''Busy'' 
                               where current of updateDevelopers';
ij(CONNECTION1)> next updateDevelopers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
1          |Jim Bacon            |open

ij(CONNECTION1)> next updateDevelopers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
2          |Brady James          |open

ij(CONNECTION1)> execute busyDeveloper;
1 row inserted/updated/deleted
ij(CONNECTION1)> next updateDevelopers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
3          |Michelle Rappaport   |open

ij(CONNECTION1)> next updateDevelopers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
4          |Aaron Templeton      |Im really serious here.  HIRE 
this guy!

ij(CONNECTION1)> execute busyDeveloper;
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from developers;
ID         |DEVELOPER_NAME       |AVAILABILITY
--------------------------------------------------------
1          |Jim Bacon            |open
2          |Brady James          |Busy
3          |Michelle Rappaport   |open
4          |Aaron Templeton      |Busy
5          |Corben Deeto         |Available this summer
6          |Seetha Pio           |Open

6 rows selected
ij(CONNECTION1)>

理論的には、ここでは何も変わったことをしているわけではありません。更新可能カーソルと準備済みステートメントを作成しているだけです。重要なのは、準備済みステートメントの SQL ステートメントは現行のカーソル位置を参照するため、このステートメントを何度も実行して、異なる行を更新することが可能だという点です。上記のタスクは平凡だったかもしれませんが、複数のテーブルにまたがっていたり、トリガーを実行したりする SQL ステートメントにもできます。


ij スクリプトを実行する

ij のスクリプト記述についての記事である以上、ij スクリプトの実行方法について実際に説明しないで終わるわけにはいきません。ij スクリプトは本質的にはファイル内での ij コマンドのコンパイルで、コマンドがコンパイルされると ij アプリケーションに供給可能になります。例えば、多数の新規開発者とプロジェクトを追加するスクリプトを作成してみましょう ( リスト 10 を参照)。

リスト10. 新規開発者とプロジェクトを追加するスクリプト
connect 'jdbc:derby:projectDB;';

insert into projects values (4, 'Movie Addict', 0, 'Waiting for contract');
insert into projects values (5, 'Tree Huggers Anonymous', 0, 
'Waiting for contract');

select * from projects;

connect 'jdbc:derby:developerDB;';

insert into developers values (7, 'Frank Stein', 'Busy');
insert into developers values (8, 'Wolff Mann', 'Open');

select * from developers;

このスクリプト自体は非常に単純なもので、コマンドラインからアクセスできるコマンドと同じタイプのコマンドを実行するだけです。

このスクリプトを実行するには、いくつかの方法があります。最初の方法は、ij アプリケーションそれ自体の内部でスクリプトを実行することです ( リスト 11 を参照)。

リスト11. ij アプリケーション内部からの ij スクリプトの実行
ij> run 'C:\myScripts\derbyscript.sql';
ij> connect 'jdbc:derby:projectDB;';
ij> insert into projects values (4, 'Movie Addict', 0, 
'Waiting for contract');
1 row inserted/updated/deleted
ij> insert into projects values (5, 'Tree Huggers Anonymous', 0, 
'Waiting for contract');
1 row inserted/updated/deleted
ij> select * from projects;
ID         |PROJECT_NAME          |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish          |1          |Contract received, 
starting work.

2          |Bass O Matic          |1          |In production

4          |Movie Addict          |0          |Waiting for contract

5          |Tree Huggers Anonymous|0          |Waiting for contract


4 rows selected
ij> connect 'jdbc:derby:developerDB;';
ij(CONNECTION1)> insert into developers values (7, 'Frank Stein', 
'Busy');
1 row inserted/updated/deleted

ij がそれぞれのコマンドをエコー・バックすることに注意してください。

もう一つの方法は、ij アプリケーションを最初に起動するときにスクリプトを参照することで、これによって stdin は必然的にファイルのコンテンツに置き換えられます ( リスト 12 を参照)。

リスト12. ij アプリケーションへの ij スクリプトの供給
C:\SW\db-derby-10.1.2.1-bin\frameworks\embedded\bin>java 
-Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver
 org.apache.derby.tools.ij derbyscript.sql
ij version 10.1
ij> connect 'jdbc:derby:projectDB;';
ij> insert into projects values (4, 'Movie Addict', 0, 
'Waiting for contract');
1 row inserted/updated/deleted
ij> insert into projects values (5, 'Tree Huggers Anonymous', 0, 
'Waiting for contract');
1 row inserted/updated/deleted
ij> select * from projects;
ID         |PROJECT_NAME       |STATUS     |COMMENTS
--------------------------------------------------------------------
1          |Wheel O Fish       |1          |Contract received, starting work.

2          |Bass O Matic       |1          |In production

スクリプトが完了すると、ij アプリケーションが終了します。これは、ij 自体からスクリプトを実行する場合と異なります。

ij 自体からスクリプトを実行する場合、プログラムは exit が入力されるまで引き続き通常通りに実行します。

ij 内で実行するスクリプトの出力を保管したいという場合もあるでしょう。そのような場合には、単に出力をファイルにリダイレクトするか、あるいは ij.outputfile プロパティーを使います ( リスト 13 を参照)。

リスト13. ij スクリプトの出力のファイルへの保管
java -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver 
-Dij.outfile=results.txt org.apache.derby.tools.ij 
derbyscript.sql

出力をファイルにリダイレクトする場合、コマンドラインには表示されないことに注意してください。


まとめ

この記事では、Apache Derby 製品に付属の ij 管理ツールであまり使われていない機能をいくつか紹介しました。データベースを作成し、画面のキャプチャーを実行する一般的な機能に加え、ij では前方スクロール・カーソルとスクロール・インセンシティブ・カーソルの両方を作成して操作し、更新することができます。また、準備済みステートメントの作成と実行、あるいは外部スクリプトの作成と実行を行うこともできます。これらの機能を組み合わせて、外部インフラストラクチャーをビルドする必要なく、非常に機能的かつ便利なアプリケーションを ij 内で作成することができます。

参考文献

学ぶために

製品や技術を入手するために

  • Apache Derby データベース をダウンロードしてください。
  • developerWorks の IBM Cloudscape リソース・エリアを参照してください。
  • 皆さんの次期オープンソース開発プロジェクトを IBM trial software を使って革新してください。ダウンロード、あるいは DVD で入手することができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Information Management
ArticleID=254547
ArticleTitle=基本に戻る: Apache Derby の ij ツール をスクリプト記述する
publish-date=07182006