Transactionインタフェースには、問合せとアプリケーションをテストおよびデバッグするための次のようなユーティリティ・メソッドが用意されています。
dumpQueryResult
: このメソッドでは、問合せの結果が(場合によっては非常に長い)文字列に書き込まれます。このメソッドでは、3つのパラメータが使用されます。1つ目はSQL問合せ文です。2つ目は、結果を文字列にダンプするクラスです。このクラスはoracle.jbo.server.QueryDump
インタフェースを実装する必要があります。このクラスの実装により、3つ目のパラメータ(nullの場合もある)の処理が決まります。Business Components for Javaフレームワークには、次のメソッドが用意されています。
oracle.jbo.server.QueryDumpCSV()
: 問合せ結果をカンマ区切りのテキスト形式でダンプします。問合せにより大きな結果セットが生成される場合、このメソッドは実用的ではありません。
oracle.jbo.server.QueryDumpTab()
: 問合せ結果をタブ区切りのテキスト形式でダンプします。
executeCommand
: このメソッドでは、サーバーにより実行される有効なSQL文をパラメータとして使用します。戻り値は、SQL文によって影響を受けた行の数です。
次のコード例では、dumpQueryResult
が使用されています。
public static void demoSimpleFetch(ApplicationModule appMod) {
// Define and execute a simple SQL statement.
String sqlStr = "SELECT Emp.ename FROM EMP Emp ";
// dumpQueryResult is a utility method for testing queries.
String result = appMod.getTransaction().dumpQueryResult(sqlStr,
"oracle.jbo.server.QueryDumpTab",
null);
System.out.println(sqlStr);
System.out.println(result);
}
次のコード例では、executeCommand
が使用されています。SQL文字列は、EMP表を更新するように設計されています。この例では、文字列がexecuteCommand
に渡され、実際に更新された行の数を示すメッセージが表示されます。
public static void demoUpdateColumn(ApplicationModule appMod) {
String sqlStr = "UPDATE EMP " +
"SET MGR=7007 " +
"WHERE MGR=7698 ";
int n = appMod.getTransaction().executeCommand(sqlStr);
System.out.println("Updated " + n + " rows.");
}
executeCommand
では有効なSQL文がすべて実行されるため、このメソッドを使用する際は十分に注意してください。たとえば、次のようなDDLコマンドの操作を実行するとします。
appMod.getTransaction().executeCommand("DROP TABLE MYTEMPTABLE");
この場合、DDL操作で実行された暗黙的なコミットにより、未処理のデータベース・トランザクションが誤ってコミットされてしまったり、行ロックが解除されてしまう可能性があります。