クラス情報
パッケージ: com.onepg.db
クラス名: SqlUtil
説明
定数・変数一覧
ORACLE_PROTOCOL_ERR_AVOID_SQL
public String ORACLE_PROTOCOL_ERR_AVOID_SQL
support.oracle.com(参考情報)
メソッド一覧
selectOneExists
public IoItems selectOneExists(Connection conn, SqlBean sb)
- 対象データが1件のみ存在することが前提で使用する。
- 結果がゼロ件の場合は例外エラーを投げる。
- 結果が複数件の場合は例外エラーを投げる。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
IoItems - 行データマップ
selectOne
public IoItems selectOne(Connection conn, SqlBean sb)
- 対象データが1件のみ存在することが前提で使用する。
- 結果がゼロ件の場合は
nullを返す。 - 結果が複数件の場合は例外エラーを投げる。
- 項目物理名は英字小文字となる。(
AbstractIoTypeMapのキールール)
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
IoItems - 行データマップ
selectOneMultiIgnore
public IoItems selectOneMultiIgnore(Connection conn, SqlBean sb)
- 結果がゼロ件の場合は
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 - 複数行リスト
selectBulkPageing
public IoRows selectBulkPageing(Connection conn, SqlBean sb, int limitCount, Io io)
- 本メソッドはページング機能を持つ画面で使用する。
- 複数行リストを返す。
- 結果がゼロ件の場合はサイズゼロのリストを返す。
- 1行のマップの項目物理名は英字小文字となる。(
AbstractIoTypeMapのキールール) - 本メソッドで大量件数取得するとメモリエラーが発生する可能性がある。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
limitCount |
int |
取得件数上限 |
io |
Io |
画面リクエスト情報(ページング情報を含む) |
戻り値
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件登録します。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が登録される点に注意が必要です。
- 一意制約違反以外で反映件数がゼロ件の場合は例外エラーを投げる。
- DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値 |
戻り値
boolean - 一意制約違反の場合は false、正常に1件登録された場合は true
insertOne
public boolean insertOne(Connection conn, String tableName, AbstractIoTypeMap params, String tsItem)
- テーブル名を指定して1件登録します。
- 楽観排他制御用のタイムスタンプをセットします。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が登録される点に注意が必要です。
- 一意制約違反以外で反映件数がゼロ件の場合は例外エラーを投げる。
- DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
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件更新します。
- 複数件更新した場合は例外エラーとする。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- キー項目で WHERE句が作成される。
- キー項目はパラメーター値に含まれている必要があります。
- キー項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
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件更新します。
- 複数件更新した場合は例外エラーとする。
- タイムスタンプで楽観排他制御を行います。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
- キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
- キー項目名とタイムスタンプ項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - タイムスタンプ項目は現在日時で更新されます。
- タイムスタンプ排他制御不要な場合は
#updateOne(Connection, String, AbstractIoTypeMap, String[])を使用してください。 - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(キー項目、タイムスタンプ項目を含む) |
keyItems |
String[] |
キー項目名 |
tsItem |
String |
タイムスタンプ項目名(楽観排他制御用) |
戻り値
boolean - 1件更新された場合は true、0件の場合は false
updateOneByPkey
public boolean updateOneByPkey(Connection conn, String tableName, AbstractIoTypeMap params)
- テーブル名を指定して1件更新します。
- 複数件更新した場合は例外エラーとする。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- テーブル主キー項目で WHERE句が作成される。
- 主キーが存在しないテーブルは例外エラーとする。
- 主キー項目はパラメーター値に含まれている必要があります。
- DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(主キー項目を含む) |
戻り値
boolean - 1件更新された場合は true、0件の場合は false
updateOneByPkey
public boolean updateOneByPkey(Connection conn, String tableName, AbstractIoTypeMap params, String tsItem)
- テーブル名を指定して1件更新します。
- 複数件更新した場合は例外エラーとする。
- タイムスタンプで楽観排他制御を行います。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- テーブル主キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
- 主キーが存在しないテーブルは例外エラーとする。
- 主キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
- タイムスタンプ項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - タイムスタンプ項目は現在日時で更新されます。
- タイムスタンプ排他制御不要な場合は
#updateOneByPkey(Connection, String, AbstractIoTypeMap)を使用してください。 - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(主キー項目、タイムスタンプ項目を含む) |
tsItem |
String |
タイムスタンプ項目名(楽観排他制御用) |
戻り値
boolean - 1件更新された場合は true、0件の場合は false
update
public int update(Connection conn, String tableName, AbstractIoTypeMap params, String[] whereItems)
- テーブル名を指定して複数件更新します。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- 抽出条件項目で WHERE句が作成される。
- 抽出条件項目はパラメーター値に含まれている必要があります。
- 抽出条件項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(抽出条件項目を含む) |
whereItems |
String[] |
抽出条件項目名(省略可能)省略した場合は null |
戻り値
int - 更新件数
updateAll
public int updateAll(Connection conn, String tableName, AbstractIoTypeMap params)
- テーブル名を指定して全件更新します。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブルに存在しないパラメーターは無視されます。
- 実装完了後にテーブルへ項目が追加された際、その項目名がすでにパラメーターに存在する場合は、実装修正なしにその値が更新される点に注意が必要です。
- DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値 |
戻り値
int - 更新件数
deleteOne
public boolean deleteOne(Connection conn, String tableName, AbstractIoTypeMap params, String[] keyItems)
- テーブル名を指定して1件削除します。
- 複数件削除した場合は例外エラーとする。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- キー項目で WHERE句が作成される。
- キー項目はパラメーター値に含まれる必要があります。
- キー項目でないパラメーターは無視されます。
- キー項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
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件削除します。
- 複数件削除した場合は例外エラーとする。
- タイムスタンプで楽観排他制御を行います。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
- キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
- キー項目とタイムスタンプ項目でないパラメーターは無視されます。
- キー項目名とタイムスタンプ項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - タイムスタンプ排他制御不要な場合は
#deleteOne(Connection, String, AbstractIoTypeMap, String[])を使用してください。 - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(キー項目、タイムスタンプ項目を含む) |
keyItems |
String[] |
キー項目名 |
tsItem |
String |
タイムスタンプ項目名(楽観排他制御用) |
戻り値
boolean - 1件削除された場合は true、0件の場合は false
deleteOneByPkey
public boolean deleteOneByPkey(Connection conn, String tableName, AbstractIoTypeMap params)
- テーブル名を指定して1件削除します。
- 複数件削除した場合は例外エラーとする。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブル主キー項目で WHERE句が作成される。
- 主キーが存在しないテーブルは例外エラーとする。
- 主キー項目はパラメーター値に含まれている必要があります。
- 主キー項目でないパラメーターは無視されます。
- DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(主キー項目を含む) |
戻り値
boolean - 1件削除された場合は true、0件の場合は false
deleteOneByPkey
public boolean deleteOneByPkey(Connection conn, String tableName, AbstractIoTypeMap params, String tsItem)
- テーブル名を指定して1件削除します。
- 複数件削除した場合は例外エラーとする。
- タイムスタンプで楽観排他制御を行います。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- テーブル主キー項目とタイムスタンプ項目(排他制御)で WHERE句が作成される。
- 主キーが存在しないテーブルは例外エラーとする。
- 主キー項目とタイムスタンプ項目はパラメーター値に含まれている必要があります。
- 主キー項目とタイムスタンプ項目でないパラメーターは無視されます。
- タイムスタンプ項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - タイムスタンプ排他制御不要な場合は
#deleteOneByPkey(Connection, String, AbstractIoTypeMap)を使用してください。 - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
params |
AbstractIoTypeMap |
パラメーター値(主キー項目、タイムスタンプ項目を含む) |
tsItem |
String |
タイムスタンプ項目名(楽観排他制御用) |
戻り値
boolean - 1件削除された場合は true、0件の場合は false
delete
public int delete(Connection conn, String tableName, AbstractIoTypeMap params, String[] whereItems)
- テーブル名を指定して複数件削除します。
- おもにWebサービス処理での使用を想定しており、リクエストをそのままパラメーター値として渡して使うことを前提にしています。
- 抽出条件項目で WHERE句が作成される。
- 抽出条件項目はパラメーター値に含まれる必要があります。
- 抽出条件項目名の英字は小文字で指定する必要があります。(
AbstractIoTypeMapのキールール) - DBメタ情報を取得して SQL を生成するため、性能面では SQL を引数で渡すメソッドより劣る。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
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)
- 反映件数が複数件の場合は例外エラーとする。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
boolean - 反映件数が1件の場合は true、0件の場合は false
execute
public int execute(Connection conn, SqlBean sb)
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
int - 反映件数
executeOneCache
public boolean executeOneCache(Connection conn, SqlBean sb)
- 反映件数が複数件の場合は例外エラーとする。
- 複数回同じ SQL を実行する場合に性能改善が見込める。
- キャッシュ済みのプリペアードステートメントを使用して実行する。
- キャッシュを使用するためには、DbConn(DB接続ラッパー)インスタンスと SQL-ID を持つ SqlConst(固定SQL)インスタンスが必要です。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
boolean - 反映件数が1件の場合は true、0件の場合は false
executeCache
public int executeCache(Connection conn, SqlBean sb)
- 複数回同じ SQL を実行する場合に性能改善が見込める。
- キャッシュ済みのプリペアードステートメントを使用して実行する。
- キャッシュを使用するためには、DbConn(DB接続ラッパー)インスタンスと SQL-ID を持つ SqlConst(固定SQL)インスタンスが必要です。
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
sb |
SqlBean |
SQL Bean |
戻り値
int - 反映件数
createItemBindTypeMapByMeta
public Map<String, BindType> createItemBindTypeMapByMeta(Connection conn, String tableName)
- DBメタ情報から項目名とバインドタイプのマップを作成する。
- マップは項目順を保持する。
- 項目物理名は英字小文字に変換する。(
AbstractIoTypeMapのキールールとあわせる)
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
tableName |
String |
テーブル名 |
戻り値
Map<String, BindType> - DB項目名(小文字)・バインドタイプマップ
getToday
public String getToday(Connection conn)
パラメータ
| 名前 | 型 | 説明 |
|---|---|---|
conn |
Connection |
DB接続 |
戻り値
String - 現在日付(YYYYMMDD形式)