• 検索結果がありません。

変更内容の検証

ドキュメント内 jdbc.book (ページ 172-175)

SelectStmt

手順 7. 変更内容の検証

レ コー ド を 1 つだけ取 り 出す場合のサンプルを以下に示し ます。 こ の方法は、 1 レ コー ド の変更内容を検証するには、 効率的な方法です。 こ のサンプルでは、

query-by-example

(

QBE

)

の句を使用し て TableDataSetか ら関心のあ る レ コー ド だけを取 り 出し てい ます。

TableDataSet tds2 = new TableDataSet(conn, "empdemo");

tds2.where("empno = 8000") .fetchRecords();

最後の手順 と し て、 各手順の後、 および各 save() メ ソ ッ ド の後に作成し た

insert」、 「update」、 および 「delete」 の各文字列の後に ク エ リ 結果を表示で き ます。 結果を表示する htmlKona の使用方法については、 前のチュー ト リ アル の 「コー ド のま と め」 を参照し て く だ さ い。

DataSetの操作を終了し た ら、 次の よ う に close() メ ソ ッ ド を使用し て各

DataSet を閉じ ます。

tds.close();

tds2.close();

コー ド のま とめ

次に、 こ の節で説明し た概念を使用する サンプル コー ド を示し ます。

package tutorial.dbkona;

import weblogic.db.jdbc.*;

import java.sql.*;

dbKona

の実装

import java.Properties;

public class rowid {

public static void main(String[] argv) throws Exception

{

Driver myDriver = (Driver)

Class.forName("weblogic.jdbc.oci.Driver").newInstance();

conn =

myDriver.connect("jdbc:weblogic:oracle:DEMO", "scott",

"tiger");

// ここで、レコードを 100 個挿入する

TableDataSet ts1 = new TableDataSet(conn, "empdemo");

for (int i = 1; i <= 100; i++) { Record rec = ts1.addRecord();

rec.setValue("empid", i)

.setValue("name", "Person " + i) .setValue("dept", i);

}

// 新しいレコードを保存する。dbKona は選択的に保存を行う // つまり、TableDataSet 内の変更されたレコードだけを保存し、

// ネットワーク トラフィックとサーバ呼び出しを削減する

System.out.println("Inserting " + ts1.size() + " records.");

ts1.save();

// 処理が完了したので DataSet を閉じる ts1.close();

// 更新および削除用の KeyDef を定義する

// ROWID Oracle 固有のフィールドで、更新および削除用の // 主キーとして機能することができる

KeyDef key = new KeyDef().addAttrib("ROWID");

// 最初に追加した 100 個のレコードを更新する TableDataSet ts2 =

new TableDataSet(conn, "empdemo", "ROWID, dept", key);

ts2.where("empid <= 100");

ts2.fetchRecords();

for (int i = 1; i <= ts2.size(); i++) { Record rec = ts2.getRecord(i);

rec.setValue("dept", i + rec.getValue("dept").asInt());

}

// 更新されたレコードを保存する

System.out.println("Update " + ts2.size() + " records.");

ts2.save();

// 同じ 100 個のレコードを削除する ts2.reset();

ts2.fetchRecords();

for (int i = 0; i < ts2.size(); i++) { Record rec = ts2.getRecord(i);

rec.markToBeDeleted();

}

// レコードをサーバから削除する

System.out.println("Delete " + ts2.size() + " records.");

ts2.save();

// DataSetResultSet、および Statement は、

// 操作が終わったら必ず閉じる必要がある ts2.close();

// 最後に、必ず接続を閉じる conn.close();

} }

dbKona での JDBC PreparedStatement の使い方

dbKona

では構文的に正し い SQL 文が作成 さ れる ため、 ベンダ固有の SQL の記

述方法について知識がそれほど必要ない と い う 点で便利です。 し か し、 dbKona で JDBC の PreparedStatementを使用で き る場合も あ り ます。

JDBC

PreparedStatementは、 複数回使用 さ れる SQL 構文を あ ら か じ めコ ンパ イルする場合に使用さ れます。PreparedStatementのパ ラ メ ータは、

PreparedStatement.clearParameters()を呼び出すこ と で消去で き ます。

PreparedStatmentオブジ ェ ク ト は、 JDBC Connectionク ラ ス ( こ れまでのサ ンプルで conn と い う 名前で使用 さ れていたオブジ ェ ク ト ) の

preparedStatement()メ ソ ッ ド を使用し て作成さ れます。 次のサンプルでは、

PreparedStatementを作成し てそれをループの中で実行 し ています。 こ の文に は、 従業員 ID、 名前、 および部署 と い う 3 つの入力 (IN) パ ラ メ ータ があ り ます。

こ のサンプルでは、 100 人の従業員を テーブルに追加し ます。

String inssql = "insert into empdemo(empid, " + "name, dept) values (?, ?, ?)";

PreparedStatement pstmt = conn.prepareStatement(inssql);

for (int i = 1; i <= 100; i++) { pstmt.setInt(1, i);

pstmt.setString(2, "Person " + i);

pstmt.setInt(3, i);

pstmt.executeUpdate();

}

dbKona

の実装

pstmt.close();

作業が終了し た ら、Statementオブジ ェ ク ト ま たは PreparedStatementオブ ジ ェ ク ト を必ず閉じ ます。

SQL

を意識せずに同じ タ ス ク を dbKona で実行する こ と も でき ます。 こ の場合、

KeyDefを使用し て、 更新ま たは削除する フ ィ ール ド を設定し ます。 詳細につい ては、 チュー ト リ アルの6-34 ページの 「KeyDef を使用し た DBMS データの変 更」 を参照し て く だ さ い。

dbKona でのス ト ア ド プロシージ ャの使い方

固有の タ ス ク ( シ ス テム ま たはベンダに依存し ない タ ス ク であ る場合が多い ) を 実行で き る、 リ モー ト マシンに格納さ れたプ ロ シージ ャや関数にア ク セス し て、

dbKona の能力を向上さ せる こ と ができ ます。 ス ト ア ド プ ロ シージ ャおよび関数

を使用する には、 dbKona の Java アプ リ ケーシ ョ ン と リ モー ト マシンの間で リ ク エス ト がどの よ う に受け渡し さ れ るかを理解する必要があ り ます。 ス ト ア ド プ ロ シージ ャ ま たは関数を実行する と 、 入力 さ れたパ ラ メ ータ の値が変更さ れま す。 ま た、 実行が成功し たか失敗し たかを示す値も返 さ れます。

dbKona

アプ リ ケーシ ョ ンでの最初の手順は、 DBMS に接続する こ と です。 こ こ

で示すサンプルでは、 最初のチュー ト リ アルで作成し た同じ Connectionオブ ジ ェ ク ト connを使用し ます。

ドキュメント内 jdbc.book (ページ 172-175)