SqlUtil

フレームワーク部品 [com.onepg.db]

← クラス一覧に戻る

クラス情報

パッケージ: com.onepg.db

クラス名: SqlUtil

説明

SQL実行ユーティリティクラス.

定数・変数一覧

ORACLE_PROTOCOL_ERR_AVOID_SQL

public String ORACLE_PROTOCOL_ERR_AVOID_SQL
ORACLEプロトコル違反回避SQL.
support.oracle.com(参考情報)

メソッド一覧

selectOneExists

public IoItems selectOneExists(Connection conn, SqlBean sb)
1件取得(ゼロ件エラー).
  • 対象データが1件のみ存在することが前提で使用する。
  • 結果がゼロ件の場合は例外エラーを投げる。
  • 結果が複数件の場合は例外エラーを投げる。

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

IoItems - 行データマップ

selectOne

public IoItems selectOne(Connection conn, SqlBean sb)
1件取得.
  • 対象データが1件のみ存在することが前提で使用する。
  • 結果がゼロ件の場合は null を返す。
  • 結果が複数件の場合は例外エラーを投げる。
  • 項目物理名は英字小文字となる。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

IoItems - 行データマップ

selectOneMultiIgnore

public IoItems selectOneMultiIgnore(Connection conn, SqlBean sb)
1件取得(複数存在OK).
  • 結果がゼロ件の場合は null を返す。
  • 複数件取得できた場合でもエラーとせず最初の1件を返す。
  • 項目物理名は英字小文字となる。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

IoItems - 行データマップ

select

public SqlResultSet select(Connection conn, SqlBean sb)
複数件取得.
  • SqlResultSet で返す。
  • SqlResultSet のイテレーターから取得した行マップの項目物理名は英字小文字となる。(AbstractIoTypeMap のキールール)
  • try 句(try-with-resources文)で使用する。
  • 本クラスではデフォルトフェッチサイズを 500 としている。全件フェッチしたい場合は SqlUtil#selectFetchAll(Connection, SqlBean) を使用する。
  • DBMSごとのフェッチサイズについて
    • Oralce はデフォルト 10 件となっており小さいため、フェッチサイズを指定する。
    • PostgreSQL はデフォルト 全件フェッチとなっており OutOfMemory になる可能性があるためフェッチサイズを指定する。
    • PostgreSQL はフェッチサイズ指定し(全件フェッチせず)、かつ取得データを更新し、かつ中間コミットするとカーソル無効エラー(SQLSTATE 34000)が発生するので、その場合は中間コミットをやめるか全件フェッチする必要がある。
      また処理が複雑になるが SQL の LIMIT句でデータを分割取得しても解決できる。
    • MS-SqlServer ではフェッチサイズを指定してもその通りにはならない場合があるため、OutOfMemory になる可能性がある場合は SQL の LIMIT句でデータを分割取得する必要がある。
[例]
try (final SqlResultSet rSet = SqlUtil.select(getDbConn(), sqlBuilder);) {
  for (final IoItems row : rSet) {
    :省略
  }
  if (rSet.getReadedCount() <= 0) {
    // ゼロ件の場合
  }
}

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

SqlResultSet - SQL結果セット

selectFetchAll

public SqlResultSet selectFetchAll(Connection conn, SqlBean sb)
複数件取得(全件フェッチ).
  • 基本的に本メソッドは使用しない。
  • 全件フェッチしないと不具合が発生する場合のみ使用する。
  • 本メソッドで大量件数取得するとメモリエラーが発生する可能性がある。

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

SqlResultSet - SQL結果セット

selectBulk

public IoRows selectBulk(Connection conn, SqlBean sb, int limitCount)
複数件一括取得.
  • 複数行リストを返す。
  • 結果がゼロ件の場合はサイズゼロのリストを返す。
  • 1行のマップの項目物理名は英字小文字となる。(AbstractIoTypeMap のキールール)
  • 本メソッドはメモリを消費するのでループ処理する場合は #select(Connection, SqlBean) を使用する。
  • 本メソッドで大量件数取得するとメモリエラーが発生する可能性がある。

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean
limitCount int 取得件数上限

戻り値

IoRows - 複数行リスト

selectBulkAll

public IoRows selectBulkAll(Connection conn, SqlBean sb)
複数件一括取得(全件取得).
  • 複数行リストを返す。
  • 結果がゼロ件の場合はサイズゼロのリストを返す。
  • 1行のマップの項目物理名は英字小文字となる。(AbstractIoTypeMap のキールール)
  • 本メソッドはメモリを消費するのでループ処理する場合は #select(Connection, SqlBean) を使用する。
  • 本メソッドで大量件数取得するとメモリエラーが発生する可能性がある。

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

IoRows - 複数行リスト

insertOne

public boolean insertOne(Connection conn, String tableName, AbstractIoTypeMap params)
テーブル指定1件登録.
  • テーブル名を指定して1件登録します。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が登録されるので注意が必要です。
  • 一意制約違反以外で反映件数がゼロ件の場合は例外エラーを投げる。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値

戻り値

boolean - 一意制約違反の場合は false、正常に1件登録された場合は true

insertOne

public boolean insertOne(Connection conn, String tableName, AbstractIoTypeMap params, String tsItem)
テーブル指定1件登録(タイムスタンプ自動セット).
  • テーブル名を指定して1件登録します。
  • 楽観排他制御用のタイムスタンプをセットします。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が登録されるので注意が必要です。
  • 一意制約違反以外で反映件数がゼロ件の場合は例外エラーを投げる。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値
