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

ctuneparamオプションについて

第5章 アプリケーションのコンパイルおよび実行

5.2 ネーミングサービスと JDBC データソース登録ツール

5.2.3 JDBCデータソース登録ツール

5.2.3.4 ctuneparamオプションについて

2.6.3 行識別子(SQL ROWID)を利用したデータ操作

ここでは、行識別子の概要と注意事項について説明します。

行識別子

(SQL ROWID)

とは

行識別子は、データベース中の任意の表の行を一意に識別するためのものです。Symfoware Serverにおける行識別子 は、“ROW_ID”で表します。行識別子は、問合せ指定の選択リストに指定して値を取り出すことができます。取り出した 行識別子は、以下の探索条件に指定して任意の行を操作するために使用します。

・ UPDATE文:探索の探索条件

・ DELETE文:探索の探索条件

・ 問合せ指定のWHERE句の探索条件

行識別子を使用することにより、データベース中の単一行を高速に操作することができます。また、あらかじめ検索した 集合の任意の行を一意に識別して操作することができます。

行識別子を使用して行の更新を行います。

行識別子使用時の注意

行識別子を使用する場合の注意事項を、以下に示します。

・ 行識別子を使用する場合には、JDK6とJDBC4.Xドライバの組合せが必要になります。

・ 問合せ指定で取り出した行識別子を、SQLデータ操作文のWHERE句の探索条件に指定する場合、SQLデータ操 作文は、行識別子を取り出した問合せ指定と同じ表を操作する必要があります。取り出した行識別子を、異なる表を 操作するデータ操作の探索条件に指定すると、検索データは見つかりません。

・ 取り出した行識別子は、そのトランザクション内で再検索または更新に使用することができます。ただし、トランザクショ ンの独立性水準により同一トランザクション内においても、同じデータを検索、もしくは、異なる行を更新してしまうこと があります。

独立性水準 同一行の操作

SERIALIZABLE 同一行の操作を保証します。

REPEATABLE READ 同一行の操作を保証します。

READ COMMITTED 以下のいずれかの条件で取得した行識別子は、再検

索で異なる行を識別することがあります。

・トランザクションアクセスモードがREAD ONLY

・カーソルの更新可能性句がREAD ONLY READ

UNCOMMITTED

再検索で異なる行を識別することがあります。

・ 取り出した行識別子を、他のトランザクションで再検索または更新に利用すると、同じデータを検索、または、異なる 行を更新することがあります。このような場合は、行識別子を取り出したときに行のデータも同時に取り出しておき、行 識別子を利用して更新する前に、行識別子で再検索して行のデータが他のトランザクションにより変更されていない かどうかを調べる必要があります。

事象 原因

検索データなし 該当行が、他のトランザクションにより削除または更新されています。

前回の検索結果 と値が異なる

・ 他のトランザクションにより行が更新されています。

・ 他のトランザクションにより行が削除されたあと、別の行が挿入されています。

参照

行識別子を指定可能な箇所についての詳細は、“SQLリファレンス”を参照してください。

注意

プロシジャルーチン内の処理には、行識別子は使用できません。

2.6.4 バッチ更新機能について

バッチ更新機能とは、データ更新を行うSQL文(INSERT文、UPDATE文、DELETE文)を一度に複数データベースに送 り、処理させることができる機能です。PreparedStatementインタフェース使用時、複数のSQL文をまとめて送ることで、通 信量も待ち時間も少なくてすむため、パフォーマンスが向上します。

バッチ更新機能を使わない場合の更新処理

SQL文を1つ実行するたびにSQL文の送信と結果の受信が行われます。

バッチ更新機能を使う場合の更新処理

複数のSQL文を一度に送信して、まとめて結果を受信するため通信回数が少なくなります。

2.7 デッドロックについて

デッドロック検出時のアプリケーションでの振る舞いについて以下に説明します。

デッドロックはSymfoware Serverが自動的に検出します。Symfoware Serverがデッドロックを検出すると、複数のトランザ クションのうち、1つのトランザクションを取り消して、アプリケーションにエラー復帰します。このとき、SQLSTATEには40001 が設定されます。

デッドロックの発生を通知されたアプリケーションでは、一般にデッドロックが発生したトランザクションの再実行を試みま す。トランザクションを再実行するには、トランザクションを開始した直前に制御を移します。

2.8 国際化に対応したアプリケーションについて

ここでは国際化に対応するアプリケーション利用時に便利な機能を説明します。

タイムゾーン機能

日時値データを、指定したタイムゾーンの日時値に変更して、格納、および取得することができます。

本機能を使用することで、異なるタイムゾーンの時刻を取得することができ、複数のタイムゾーンにまたがるデータベース システムを利用する場合、タイムゾーンを統一して容易にデータベースに格納できます。

参照

日時値の詳細については“SQLリファレンス”を参照してください。

Unicode文字のストリーム機能

以下のメソッドを利用することで、データベースの文字列データをUnicode文字ストリームとして取得、挿入、更新ができま す。

・ ResultSetインタフェース

- getCharacterStreamメソッド

