LittleSoft J-Programming
4.4. Java コードによる SQL 文構築(更新 SQL の構築)
この章では、更新 SQL の構築について解説します。
INSERT の実行
jp.littrlesoft.sql.SQL クラスを拡張して使用することで、SELECT を実行せずに INSERT を実行することができます。
ここでは、INSERT 用オブジェクトを作成して、Employee の全項目を挿入する例を記述します。
※insertEmp.params は、insertEmp のパラメータで Employee に型付けされています。
※execute の引数は、順に下記の通りとなります。
対象データを INSERT する際、項目を明示して実行したい場合があります。
以下のコードでは、固定値を設定する場合、パラメータ値を設定する場合についての例を記述します。
accept(値) で、指定したカラムに値を設定します。
固定値を使用する場合は accept の引数に直接値を設定しますが、パラメータを使用する場合はコロン(:)付きのパラメータ名で設定を行います。
このように設定を行った場合、パラメータへは insertEmp.params の値が設定されます。
SELECT の結果をそのまま INSERT に使用したい場合があります。
以下のコードでは、同じ構造のテーブルの SELECT 結果をそのまま INSERTする場合、異なる構造のテーブルの SELECT 結果を INSERT する場合の例を記述します。
ここでは、INSERT 用オブジェクトを作成して、Employee の全項目を挿入する例を記述します。
// insertEmp を Employeeクラスに型指定して生成します
SQL<Employee> insertEmp = new SQL<Employee>() {{
// insert() クラスを生成して 全項目を INSERT する準備をします
insert().prepare();
}};
// 作成した SQL オブジェクトにパラメータを設定します
insertEmp.params.empId = new Long(123);
insertEmp.params.name = "鳩山 邦彦 ";
insertEmp.params.deptCode = 1;
:
insertEmp.params.updateDatetime = new java.sql.Timestamp(System.currentTimeMillis());
// SQL オブジェクト(INSERT)を実行します
insertEmp.execute(conn, true, false);
insert() は INSERT を実行するクラスです。SQL<Employee> insertEmp = new SQL<Employee>() {{
// insert() クラスを生成して 全項目を INSERT する準備をします
insert().prepare();
}};
// 作成した SQL オブジェクトにパラメータを設定します
insertEmp.params.empId = new Long(123);
insertEmp.params.name = "鳩山 邦彦 ";
insertEmp.params.deptCode = 1;
:
insertEmp.params.updateDatetime = new java.sql.Timestamp(System.currentTimeMillis());
// SQL オブジェクト(INSERT)を実行します
insertEmp.execute(conn, true, false);
※insertEmp.params は、insertEmp のパラメータで Employee に型付けされています。
※execute の引数は、順に下記の通りとなります。
Connection conn | : JDBC コネクション |
boolean pendingCommit | : AutoCommit しない |
boolean reuseStatement | : JDBC ステートメントを再利用する |
INSERT 項目を明示する
以下のコードでは、固定値を設定する場合、パラメータ値を設定する場合についての例を記述します。
// 固定値を設定する
SQL<Employee > insertEmp = new SQL<Employee>() {{
insert().values(
$($$.empId).accept(999),
$($$.name).accept("鳩山 邦彦"),
$($$.sex).accept(1),
:
).prepare();
}};
// パラメータ値を設定する
SQL<Employee >insertEmp = new SQL<Employee>() {{
insert().values(
$($$.empId).accept(":empId"),
$($$.name).accept(":name"),
$($$.sex).accept(":sex"),
:
).prepare();
}};
values(…) は、INSERT INTO テーブル名 VALUES(…) と同じになります。SQL<Employee > insertEmp = new SQL<Employee>() {{
insert().values(
$($$.empId).accept(999),
$($$.name).accept("鳩山 邦彦"),
$($$.sex).accept(1),
:
).prepare();
}};
// パラメータ値を設定する
SQL<Employee >insertEmp = new SQL<Employee>() {{
insert().values(
$($$.empId).accept(":empId"),
$($$.name).accept(":name"),
$($$.sex).accept(":sex"),
:
).prepare();
}};
accept(値) で、指定したカラムに値を設定します。
固定値を使用する場合は accept の引数に直接値を設定しますが、パラメータを使用する場合はコロン(:)付きのパラメータ名で設定を行います。
このように設定を行った場合、パラメータへは insertEmp.params の値が設定されます。
SELECT した結果から INSERT を行う
以下のコードでは、同じ構造のテーブルの SELECT 結果をそのまま INSERTする場合、異なる構造のテーブルの SELECT 結果を INSERT する場合の例を記述します。
// 同じ構造のテーブルの SELECT 結果を INSERT します
SQL<EmployeeBackup> backupEmp = new SQL<EmployeeBackup>() {{
// Employee のダミークラスを用意します
Employee employee = $useDummy(Employee.class);
insert()
.// employee の SELECT 結果をそのまま insert() に設定します
.select().from(employee)
.prepare();
}};
// 異なる構造のテーブルの SELECT 結果を INSERT します
SQL<Test> test = new SQL<Test>() {{
// Employee のダミークラスを用意します
Employee employee = $useDummy(Employee.class);
insert()
.select(
// into(カラム名) を使用して employee.empId を test.id にセットします
$(employee.empId).into($$.id),
// into(カラム名) を使用して employee.name を test.name にセットします
$(employee.name).into($$.name)
).from(employee)
.prepare();
}};
SQL<EmployeeBackup> backupEmp = new SQL<EmployeeBackup>() {{
// Employee のダミークラスを用意します
Employee employee = $useDummy(Employee.class);
insert()
.// employee の SELECT 結果をそのまま insert() に設定します
.select().from(employee)
.prepare();
}};
// 異なる構造のテーブルの SELECT 結果を INSERT します
SQL<Test> test = new SQL<Test>() {{
// Employee のダミークラスを用意します
Employee employee = $useDummy(Employee.class);
insert()
.select(
// into(カラム名) を使用して employee.empId を test.id にセットします
$(employee.empId).into($$.id),
// into(カラム名) を使用して employee.name を test.name にセットします
$(employee.name).into($$.name)
).from(employee)
.prepare();
}};
UPDATE の実行
データの更新を行う際は、UPDATE 用オブジェクト作成します。
以下のコードでは、UPDATE 用オブジェクトの update() クラスを作成して Employee の データを更新する例を記述します。
以下のコードでは、UPDATE 用オブジェクトの update() クラスを作成して Employee の データを更新する例を記述します。
/** 社員給与を更新する UPDATE 用オブジェクト */
SQL<Employee> updateEmpSalary = new SQL<Employee>(){{
update().set(
$($$.memo).accept( $($$.memo).add("2009年度昇給") ),
$($$.salary).accept( $($$.salary).multiply(1.25) )
)
.where($$.deptCode).is(":deptCode").end
.prepare();
}};
/**
* 給与昇給ボタン押下時の処理
*/
public onSalaryUp() {
// updateEmpSalary を実行します
updateEmpSalary.execute(conn, true, false);
}
update().set() メソッドでUPDATE テーブル名 SET … と同じ SQL が実行されます。SQL<Employee> updateEmpSalary = new SQL<Employee>(){{
update().set(
$($$.memo).accept( $($$.memo).add("2009年度昇給") ),
$($$.salary).accept( $($$.salary).multiply(1.25) )
)
.where($$.deptCode).is(":deptCode").end
.prepare();
}};
/**
* 給与昇給ボタン押下時の処理
*/
public onSalaryUp() {
// updateEmpSalary を実行します
updateEmpSalary.execute(conn, true, false);
}
DELETE の実行
データ行の削除を行う際は、DELTE 用オブジェクトを作成します。
以下のコードでは、DELETE 用オブジェクトの delete() クラスを作成して Employee のデータを削除する例を記述します。
以下のコードでは、DELETE 用オブジェクトの delete() クラスを作成して Employee のデータを削除する例を記述します。
/** 社員を削除する DELETE 用オブジェクト */
SQL<Employee> deleteEmp = new SQL<Employee>() {{
// DELETE を設定
delete()
.where($$.empId).is(:empId").end
.prepare();
}};
/**
* 削除ボタン押下時の処理
*/
public onDelete() {
// deleteEmp を実行します
deleteEmp.execute(conn, true, false);
}
SQL<Employee> deleteEmp = new SQL<Employee>() {{
// DELETE を設定
delete()
.where($$.empId).is(:empId").end
.prepare();
}};
/**
* 削除ボタン押下時の処理
*/
public onDelete() {
// deleteEmp を実行します
deleteEmp.execute(conn, true, false);
}