tsItem String タイムスタンプ項目名(楽観排他制御用)

戻り値

boolean - 一意制約違反の場合は false、正常に1件登録された場合は true

updateOne

public boolean updateOne(Connection conn, String tableName, AbstractIoTypeMap params, String[] keyItems)
テーブル指定1件更新.
  • テーブル名を指定して1件更新します。
  • 複数件更新した場合は例外エラーとする。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が更新されるので注意が必要です。
  • キー項目で WHERE句が作成される。
  • キー項目はパラメーター値に含まれている必要があります。
  • キー項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(キー項目名を含む)
keyItems String[] キー項目名

戻り値

boolean - 1件更新された場合は true、0件の場合は false

updateOne

public boolean updateOne(Connection conn, String tableName, AbstractIoTypeMap params, String[] keyItems, String tsItem)
テーブル指定1件更新(タイムスタンプ排他制御更新).
  • テーブル名を指定して1件更新します。
  • 複数件更新した場合は例外エラーとする。
  • タイムスタンプで楽観排他制御を行います。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が更新されるので注意が必要です。
  • キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
  • キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
  • キー項目名とタイムスタンプ項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)
  • タイムスタンプ項目は現在日時で更新されます。
  • タイムスタンプ排他制御不要な場合は #updateOne(Connection, String, AbstractIoTypeMap, String[]) を使用してください。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(キー項目名を含む)
keyItems String[] キー項目名
tsItem String タイムスタンプ項目名(楽観排他制御用)

戻り値

boolean - 1件更新された場合は true、0件の場合は false

update

public int update(Connection conn, String tableName, AbstractIoTypeMap params, String[] whereItems)
テーブル指定更新.
  • テーブル名を指定して複数件更新します。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が更新されるので注意が必要です。
  • 抽出条件項目で WHERE句が作成される。
  • 抽出条件項目はパラメーター値に含まれている必要があります。
  • 抽出条件項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(抽出条件項目名を含む)
whereItems String[] 抽出条件項目名(省略可能)省略した場合は null

戻り値

int - 更新件数

updateAll

public int updateAll(Connection conn, String tableName, AbstractIoTypeMap params)
テーブル指定全件更新.
  • テーブル名を指定して全件更新します。
  • テーブルに存在しないパラメーターは無視されます。
  • 実装完了後にテーブルに項目が追加され、その項目名が元からパラメーターに存在する場合は
    実装修正無しで追加項目に値が更新されるので注意が必要です。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値

戻り値

int - 更新件数

deleteOne

public boolean deleteOne(Connection conn, String tableName, AbstractIoTypeMap params, String[] keyItems)
テーブル指定1件削除.
  • テーブル名を指定して1件削除します。
  • 複数件削除した場合は例外エラーとする。
  • キー項目で WHERE句が作成される。
  • キー項目はパラメーター値に含まれる必要があります。
  • キー項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(キー項目名を含む)
keyItems String[] キー項目名

戻り値

boolean - 1件削除された場合は true、0件の場合は false

deleteOne

public boolean deleteOne(Connection conn, String tableName, AbstractIoTypeMap params, String[] keyItems, String tsItem)
テーブル指定1件削除(タイムスタンプ排他制御削除).
  • テーブル名を指定して1件削除します。
  • 複数件削除した場合は例外エラーとする。
  • タイムスタンプで楽観排他制御を行います。
  • キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
  • キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
  • キー項目名とタイムスタンプ項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)
  • タイムスタンプ排他制御不要な場合は #deleteOne(Connection, String, AbstractIoTypeMap, String[]) を使用してください。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(キー項目名を含む)
keyItems String[] キー項目名
tsItem String タイムスタンプ項目名(楽観排他制御用)

戻り値

boolean - 1件削除された場合は true、0件の場合は false

delete

public int delete(Connection conn, String tableName, AbstractIoTypeMap params, String[] whereItems)
テーブル指定削除.
  • テーブル名を指定して複数件削除します。
  • 抽出条件項目で WHERE句が作成される。
  • 抽出条件項目はパラメーター値に含まれる必要があります。
  • 抽出条件項目名の英字は小文字で指定する必要があります。(AbstractIoTypeMap のキールール)

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名
params AbstractIoTypeMap パラメーター値(抽出条件項目名を含む)
whereItems String[] 抽出条件項目名

戻り値

int - 削除件数

deleteAll

public int deleteAll(Connection conn, String tableName)
テーブル指定全削除.
  • テーブル名を指定して全件削除します。

パラメータ

名前 説明
conn Connection DB接続
tableName String テーブル名

戻り値

int - 削除件数

executeOne

public boolean executeOne(Connection conn, SqlBean sb)
SQL 1件登録・更新・削除.
  • 反映件数が複数件の場合は例外エラーとする。

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

boolean - 反映件数が1件の場合は true、0件の場合は false

execute

public int execute(Connection conn, SqlBean sb)
SQL 登録・更新・削除.

パラメータ

名前 説明
conn Connection DB接続
sb SqlBean SQL Bean

戻り値

int - 反映件数

getToday

public String getToday(Connection conn)
DBMS別 現在日付取得.

パラメータ

名前 説明
conn Connection DB接続

戻り値

String - 現在日付(YYYYMMDD形式)