jp.littlesoft.sql
クラス SQLDataResolverImpl

java.lang.Object
  上位を拡張 jp.littlesoft.sql.SQLAdaptor
      上位を拡張 jp.littlesoft.sql.SQLDataResolverImpl
すべての実装されたインタフェース:
Serializable, DataResolver, ISQLDataResolver

public class SQLDataResolverImpl
extends SQLAdaptor
implements ISQLDataResolver

Tableオブジェクトの内容をSQLデータベースへ書き戻すクラス。

バージョン:
1.3.0
作成者:
LittleSoft Corporation
関連項目:
直列化された形式

入れ子のクラスの概要
static class SQLDataResolverImpl.OptimisticLockType
          楽観的ロックの種別を管理するクラス。
 
クラス jp.littlesoft.sql.SQLAdaptor から継承された入れ子のクラス/インタフェース
SQLAdaptor.SQLServerType, SQLAdaptor.TransactionIsolationType
 
フィールドの概要
 
クラス jp.littlesoft.sql.SQLAdaptor から継承されたフィールド
getPrimaryKeyAvailable, jdbcConnection, logger, queryTimeout
 
コンストラクタの概要
SQLDataResolverImpl()
          コンストラクタ。
 
メソッドの概要
 void addResolvingListener(ResolvingListener l)
          ResolvingListenerを登録します。
 void execute(Table<?> table)
          テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。
 void execute(Table<?> table, boolean pendingCommit)
          テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。
<E extends Serializable>
void
execute(Table<E> table, boolean pendingCommit, ResolvingEvent.Type resolveType)
          テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。
 String[] getKeyColumns()
          データベース更新対象行を識別するカラム名配列をを取得します。
 SQLDataResolverImpl.OptimisticLockType getOptimisticLockType()
          楽観的排他制御の種別を取得します。
 String getSQLDelete()
          削除処理で使用するDELETE文を取得します。
 String getSQLInsert()
          挿入処理で使用するINSERT文を取得します。
 String getSQLUpdate()
          更新処理で使用するUPDATE文を取得します。
 String getTargetDBCatalog()
          更新対象データベーステーブルが存在するカタログ名を取得します。
 String getTargetDBSchema()
          更新対象データベーステーブルが存在するスキーマ名を取得します。
 String getTargetDBTable()
          更新対象とするデータベーステーブル名を取得します。
protected  IndexedMap<String,Column> getUpdateTableColumns(DatabaseMetaData metaData, String catalog, String schema, String tableName, boolean isSearchMetaDataWithinSchema, boolean isSearchMetaDataByUpperCase, boolean isSearchMetaDataByLowerCase)
          更新テーブルのColumnsを作成します。
 boolean isColNameRequireDblQuote()
          INSERT/DELETE/UPDATE時にテーブル名,カラム名をダブルクォーテーションで囲むかどうかを調べます。
 boolean isPendingCommit()
          executeメソッド内でのコミットを保留するかどうか調べます。
 void removeResolvingListener(ResolvingListener l)
          ResolvingListenerを削除します。
 void setColNameRequireDblQuote(boolean flag)
          INSERT/DELETE/UPDATE時にテーブル名,カラム名をダブルクォーテーションで囲むかの設定を行ういます。
 void setKeyColumns(String[] keyColumns)
          データベース更新対象行を識別するカラム名配列を設定します。
 void setOptimisticLockType(SQLDataResolverImpl.OptimisticLockType newOptimisticLockType)
          楽観的排他制御の種別を設定します。
 void setPendingCommit(boolean pendingCommit)
          executeメソッド内でのコミットを保留するかどうかを設定します。
 void setSQLDelete(String sqlDelete)
          削除処理で使用するDELETE文を設定します。
 void setSQLInsert(String sqlInsert)
          挿入処理で使用するINSERT文を設定します。
 void setSQLUpdate(String sqlUpdate)
          更新処理で使用するUPDATE文を設定します。
 void setTargetDBCatalog(String targetDBCatalog)
          更新対象データベーステーブルが存在するカタログ名を設定します。
 void setTargetDBSchema(String targetDBSchema)
          更新対象データベーステーブルが存在するスキーマ名を設定します。
 void setTargetDBTable(String targetDBTable)
          更新対象とするデータベーステーブル名を設定します。
 
