JSTLリファレンス(逆引き)

JSPリファレンス
 
Web struts.wasureppoi.com
トランザクションを定義する:<sql:transaction>
スポンサード リンク

トランザクションを定義するには、<sql:transaction>タグを使用します。

<sql:transaction>タグは、1つのトランザクションで更新系SQLを複数回発行する場合に、使用します。

<sql:transaction>タグ本体に、下記のように<sql:update>タグを使用して必要な更新SQLを記述します。

      <sql:transaction>    ・・・・・・  トランザクション開始
       <sql:query sql="update emp set 〜"/>
       <sql:query sql="insert into 〜"/>
       <sql:query sql="delete from 〜"/>
     </sql:transaction>  ・・・・・・・  トランザクション終了

<sql:transaction>タグの開始で、トランザクションが開始され、<sql:transaction>タグを閉じるとコミットされます。
また、途中で例外が発生した場合はロールバックされます。

<sql:transaction>タグの属性
属性 必須 説明
dataSource × データベースコネクションが格納されいる変数名
isolation × トランザクション分離レベル。以下の4つから指定。詳細は以下の表を参照
 ・read_uncommitted
 ・read_committed
 ・repeatable_read
 ・serializable

トランザクション分離レベル
設定値 ダーティー リード ファジーリード ファントムリード
read_uncommitted あり あり あり
read_committed なし あり あり
repeatable_read なし なし あり
serializable なし なし なし

●ダーティーリード
コミットされていないトランザクションが書き込んだデータを、別のトランザクションが読み込める状態。

●ファジーリード
あるトランザクションが、同一レコードを複数回読み込んだときに、別のコミットされたトランザクションによってそのデータが変更される状態。

●ファントムリード
あるトランザクションが、同一の検索条件でレコードを複数回読み込んだときに、コミットされた別のトランザクションによって、新規レコードが追加されたり、削除される状態。

下記の順番で、トランザクション分離レベルは高くなるが、その分ロックが掛かる時間が増えるため、分離レベルとロックの間でトレードオフが必要となる。
 「read_uncommitted」 → 「read_committed」 → 「repeatable_read」 → 「serializable」


例1) 1つのトランザクションで、表「emp」にupdate、deleteのSQLを実行する。

<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<sql:setDataSource dataSource="jdbc/datasource" var="db"/>

<sql:transaction dataSource="${db}" >

   <sql:update sql="update emp set salary=300 where emp_id = 'E01'" />
  <sql:update sql="delete from emp where emp_id = 'E02'" />

</sql:transaction>



スポンサード リンク

Databaseタグの種類
データベースへ接続する:<sql:setDataSource>
データベースのレコードを取得する:<sql:query>
データベースにレコードを登録/更新/削除する:<sql:update>
トランザクションを定義する:<sql:transaction>
パラメータを指定する:<sql:param>
日付型のパラメータを指定する:<sql:dateParam>

JSTLへ
忘れっぽいエンジニアのJakarta Strutsリファレンス TOPへ