DataSetの検索パ ラ メ ータは、 SQL 文、 ま たは dbKona の SQL 文用の抽象 オブジ ェ ク ト であ る SelectStmtオブジ ェ ク ト に よ って定義さ れます。
DataSetには、Valueオブジ ェ ク ト を含む Recordオブジ ェ ク ト が含まれま す。Recordには、 イ ンデ ッ ク ス位置 (0 が起点 ) を指定し てア ク セス し ます。
DataSetは、Schemaに よ っ て記述 さ れ、 Schema にバ イ ン ド さ れます。
Schema には、
DataSetに表示さ れ る各データベース カ ラ ムの名前、 データ
型、 サ イ ズ、 順番な どの属性情報が格納 さ れます。Schema内のカ ラ ム名に は、 イ ンデッ ク ス位置 (1 が起点 ) を指定 し てア ク セ ス し ます。
DataSetク ラ ス (weblogic.db.jdbc.DataSet を参照 ) は、QueryDataSetおよ び TableDataSetの抽象的な親ク ラ スです。
QueryDataSet
QueryDataSetを使用する と 、 SQL ク エ リ の結果を、 イ ンデッ ク ス位置 (0 が起 点 ) を指定し てア ク セ スする Record の コ レ ク シ ョ ン と し て使用で き ます。
TableDataSet と は異な り 、QueryDataSetに対し て変更および追加し た内容は データベースに保存でき ません。
QueryDataSet と TableDataSetには、 機能的な違いが 2 つあ り ます。 1 番目の 相違点は、TableDataSetの変更内容はデータベースに保存でき る と い う 点で す。QueryDataSet
の Record も変更で き ますが、 その変更内容は保存で き ませ
ん。 2 番目の相違点は、QueryDataSetには、 複数のテーブルか ら のデータ を取り 出せる と い う 点です。
dbKona API
QueryDataSetは、java.sql.Connectionの コ ンテキ ス ト 内で、 ま たは java.sql.ResultSetを使用し て作成 さ れます。 つま り 、 Connection オブ ジ ェ ク ト を引数 と し て QueryDataSetコ ン ス ト ラ ク タ に渡し ます。
QueryDataSetのデータ検索は、 SQL ク エ リ や SelectStmtオブジ ェ ク ト に よ っ て指定 さ れます。
QueryDataSetには、 Record オブジ ェ ク ト (0 が起点の イ ンデ ッ ク ス を指定 し てア ク セスする ) が含まれます。 Record オブジ ェ ク ト には Value オブジ ェ ク ト (1 が起点の イ ンデ ッ ク ス を指定し てア ク セスする ) が含まれます。
QueryDataSetは、 Schema に よ っ て記述 さ れます。 Schema には、
QueryDataSetの属性に関する情報が格納さ れます。 属性には、
QueryDataSetに表示 さ れる各データベース カ ラ ムの名前、 データ型、 サ イ ズ、 順番な どがあ り ます。
QueryDataSet
ク ラ ス (
weblogic.db.jdbc.QueryDataSetを参照 ) には、
QueryDataSet
を作成、 保存、 および検索する ための メ ソ ッ ド があ り ます。QueryDataSet
には、 結合用の SQL な ど、 任意の SQL を指定で き ます。 その
スーパーク ラ スであ る DataSet には、 レ コー ド キ ャ ッ シ ュの詳細を管理する ため の メ ソ ッ ド が含まれています。TableDataSet
TableDataSet と QueryDataSetの機能的な違いは、TableDataSetの変更内容 はデータベースに保存でき る と い う 点です。TableDataSet を使用する と 、 Recordの値の更新、 新し い Recordの追加、 および Recordへの削除のマー ク付 けがで き ます。TableDataSet
全体を保存する場合は
TableDataSetク ラ スの
save() メ ソ ッ ド を使用し、 1 つのレ コー ド を保存する場合は Recordク ラ スの save() メ ソ ッ ド を使用し て、 最終的に変更内容をデータベースに保存でき ます。さ ら に、TableDataSetに取 り 出 さ れるデータは、 定義上、 単一のデータベース テーブルか ら のデータ です。 複数のデータベース テーブルを結合し て
TableDataSet
にデータ を取 り 出すこ と はで き ません。
更新情報ま たは削除情報をデータベースに保存するには、KeyDefオブジ ェ ク ト を使用し て TableDataSet
を作成する必要があ り ます。 KeyDef オブジ ェ ク ト は、
UPDATE文ま たは DELETE文に WHERE句を作成する ためのユニーク なキーを指定 し ます。 挿入の操作には WHERE
句は必要ないので、 挿入だけを行 う 場合は、
KeyDefオブジ ェ ク ト は不要です。KeyDefのキーには、DBMSに よ っ て入力ま た は変更 さ れる カ ラ ムが含まれない よ う に し て く だ さ い。 dbKona では、 正し い WHERE句を作成する ためにキー カ ラ ムの値を把握し てお く 必要があ るか ら です。
ま た、 SQL 文の末尾を構成する任意の文字列で TableDataSetを限定する こ と も で き ます。 Oracle データベース で dbKona を使用し てい る場合、 た と えば
「forUPDATE」 な どの文字列で TableDataSetを限定する と 、 ク エ リ に よ っ て検 索 さ れる レ コー ド を ロ ッ ク で き ます。
TableDataSet
は、
KeyDefを使用し て作成で き ます。 KeyDef は dbKona のオブ
ジ ェ ク ト であ り 、 DBMS に更新情報および削除情報を保存する ためのユニーク なキーを設定する場合に使用 さ れます。 Oracle データベース を使用し てい る場合 は、TableDataSetの KeyDefを テーブルご と にユニー ク なキーであ る 「ROWID」 に設定で き ます。 その後、 「ROWID」 を含む一連の属性を使用し て、 TableDataSet を作成し ます。TableDataSetは、java.sql.Connectionのコ ンテキ ス ト 内で作成さ れま す。 つま り 、Connection
オブジ ェ ク ト を引数 と し て
TableDataSetコ ン ス
ト ラ ク タ に渡し ます。 そのデータ検索は、 DBMS テーブルの名前によ って指 定 さ れます。 更新情報および削除情報を保存する場合は、TableDataSet
の
作成時に KeyDefオブジ ェ ク ト を指定する必要があ り ます。TableDataSet を作成し た後で、where()メ ソ ッ ド および order() メ ソ ッ ド を使用し て ク エリ を修正し、WHERE
句および
ORDER BY句を設定する こ と も でき ます。
TableDataSetには、 関連付け られているデフ ォル ト の SelectStmtオブ ジ ェ ク ト があ り ます。 こ のオブジ ェ ク ト は、 サンプルを使用し た ク エ リ 機能 を利用する場合に使用さ れます。
QueryDataSetには、Recordオブジ ェ ク ト (0 が起点の イ ンデ ッ ク ス を指定 し てア ク セ スする ) が含まれます。 Record オブジ ェ ク ト には Value オブジ ェ ク ト (1 が起点の イ ンデ ッ ク ス を指定し てア ク セ スする ) が含まれます。
TableDataSetの属性は、schemaに よ っ て記述さ れます。 schema には、
TableDataSetに表示さ れ るデータベース カ ラ ムの名前、 データ型、 サ イ ズ、 順番などの TableDataSetの属性情報が格納 さ れます。
TableDataSetは、 WebLogic Server サーバにキ ャ ッ シ ュ でき ます。
setRefreshOnSave() メ ソ ッ ド は、 保存中に挿入ま たは更新さ れた レ コー ド もすぐ に DBMS か ら更新さ れ る よ う に、TableDataSet
を設定し ます。
dbKona API
TableDataSetに DBMS に よ っ て変更 さ れたカ ラ ム (Microsoft SQL Server の IDENTITY カ ラ ムや挿入ま たは更新が き っかけ と なっ て変更 さ れたカ ラ ム など ) があ る場合は、 こ のフ ラ グ を設定し ます。
Refresh() メ ソ ッ ド は、 データベース に保存さ れた TableDataSet内のレ コー ド 、 つま り TableDataSet
で変更し た レ コー ド を更新し ます。 レ コー ド
の変更内容は失われ、 レ コー ド には更新済みのマーク が付き ます。 削除の マー ク が付け られた レ コー ド は、 更新 さ れません。TableDataSetに追加 さ れた レ コー ド の場合は、 更新元の DBMS の行が存在し ない こ と を示す例外 が生成さ れます。saveWithoutStatusUpdate() メ ソ ッ ド は、TableDataSet内のレ コー ド の 保存状態を更新せずに DBMS に TableDataSet レ コー ド を保存し ます。 ト ラ ンザ ク シ ョ ン内で TableDataSet
レ コー ド を保存する場合には、 こ の メ
ソ ッ ド を使用し ます。 ト ラ ンザ ク シ ョ ンが ロールバ ッ ク さ れて も、TableDataSet内のレ コー ド はデータベース と 一致し てお り 、 ト ラ ンザ ク シ ョ ンを再試行で き ます。 ト ラ ンザ ク シ ョ ンの コ ミ ッ ト 後、
updateStatus()を呼び出し て TableDataSet内のレ コー ド の保存状態を更 新し ます。 一度、saveWithoutStatusUpdate()
を使用し て レ コー ド を保存
する と 、 そのレ コー ド に対し て updateStatus()を呼び出すま でレ コー ド は
変更で き ません。TableDataSet.setOptimisticLockingCol() メ ソ ッ ド を使用する と 、 TableDataSetの 1 つのカ ラ ム をオプテ ィ ミ ス テ ィ ッ ク ロ ッ ク のカ ラ ム と し て指定でき ます。 こ のカ ラ ムを アプ リ ケーシ ョ ンで使用する と 、 データベー スか ら読み込んでか ら他のユーザがその行を変更し たかど う かを検出で き ま す。 dbKona では、 行が変更 さ れる たびに DBMS に よ っ てカ ラ ムが更新 さ れ る よ う にな ってい るので、TableDataSetの値に よ って こ のカ ラ ムが更新 さ れる こ と はあ り ません。 dbKona では、 レ コー ド ま たは TableDataSetを保 存する と き に UPDATE文の WHERE句で こ のカ ラ ムが使用さ れます。 別のユー ザがそのレ コー ド を変更し た場合は、 dbKona によ る更新は失敗し ます。 こ の場合、Record.refresh()を使用し てそのレ コー ド の新し い値を取 り 出し、
レ コー ド に変更を加えてか ら、 再度保存を試みる こ と ができ ます。
TableDataSet ク ラ ス (weblogic.db.jdbc.TableDataSetを参照 ) には、 次の メ ソ ッ ド があ り ます。
TableDataSet
を作成する ための メ ソ ッ ド
WHERE句および ORDER BY句を設定する ための メ ソ ッ ド
KeyDefを取得する ための メ ソ ッ ド
関連付け ら れた JDBC ResultSetを取得する ための メ ソ ッ ド
SelectStmt
を取得する ための メ ソ ッ ド
関連付け ら れた DBMS テーブル名を取得する ための メ ソ ッ ド
変更内容をデータベースに保存する ための メ ソ ッ ド
DBMS
か ら レ コー ド を更新する ための メ ソ ッ ド関連する その他情報を取得する ための メ ソ ッ ド
そのスーパー ク ラ スであ る DataSetには、 レ コー ド キ ャ ッ シ ュ を管理する ため の メ ソ ッ ド が含まれています。