クラス jp.littlesoft.sql.SQLAdaptor から継承されたメソッド
bindParamValues, bindParamValues, bindResultValues, checkConnection, close, connect, connect, createStatement, finalize, getClientId, getClientId, getColumnValidator, getConnection, getConnectProperty, getDBPassword, getDBURL, getDBUserName, getJDBCDriverClassName, getPrimaryKeyColumns, getQueryTimeout, getSQLServerType, isAutoCommit, isConnecting, isConnectionOwner, isSearchMetaDataByLowerCase, isSearchMetaDataByUpperCase, isSearchMetaDataWithinSchema, prepareCall, preparedStatement, setAutoCommit, setClientId, setColumnValidator, setConnection, setConnectProperty, setDBPassword, setDBURL, setDBUserName, setJDBCDriverClassName, setQueryTimeout, setSearchMetaDataByLowerCase, setSearchMetaDataByUpperCase, setSearchMetaDataWithinSchema, setSQLServerType, setTransactionIsolation
 
クラス java.lang.Object から継承されたメソッド
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース jp.littlesoft.sql.ISQLDataResolver から継承されたメソッド
close, getConnection, setConnection
 

コンストラクタの詳細

SQLDataResolverImpl

public SQLDataResolverImpl()
コンストラクタ。

メソッドの詳細

setKeyColumns

public void setKeyColumns(String[] keyColumns)
                   throws DataException
データベース更新対象行を識別するカラム名配列を設定します。

executeメソッドで自動生成、適用されるUPDATE, DELETE文のWHERE句を構成するカラム名を指定します。
このプロパティを省略した場合、Tableオブジェクトと更新対象DBテーブルに両方含まれる全ての列によってWHERE句に含まれます。
(但し、BLOBなど一般的にWHERE句に含めることができない列は除かれます)

このプロパティは楽観的同期処理(楽観的な排他)を実現する上で重要です。

UPDATE, DELETEのWHERE句に与えられる値はTableがDBテーブルから読み取った値(OldValue)です。
アプリケーションプログラムがTableのデータ値を変更した場合でも、OldValueは保持されます。
SQLDataResolverは、このOldValueをもとに更新対象行を識別しているので、他のトランザクションから更新対象行の内容が先変更されている場合は、 更新対象行を特定できない為、例外を発生させます。
アプリケーションプログラムはこの例外をキャッチして、自らのトランザクションをロールバックする必要があります。

このような楽観的同期処理のメカニズムを実現する為、このプロパティにはDBテーブルの主キー列に加えて、 トランザクション競合を検出するための列を追加するようにしてください。
注意:データ取得のSELECT文でカラムの別名を指定した場合でも、当プロパティには実際のカラム名を指定する必要があります。

定義:
インタフェース ISQLDataResolver 内の setKeyColumns
パラメータ:
keyColumns - カラム名配列
例外:
jp.littlesoft.data.DataException - 例外発生時
DataException

getKeyColumns

public String[] getKeyColumns()
データベース更新対象行を識別するカラム名配列をを取得します。

定義:
インタフェース ISQLDataResolver 内の getKeyColumns
戻り値:
カラム名配列
例外:
jp.littlesoft.data.DataException - 例外発生時

setTargetDBTable

public void setTargetDBTable(String targetDBTable)
                      throws DataException
更新対象とするデータベーステーブル名を設定します。

注意:Oracleのリモートデータベース上にあるテーブルは指定できません。
その場合は、更新対象のリモートテーブルを取得するビューを作成し、ビュー経由でデータの更新を行ってください。

定義:
インタフェース ISQLDataResolver 内の setTargetDBTable
パラメータ:
targetDBTable - 更新テーブル名
例外:
DataException - 例外発生時

getTargetDBTable

public String getTargetDBTable()
更新対象とするデータベーステーブル名を取得します。

定義:
インタフェース ISQLDataResolver 内の getTargetDBTable
戻り値:
更新テーブル名

setTargetDBSchema

public void setTargetDBSchema(String targetDBSchema)
                       throws DataException
更新対象データベーステーブルが存在するスキーマ名を設定します。

定義:
インタフェース ISQLDataResolver 内の setTargetDBSchema
パラメータ:
targetDBSchema - スキーマ名
例外:
DataException - 例外発生時

getTargetDBSchema

public String getTargetDBSchema()
更新対象データベーステーブルが存在するスキーマ名を取得します。

定義:
インタフェース ISQLDataResolver 内の getTargetDBSchema
戻り値:
更新テーブルスキーマ名

setTargetDBCatalog

public void setTargetDBCatalog(String targetDBCatalog)
                        throws DataException
更新対象データベーステーブルが存在するカタログ名を設定します。

