Apache Derbyを使用した開発 -- 3連単を当てる : 第2回 Apache Derbyによるデータベース開発

スキーマ

この記事では、スキーマ、テーブル、列のデータ型などの基本的なデータベースの概念を説明し、構造化照会言語 (Structured Query Language: SQL) について簡単に説明します。データベース開発担当者の役割を中心に見ていきながら、Apache Derbyデータベースにデータを格納する際に使用できる基本的なデータ型を紹介します。このデータ型を使用し、2つのテーブルを持つ簡単なスキーマをApache Derbyに作成していきます。その際、架空の店舗を例に取って説明します。データベースのスキーマの内容を表示する場合は、dblookというApache Derbyのツールを使用してデータベースの内容をダンプします。最後に、テーブルの削除について簡単に説明します。

Robert Brunner, NCSA Research Scientist, Assistant Professor of Astronomy, University of Illinois, Urbana-Champaign

Robert J. Brunner photoRobert J. Brunnerは、米国立スーパー・コンピューター応用研究所に科学者として勤務するかたわら、イリノイ大学アーバナ・シャンペーン校で天文学の助教授を務めています。何冊かの著作と、さまざまな分野にわたる数多くの記事や解説書を発表しています。連絡先はrb@ncsa.uiuc.eduです。



2006年 4月 18日

リレーショナル・データベースの基本的な仕組み

データベース・アプリケーションの開発を始める前に、まずはデータベースの基本的な概念を理解する必要があります。ここでは、Apache Derbyで使用できるデータ型と、効果的なDerbyデータベース・アプリケーションの設計や作成に影響を与える規則について見ていきます。

リレーショナル・データベースにはデータが格納されます。格納されるデータには、数字や文字や日付など、さまざまな型があります。データベースの内部では、データはテーブルと呼ばれる論理的な単位にまとめられます。テーブルの内部にはデータ行が格納されるため、テーブルの構造はスプレッドシートに似ています。それぞれのデータ行は多数のデータ列から構成されています。データ列には、整数値や文字列などの特定のデータ型が格納されています。ほとんどの場合、1つのデータベースには複数のテーブルが作成されます。データベース設計者は、テーブル間に元々ある (または後から追加した) リンクを利用してこれらのテーブルを関連付けます。スプレッドシートではセルの値を利用して異なるシート間の行を関連付けますが、これと同じ考え方がリレーショナル・データベースにも採用されています。テーブル間のリンクを作成する際に使用される列のことを、キー列といいます。

テーブルや特定の列がどういった目的で使用されるのかをわかりやすくするために、適切な名前を付ける必要があります。命名規則は、データベースによって異なる場合があります。Apache Derbyのデータベース・システムの場合、以下のような命名規則があります。

  • 大文字と小文字は区別されない。
  • 最大長は半角で128文字以内。
  • 数字や記号ではなく、文字で始まること。
  • Unicode 文字、アンダースコア文字、Unicode数値以外は使用しないこと。

名前を二重引用符で囲むと、この規則は適用されなくなります。こうすると大文字と小文字が区別され、空白などの文字も指定できるようになります。しかし、こうした名前の付け方はあまりお勧めできません。常に名前を二重引用符で囲まなければならないため、自分以外の人がコードをメンテナンスする際に混乱してしまいます。

Derbyで使用する書式

このシリーズの記事では、特定の書式にしたがってコマンドを記述します。SQLコマンドはすべて大文字で記述し、項目名はcamelCaseを使用して記述します。camelCaseの書式では、単語はつながって表記され、aLongIdentifierのように各単語の最初の文字が大文字で表記されます (最初の単語は小文字で表記)。このシリーズの記事では、この2つの書式を組み合わせてSQLコマンドを「SELECT aLongIdentifier FROM bigdog.dataTable ;」のように表記します。

関連付けされたテーブルを1つのスキーマにまとめることがよくあります。スキーマとは、あるデータベース内に存在するすべての関連した構造定義を格納するコンテナだと考えることができます。テーブル名は、1つのスキーマ内で固有の値でなければなりません。したがって、スキーマを使用すれば、同じ名前が付けられたテーブルなどのオブジェクトを異なる複数のスキーマに格納することができます。Apache Derbyデータベースの場合、テーブルは常にスキーマに格納されます。スキーマが明示的に指定されていない場合は、Derbyに組み込まれたappsスキーマが自動的に使用されます。sysと呼ばれるもう1つの組み込みスキーマは、システム・テーブルを分離する際に使用されます。