- updateCharacterStreamメソッド

・ PreparedStatementインタフェース

- setCharacterStreamメソッド

・ CallableStatementインタフェース

- getCharacterStreamメソッド

- setCharacterStreamメソッド

・ Clobインタフェース

- getCharacterStreamメソッド

- setCharacterStreamメソッド

参照

詳細は“Java APIリファレンス”を参照してください。

3 章 アプリケーションの作成

本章では、アプリケーションの作成方法について記述例を用いて説明します。

3.1 コーディング方法

JDBCドライバを利用したアプリケーションのコーディング方法について説明します。

Interstage Studioを利用したコーディング

ビジネスアプリケーションを効率的に開発するための統合開発環境であるInterstage Studioを使用することにより、一連の 開発作業を統合された使いやすいビュー操作によって操作することが可能です。

また、Interstage Studioでは、さまざまなアプリケーションの開発支援機能を提供しているため、アプリケーション開発の生 産性を向上させることが可能です。

Interstage Studioでは、以下のアプリケーションが開発できます。

連携形態 アプリケーション種別 作成方法 EJBアプリ連携 Session

Bean(STATEFUL)

Interstage Studioが出力する ひな型のソースファイルに ユーザロジックを追加。

Session

Bean(STATELESS) Entity Bean(BMP) Entity Bean(CMP) Webアプリ連携 JSP

Servlet

Javaアプリ連携 Javaアプリケーション

Interstage Studioによるアプリケーション開発作業時に異常が発生した場合には、Interstage Studioのドキュメントを参照し て対処を行ってください。

参照

Interstage Studioの詳細については、“Interstage Studio 解説書”および“Interstage Studio ユーザーズガイド”を参照して ください。

エディタによるコーディング

エディタなどを利用してソースファイルにJava言語で直接コーディングを行う方法です。

3.2 データベースへの接続/切断

操作手順

データベースと接続/切断をする場合、以下の手順で行います。

ここでは、DataSourceインタフェースを利用した場合について説明しています。

記述例

データベースと接続/切断をする場合の記述例を以下に説明します。

InitialContext ctx = new InitialContext(); (1) DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ds1"); (2) Connection con = ds.getConnection(); (3) con.setAutoCommit(false); (4) :

con.commit(); (5) :

con.close(); (6) (1) JNDI環境の指定

(2) JDBCデータソースの取得 (3) データベースとの接続 (4) 自動コミットモードの無効化 (5) トランザクションのコミット (6) データベースとの接続の切断

以下に各項目の設定方法を示します。

JNDI環境の指定

JNDI APIを使用して下記の形式で指定します。

【記述形式】

InitialContext ctx = new InitialContext();

JDBCデータソースの取得

JNDIのコンテキストを使用して、JDBCデータソースを取得します。

【記述形式】

DataSource ds =

(DataSource)ctx.lookup("java:comp/env/jdbc/<datasource_name>");

【引数】

<datasource_name>

JDBCデータソース登録時に指定した、JDBCデータソース名を指定します。省略することはできません。

データベースとの接続

データベースと接続します。

自動コミットモードの無効化

自動コミットモードを無効化します。

ConnectionインタフェースのsetAutoCommitメソッドを使用します。

トランザクションのコミット

トランザクションをコミットします。

Connectionインタフェースのcommitメソッドを使用します。

データベースとの接続の切断

データ参照更新などの処理の終了後、データベースとの接続を切断する必要があります。

ネーミングサービスの運用方法については、“5.2.1 ネーミングサービスの起動”を参照してください。

注意

データベースとの接続処理で、アプリケーション実行環境のロケールを認識する前に異常終了すると、英語のエラー メッセージが返却されます。

3.3 データ参照

操作手順

データベースのデータを参照する場合、以下の手順で行います。

この例では、スキーマ名“GENERAL”、表“EMPLOYEE”の情報を参照します。

記述例

データベースのデータを参照する場合の記述例を以下に説明します。

Statement stmt = con.createStatement(); (1) ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE"); (2) int iID = 0; (2) String sName = null; (2) while(rs.next()) (3) { (3) iID = rs.getInt(1); (4) sName = rs.getString(2); (4) System.out.println("ID = " + iID); (4) System.out.println("NAME = " + sName); (4) } (4) rs.close(); (5) stmt.close(); (5) con.commit(); (6) (1) SQL文を実行するためのオブジェクトの生成

(2) ResultSetオブジェクトの生成 (3) カーソルの位置づけ

(4) ResultSetオブジェクトからのデータ取得 (5) オブジェクトのクローズ

(6) トランザクションのコミット

以下に各項目の設定方法を示します。

SQL文を実行するためのオブジェクトの生成

ConnectionインタフェースのcreateStatementメソッドを使用し、Statementインタフェースのオブジェクトを生成します。

ResultSetオブジェクトの生成

StatementインタフェースのexecuteQueryメソッドを使用し、ResultSetオブジェクトを生成します。

カーソルの位置づけ

ResultSetインタフェースのnextメソッドを使用し、カーソルの位置づけを現在の位置から1行下に移動します。