注意:MS-SQL Server 2000を使用する場合で、接続ユーザと異なるカタログのテーブルを更新する場合、更新テーブルのカタログ名を設定します。
MS-SQL Server 2000以外を使用する場合や、接続ユーザと同じカタログ内のテーブルを更新する場合には、設定する必要はありません。

定義:
インタフェース ISQLDataResolver 内の setTargetDBCatalog
パラメータ:
targetDBCatalog - 更新テーブルカタログ名
例外:
DataException

getTargetDBCatalog

public String getTargetDBCatalog()
更新対象データベーステーブルが存在するカタログ名を取得します。

定義:
インタフェース ISQLDataResolver 内の getTargetDBCatalog
戻り値:
更新テーブルカタログ名

setSQLInsert

public void setSQLInsert(String sqlInsert)
挿入処理で使用するINSERT文を設定します。

このプロパティを省略するとexecuteメソッド内で、自動作成されるINSERT文が使用されます。
※注 1行だけ挿入されるINSERT文を設定してください。
 例:
 setSQLInsert(
    "INSERT INTO TBL_X VALUES(:COL_A, :COL_B, CURRENT_TIMESTAMP)");
 
:COL_A, :COL_Bには、テーブルオブジェクト内の挿入対象行オブジェクトの"COL_A","COL_B"のカラム値が割り当てられます。
※上記例では、CURRENT_TIMESTAMPは、データベースの現在時刻に置き換えられます。(Oracleの場合)

定義:
インタフェース ISQLDataResolver 内の setSQLInsert
パラメータ:
sqlInsert - INSERT文

getSQLInsert

public String getSQLInsert()
挿入処理で使用するINSERT文を取得します。

setSQLInsertで設定した値を取得することができますが、executeメソッド内で、自動作成される内容を取得する事はできません。

定義:
インタフェース ISQLDataResolver 内の getSQLInsert
戻り値:
INSERT文

setSQLUpdate

public void setSQLUpdate(String sqlUpdate)
更新処理で使用するUPDATE文を設定します。

このプロパティを省略するとexecuteメソッド内で、自動作成されるUPDATE文が使用されます。
※注 1行だけ更新されるUPDATE文を設定してください。
 例:
 setSQLUpdate(
    "UPDATE TBL_X"
  + " SET COL_A = FUNC(:COL_A), UPDT_TIMESTAMP = CURRENT_TIMESTAMP"
  + " WHERE UPDT_TIMESTAMP = :@OLD@_UPDT_TIMESTAMP"
  + " AND ROWIDTOCHAR(ROWID) = :@OLD@_ROWIDCHAR"
  );
 
:COL_Aには、テーブルオブジェクト内の更新対象行オブジェクトの"COL_A"のフィールド値が割り当てられます。
WHERE句のパラメータ名が":@OLD@_"で開始されている点に注意してください。
":@OLD@_"で開始するパラメータには更新対象行が、変更される前に保持していた値(データベースから取り出した際の値)が設定されます。

定義:
インタフェース ISQLDataResolver 内の setSQLUpdate
パラメータ:
sqlUpdate - UPDATE文

getSQLUpdate

public String getSQLUpdate()
更新処理で使用するUPDATE文を取得します。

setSQLUpdateで設定した値を取得することができますが、executeメソッド内で、自動作成される内容を取得する事はできません。

定義:
インタフェース ISQLDataResolver 内の getSQLUpdate
戻り値:
UPDATE文

setSQLDelete

public void setSQLDelete(String sqlDelete)
削除処理で使用するDELETE文を設定します。

このプロパティを省略するとexecuteメソッド内で、自動作成されるDELETE文が使用されます。
※注 1行だけ更新されるDELETE文を設定してください。
 例:
 setSQLDelete(
    "DELETE FROM TBL_X"
  + " WHERE UPDT_TIMESTAMP = :@OLD@_UPDT_TIMESTAMP"
  + " AND ROWIDTOCHAR(ROWID) = :@OLD@_ROWIDCHAR"
  );
 
WHERE句のパラメータ名が":@OLD@_"で開始されている点に注意してください。
":@OLD@_"で開始するパラメータには更新対象行が、変更される前に保持していた値(データベースから取り出した際の値)が設定されます。

定義:
インタフェース ISQLDataResolver 内の setSQLDelete
パラメータ:
sqlDelete - DELETE文

getSQLDelete

public String getSQLDelete()
削除処理で使用するDELETE文を取得します。

setSQLDeleteで設定した値を取得することができますが、resolveChangeメソッド内で、自動作成される内容を取得するは事できません。