スキーマ名を使用して名前を修飾することができます。そのためには、スキーマ名の後にピリオドを付けてテーブル名を続ける必要があります。たとえばbigdog.productsという名前は、bigdogというスキーマ内のproductsというテーブルを表しています。productsのように関連するスキーマ名が指定されていない場合、そのテーブル名は修飾されていないと判断されます。bigdog.productsのようにスキーマ名とテーブル名が完全に指定されている場合、その名前は完全に修飾されていると判断されます。

抽象的に考えると、こうしたデータベースの概念はわかりにくいかもしれませんが、具体的に考えると非常にわかりやすくなります。たとえば、あなたがBigdogサーフショップという店のオーナーだとしましょう。この店では、サングラスやシャツなどのさまざまな商品を扱っています。この店で利益を上げるには、経費を最小限に抑えるために、必要なときにいつでも追加の商品を注文したり仕入れ元を変更したりできるよう、常に在庫状況に注意する必要があります。こうした情報を管理する場合、図1のようなテーブル形式を使用するのが簡単な方法です。

図1. Bigdogサーフショップ用スキーマのサンプル
A sample schema for Bigdog's Surf Shop, showing a Products table and a Vendors table

この単純な表から、すぐにビジネス・ロジックをデータベース・テーブルに展開することができるでしょう。この場合はProductsとVendorsという2つのデータベース・テーブルがあり、品目番号 (Item #) で関連付けることができます。各データベースの列に格納されたデータの型も、簡単に定義することができます。この記事の後半では、Derbyデータベース内にBigdogサーフショップのサンプル・スキーマ (上の2つのテーブルから構成されます) を作成し、その過程を中心に見ていきます。


リレーショナル・データベースの処理: 構造化照会言語

SQLで使用するNULL型

データベース・テーブルの作成を始める前に、データ列に何も値が指定されていない場合はどうすべきかを知っておく必要があります。Webフォームに記入する場合を考えてみてください。フォーム上に何も入力されなかったフィールドがある場合、データベースにはどんな値が挿入されるでしょうか。もし何も目印がない値を調べなければならないとしたら、面倒な作業になりそうだということは想像がつくでしょう。しかし、SQLにはNULLという特別な値が用意されています。この値を使用して、データ列に値が入っていないことを表します。

データベース・システムは、ソフトウェアが複雑に組み合わされて構成される場合があります。システムの規模がエンタープライズ・レベルのアプリケーションにまで拡張された場合は、特にそうです。その結果、それぞれのデータベースに対して固有のアプリケーション・プログラミング・インターフェース (API) が存在し、このAPIがシステムごとに異なってしまうということになりかねません。最初にリレーショナル・データベースが開発されたときが、まさにこういう状態でした。しかし幸いにも、多くの開発元が、リレーショナル・データベースのアクセスと操作を実行する標準的な言語を開発することに同意しました。この言語の正式名称は、構造化照会言語 (Structured Query Language) といいます。単にSQL (シークェルまたはエスキューエルと読みます) と呼ぶ場合もあります。1992年に発表されたSQL-92や1999年に発表されたSQL-99など、これまでにいくつかの公式標準バージョンが発表されてきました。Apache DerbyデータベースにはSQL-92標準がほぼ完全に実装されているため、Derbyを使用して開発されたアプリケーションであれば、別のデータベース・システムへの移行も容易に行うことができます。

SQLには2つの主要なコンポーネントがあります。データ定義言語 (Data Definition Language: DDL) とデータ操作言語 (Data Manipulation Language: DML) です。DDLコマンドは、データベース内のテーブルなどのアイテムを作成、変更、削除する場合に使用します。DMLコマンドは、データベース内のテーブルにあるデータを追加、変更、削除、抽出する場合に使用します。この記事の後半では、基本的なSQLのDDLコマンドについて紹介します。DMLコマンドと高度なDDLコマンドについては、次回以降の記事で紹介します。

SQLで使用するデータ型

SQLはそれ自体がプログラミング言語であるため、さまざまなデータ型の階層に対応しています。こうしたさまざまなデータ型を矛盾なく処理することが、データベースに課せられた最も重要な機能の1つになります。データベースの機能が強化されるにつれて、データ型の階層もより複雑になってきています。しかし、単純な構造のデータベースですべてのデータ型が必要になることはまずありません。数値データ、文字データ、日付と時刻データだけで十分な場合がほとんどです。説明をわかりやすくするため、Derbyデータベースに実装されている基本的なSQLのデータ型をテーブル1~4に示します。

テーブル1のように、Derbyデータベースは3つの異なる整数のデータ型に対応しています。これらのデータ型は、整数部分を何桁まで格納できるかによって区別されます。つまり、データベース内で必要になる領域によって区別されるということです。データベースを設計する際には、テーブルによって消費されるディスク領域を常に最小限に抑えるように注意することが重要になります。通常であれば小さいテーブルの方が性能は高くなりますが、データを結果テーブルに格納する場合も考慮する必要があります。参考までに書きますが、2の31乗は2,147,483,648で、2の63乗は9,223,372,036,854,775,808です。こうしたデータ型を使用すると、非常に大きな整数部分を格納することになってしまいます。

テーブル1. Derbyにおける基本的な整数データの型
データ型最小値最大値説明
SMALLINT-32768 (-215)32767 (215 - 1)itemNumber SMALLINT2バイト整数表現
INT-231231 - 1itemNumber INT4バイト整数表現
BIGINT-263263 - 1itemNumber BIGINT8バイト整数表現

ほとんどの数値データは、整数部分だけで表現することはできません。Derbyでは、いくつかの形式で実数に対応しています。テーブル2のように、単精度浮動小数点、倍精度浮動小数点、固定小数点などの形式があります。

テーブル2. Derbyにおける基本的な数値のデータ型
データ型最小値最大値説明
REAL-3.402x10+383.402x10+38price REALIEEE浮動小数点 (4バイト)
DOUBLE-1.79769x10+3081.79769x10+308price DOUBLEIEEE浮動小数点 (8バイト)
DECIMAL31 (最大精度)price DECIMAL(5,2)固定小数点n

これまでに厳密な精度を持ったデータ型を扱った経験がない場合、固定小数点と浮動小数点の違いがわかりにくいかもしれません。これは、コンピューター内部で使用される浮動小数点のデータ型にすべての実数が格納できるわけではないというところに違いがあります。これは不思議なことに感じられるかもしれませんが、実数は無限に存在しているということを考えてみれば理解できると思います。ほとんどの実数は、わずか数バイトのメモリーに格納することはできません。こうして生じる誤差が問題にならないアプリケーションもありますが、このようなアプリケーションは少数です。たとえば金融関係のアプリケーションの場合、コンピューターに格納できない数値があるというだけの理由で金額の計算結果に誤差が生じるのは、あってはならないことです。

この問題を解決するには、DECIMALというデータ型を使用します。このデータ型を使用することにより、コンピューター内に格納される数値について、整数部分と小数部分を合わせた桁数の合計 (精度) と、小数点以下の桁数 (スケール) を制御することができます。このデータ型を定義する場合、コンピューターに格納するデータの精度を指定し、必要であればスケールも指定します。DECIMAL型は、通常の浮動小数点のデータ型より多くの領域を必要とすることがあります。誤った使い方をするとアプリケーションの性能が落ちる場合があるため、このデータ型を使用する場合には注意が必要です。デフォルトではDECIMAL型のスケールは0に設定されているため、スケールを指定しない場合はinteger型と同じように機能します。

数値のデータ型には、いくつかの同義語 (別名) があります。たとえば、DECIMALデータ型はDECと省略することができ、NUMERICとして定義することもできます。DOUBLEデータ型はDOUBLE PRECISIONとして定義することができます。ただしこの同義語の場合、倍精度数値を定義するたびに余分な単語を入力することになるため、あまり意味があるとは思えません。もっと一般的な同義語にFLOAT型があります。これは、データ型をFLOAT(val) として宣言する際に、任意の浮動小数点精度を指定することができるデータ型です。その際の精度は、1から53の範囲内で指定する必要があります。これ以外の数値を指定した場合はエラーになります。精度を23以下とした場合、FLOAT(val) 型はREAL型と同じように機能します。精度が24から53の場合、DOUBLE型と同じように機能します。

データベースに最もよく格納されるデータの種類として、数値データのほかに文字データがあります。文字データの例としては、商品の説明、人の名前、住所の情報などがあります。Derbyでは、文字データの格納に対して2つの簡単な方法が用意されています。テーブル3で示しているとおり、CHAR型とVARCHAR型という2つのデータ型です。どちらの型に対しても、パラメーターとしてデータ長を指定することができます。データ長が指定されなかった場合、デフォルト値として1が設定されます。この2つの文字データの型には、大きな違いが2つあります。1つめの違いは、CHAR型は最大長が254文字なのに対して、VARCHAR型では32,672文字まで指定できるという点です。もう1つの違いはもう少し微妙なものです。それは、CHAR型の場合、指定したデータ長は常に変わらないという点です。指定したデータ長に満たない長さの文字データを格納する場合、あまった部分には空白が挿入されます。それに対してVARCHAR型の場合は文字データに合わせて長さが変わるため、余分な空白は挿入されません。

テーブル3. Derbyにおける基本的な文字列のデータ型
データ型最大長説明
CHAR254description CHAR(128)固定長文字列
VARCHAR32,672description VARCHAR(128)可変長文字列

可変長という性質上、VARCHAR型は実際に必要とするディスク領域という点から見た場合はCHAR型よりも効率的ですが、パフォーマンスの点から見た場合はCHAR型よりも効率が落ちます。CHAR型の場合、それぞれのCHAR列の長さをデータベースが正確に判断できるため、データの読み込みや書き込みの際にパフォーマンスを最適化することが可能になり、結果としてパフォーマンスが向上します。VARCHAR型の最大長があれば文字データの処理に困ることはないように思えますが、Derbyではさらに長い最大長を持ったデータ型が用意されています。これについては、次回以降の記事で紹介します。

Derbyに用意されているもう1つの簡単なデータ型のクラスには、テーブル4で示しているように日付と時刻が格納されます。TIMEデータ型には時間、分、秒が24時間形式 (HH:MM:SS) で格納され、DATEデータ型には月、日、年が格納されます。格納される日付は、以下に示す形式を含めてさまざまな形式で指定することができます。

  • yyyy-mm-dd
  • mm/dd/yyyy
  • dd.mm.yyyy
テーブル4. Derbyにおける基本的な日付と時刻のデータ型
データ型最小値最大値説明
TIME00:00:0024:00:00start TIME時刻表現 (秒単位)
DATE0001-01-019999-12-31stockDate DATE日付表現 (日単位)

Derbyには、TIMESTAMPデータ型も用意されています。これはTIME型とDATE型を1つのデータ型にまとめたもので、より正確な時刻情報が必要な場合に使用します。


Derbyでテーブルを作成する

ここまでは、テーブル列の設計や各列のデータ型の定義など、テーブルの設計方法について見てきました。適切なテーブルの設計方法を経験すれば、SQLでテーブルを作成する方法は簡単です。リスト1に、Derbyでテーブルを作成する場合の基本的な構文を示します。

リスト1. Apache DerbyのCREATE TABLE構文
--  Comment describing the purpose and layout of the table

CREATE TABLE [schemaName.]tableName (
    { <columnDefinition> | <tableLevelConstraint>  } [,
        { <columnDefinition> | <tableLevelConstraint>  }
    ]*
) ;

最初にこの構文を見たときには、戸惑ってしまうかもしれません。しかし、基本的なことさえ押さえれば簡単に理解できます。Derbyをマスターしたいのであれば、基本構文の理解は避けて通ることはできません。構文内の角括弧 ([ ]) には、オプションのパラメーターを指定します。この基本構文からわかるとおり、スキーマ名はオプションです。これは列定義やテーブル・レベルの制約条件についても同様で、必須項目を最初に定義してからオプション項目を定義します (列が指定されていないテーブルを作成するのは意味のないことです)。

列定義が何を意味するのかはおそらく理解できると思いますが、制約条件の考え方については理解できないかもしれません。制約条件には、テーブル・レベルの制約条件と列の制約条件の2つがあります。制約条件により、列やテーブルに対して一定の制限を指定することができます。たとえば、制約条件を設定することにより、列の値が常にNULL値以外の実効値になるように指定したり、列内のすべてのエントリーが固有の値になるように指定したり、列に対して自動的にデフォルト値を割り当てたりすることができます。制約条件については、次回以降の記事でくわしく説明します。

最後の角括弧の後に続くアスタリスク (*) は、角括弧の項目を複数指定できることを表しています。つまり、このテーブルには1つ以上の列制約条件あるいはテーブル・レベル制約条件を指定する必要があるということです。縦線 (|) は、OR条件を表します。この構文の例では、新しい列か新しいテーブル・レベル制約条件のいずれかを定義する必要があります。中括弧 ({ }) は、関連項目をまとめる際に使用します。丸括弧 (( )) は、構文中で必ず指定しなければならない要素です。セミコロン (;) は、SQL文の終わりを表します。

こうした構文規則を使用して実際のコードを記述するのは、それほど難しいことではありません。リスト2に、Derbyに付属するijツールを使用して、図1に示したテーブルを作成するコードを示します。

リスト2. Apache Derbyでのテーブルの作成
rb$ java org.apache.derby.tools.ij
ij version 10.1
ij> connect 'jdbc:derby:test;create=true' ;
ij> CREATE TABLE bigdog.products (
itemNumber INT NOT NULL,
price DECIMAL(5, 2),
stockDate DATE,
description VARCHAR(128)
) ;
0 rows inserted/updated/deleted
ij> CREATE TABLE bigdog.vendors (
itemNumber INT NOT NULL,
vendorNumber INT NOT NULL,
vendorName CHAR(64)
) ;
0 rows inserted/updated/deleted
ij> exit ;

Derbyデータベースを処理する最も簡単な手段は、ijツールを使用することです。このツールについては、このシリーズの第1回目の記事「Apache Derbyを使用した開発 -- 3連単を当てる : 第1回 Apache Derbyによるデータベース開発」(developerWorks、2006年2月) で紹介しています。リスト2のコードを実行すると、最初にtestという名前で新しくデータベースが作成されます。testデータベースがすでに存在している場合にconnect文を発行すると、警告メッセージが表示されることがあります。このメッセージは無視してかまいません。次に、bigdogという名前で新しいスキーマが暗黙的に作成され、productsとvendorsという名前で2つの新しいテーブルが明示的に作成されます。これらのテーブルは、bigdogスキーマに格納されます。bigdogスキーマが暗黙的に作成されるのは、CREATE SCHEMA文を発行していないためです。

productsテーブルには、itemNumber、price、stockDate、descriptionという4つの列が作成されます。itemNumber列には各項目 (または各行) の固有IDが格納され、常に正しい値が格納されるように列レベルの制約条件 (NOT NULL) が指定されています。この制約を指定しないと複数の列に対してNULL値が格納される可能性があるため、itemNumber列の一意性を保つことができなくなります。price列はDECIMALデータ型として作成されます。精度とスケールはそれぞれ5と2になります。つまり、商品の価格は $999.99まで設定できることになります。残りの2つの列は単純です。stockDate列にはDATE型のデータが格納され、description列には最大長が128文字の文字列データが格納されます。128文字に足りないデータを格納する場合、実際のデータ長にあわせて列の長さが短縮されます。

vendorsテーブルには、itemNumber、vendorNumber、vendorNameという3つの列が作成されます。この例の場合、itemNumber列とvendorNumber列には列レベルの制約条件 (NOT NULL) が指定されています。vendorName列には、最大長が64文字の文字列データが格納されます。vendorName列はCHARデータ型として定義されているため、実際のデータ長にかかわらず、列の長さは常に64文字になります。

データベース内にさまざまな項目を作成した場合、その項目を簡単に確認できる方法があれば便利なのにと思うことがあるでしょう。大丈夫です。dblookツールという便利なツールがあります。このツールを実行すると、データベース内に作成された項目の詳細な一覧が表示されます。リスト3に例を示します。

リスト3. dblookを使用したスキーマの表示
rb$ java org.apache.derby.tools.dblook -d jdbc:derby:test
-- Timestamp: 2006-03-04 10:52:34.056
-- Source database is: test
-- Connection URL is: jdbc:derby:test
-- appendLogs: false

-- ----------------------------------------------
-- DDL Statements for schemas
-- ----------------------------------------------

CREATE SCHEMA "BIGDOG";

-- ----------------------------------------------
-- DDL Statements for tables
-- ----------------------------------------------
CREATE TABLE "BIGDOG"."PRODUCTS" (
    "ITEMNUMBER" INTEGER NOT NULL, 
    "PRICE" DECIMAL(5,2), 
    "STOCKDATE" DATE, 
    "DESCRIPTION" VARCHAR(128));

CREATE TABLE "BIGDOG"."VENDORS" (
    "ITEMNUMBER" INTEGER NOT NULL, 
    "VENDORNUMBER" INTEGER NOT NULL, 
    "VENDORNAME" CHAR(64));

dblookツールは、データベースの内容を簡単にコンソールにダンプすることができるJavaクラスです。Javaプログラムの場合と同じようにdblookツールもコマンド・プロンプトから実行しますが、引数として -d jdbc:derby:testを指定する必要があります。これは、dblookツールによってどのデータベースをクエリーするかを指定する引数です。ijツールを実行できる環境であれば、dblookのクラス・ファイルはCLASSPATH環境変数にすでに設定されているはずです。もし設定されていない場合は、このシリーズの最初の記事を読み直してください。CLASSPATH環境変数の正しい設定方法が詳しく説明されています。dblookツールの実行結果からわかるとおり、testデータベース内にはbigdogスキーマが作成されています。このスキーマ内にも、productsテーブルとvendorsテーブルが作成されていることがわかります。さらに、この2つのテーブル内の列定義もすべて記述されています。


Derbyのテーブルを削除する

誰にでも間違いはあります。間違ってテーブルを作成したり、作成したテーブルが不要になった場合はどうすればいいでしょうか。データベースから不要なテーブルを削除し、必要であれば代わりのテーブルを作成するのが簡単な方法です。テーブルは簡単に削除することができますが、削除を確認するダイアログ・ボックスは一切表示されないため、削除する場合には当然ながら細心の注意が必要です。

データベースからテーブルを削除する (正式には「ドロップする」といいます) 場合の完全な構文を以下に示します。

DROP TABLE [スキーマ名.]テーブル名 ;

この構文の構造は単純です。SQLコマンドのDROP TABLEに削除したいテーブルの完全修飾名を指定して、その後にセミコロンを付けるだけです。リスト4に、新しく作成された一時テーブルを削除する例を示します。

リスト4. Derbyデータベースからのテーブルの削除
rb$ java org.apache.derby.tools.ij
ij version 10.1
ij> connect 'jdbc:derby:test' ;
ij> CREATE TABLE temp ( aColumn INT ) ;
0 rows inserted/updated/deleted
ij> DROP TABLE temp ;
0 rows inserted/updated/deleted
ij> exit ;

まとめ

Apache Derbyにおけるデータベースの処理について、順調に理解が進んできているものと思います。この記事では、スキーマやテーブルや列などの基本的なデータベースの概念について説明し、Bigdogサーフショップという名前の架空の店舗を例に取って、こうした概念を説明しました。Derbyのようなデータベースを処理する場合、対話型データベース処理の標準言語であるSQLを理解する必要があることも説明しました。また、Derbyデータベースにデータを格納する際に使用可能な、基本的なデータ型についても紹介しました。こうした考え方を理解した上で、Derbyを使用したテーブルの作成と削除の方法について見てきました。さらに、Derby dblookツールを使用してデータベース内のスキーマの内容をダンプする方法についても紹介しました。

参考文献

学ぶために

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

議論するために

コメント

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=232666
ArticleTitle=Apache Derbyを使用した開発 -- 3連単を当てる : 第2回 Apache Derbyによるデータベース開発
publish-date=04182006