クラス情報
パッケージ: com.onepg.db
クラス名: SqlUtil
説明
SQL実行ユーティリティクラス.
定数・変数一覧
ORACLE_PROTOCOL_ERR_AVOID_SQL
public String ORACLE_PROTOCOL_ERR_AVOID_SQL
ORACLEプロトコル違反回避SQL.
support.oracle.com(参考情報)
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形式)