定義:
インタフェース ISQLDataResolver 内の getSQLDelete
戻り値:
DELETE文

execute

public void execute(Table<?> table)
             throws DataException
テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。

定義:
インタフェース DataResolver 内の execute
パラメータ:
table - テーブルオブジェクト
例外:
jp.littlesoft.exception.data.DataException - 例外発生時
DataException - 例外発生時

execute

public void execute(Table<?> table,
                    boolean pendingCommit)
             throws DataException
テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。

パラメータ:
table - テーブルオブジェクト
pendingCommit - True:このメソッド内でコミットを行わない、False:行う
例外:
jp.littlesoft.exception.data.DataException - 例外発生時
DataException

execute

public <E extends Serializable> void execute(Table<E> table,
                                             boolean pendingCommit,
                                             ResolvingEvent.Type resolveType)
             throws DataException
テーブルオブジェクトの変更内容をもとにデータベーステーブルの更新・追加・削除を行います。

パラメータ:
table - テーブルオブジェクト
pendingCommit - True:このメソッド内でコミットを行わない、False:行う
resolveType - テーブルオブジェクトデータ永続化の種類
例外:
DataException - 例外発生時
関連項目:
ResolvingEvent.Type

getUpdateTableColumns

protected IndexedMap<String,Column> getUpdateTableColumns(DatabaseMetaData metaData,
                                                          String catalog,
                                                          String schema,
                                                          String tableName,
                                                          boolean isSearchMetaDataWithinSchema,
                                                          boolean isSearchMetaDataByUpperCase,
                                                          boolean isSearchMetaDataByLowerCase)
                                                   throws SQLException,
                                                          DataException
更新テーブルのColumnsを作成します。

パラメータ:
metaData - メタデータ
catalog - カタログ名
schema - スキーマ名
tableName - テーブル名
isSearchMetaDataWithinSchema - True:スキーマ名指定で検索する
isSearchMetaDataByUpperCase - True:テーブル名を大文字限定で検索する
isSearchMetaDataByLowerCase - True:テーブル名を小文字限定で検索する
例外:
SQLException - SQL例外発生時
jp.littlesoft.data.DataException - 例外発生時
DataException

setColNameRequireDblQuote

public void setColNameRequireDblQuote(boolean flag)
INSERT/DELETE/UPDATE時にテーブル名,カラム名をダブルクォーテーションで囲むかの設定を行ういます。

パラメータ:
flag - True:ダブルクォーテーションで囲む、False:囲まない

isColNameRequireDblQuote

public boolean isColNameRequireDblQuote()
INSERT/DELETE/UPDATE時にテーブル名,カラム名をダブルクォーテーションで囲むかどうかを調べます。

戻り値:
True:囲む、False:囲まない

setOptimisticLockType

public void setOptimisticLockType(SQLDataResolverImpl.OptimisticLockType newOptimisticLockType)
楽観的排他制御の種別を設定します。

パラメータ:
newOptimisticLockType - 楽観的排他制御の種別
関連項目:
SQLDataResolverImpl.OptimisticLockType

getOptimisticLockType

public SQLDataResolverImpl.OptimisticLockType getOptimisticLockType()
楽観的排他制御の種別を取得します。

戻り値:
楽観的排他制御の種別
関連項目:
SQLDataResolverImpl.OptimisticLockType

removeResolvingListener

public void removeResolvingListener(ResolvingListener l)
ResolvingListenerを削除します。

定義:
インタフェース DataResolver 内の removeResolvingListener
パラメータ:
l - ResolvingListenerインターフェースを実装したオブジェクト
関連項目:
ResolvingListener

addResolvingListener

public void addResolvingListener(ResolvingListener l)
ResolvingListenerを登録します。

定義:
インタフェース DataResolver 内の addResolvingListener
パラメータ:
l - ResolvingListenerインターフェースを実装したオブジェクト
関連項目:
ResolvingListener

isPendingCommit

public boolean isPendingCommit()
executeメソッド内でのコミットを保留するかどうか調べます。

戻り値:
True:コミットを保留する、False:保留しない

setPendingCommit

public void setPendingCommit(boolean pendingCommit)
executeメソッド内でのコミットを保留するかどうかを設定します。

定義:
インタフェース ISQLDataResolver 内の setPendingCommit
パラメータ:
pendingCommit - True:コミットを保留する、False:保留しない


Copyright (C) 2006-2012 LittleSoft Corporation. All Rights Reserved.