JdbcTemplate.update()
は、影響を受けた行の数を返します。したがって、削除/更新が成功したことだけでなく、削除/更新された行の数もわかります。
行を挿入しようとすると、戻り値はどうなりますか。
戻り値を「0」にすることはできますか?
private static final String insertSql =
"INSERT INTO employee (" +
" name, " +
" surname, " +
" title, " +
" created) " +
"VALUES (John, Smith, Software developer, new Date())";
int row = template.update(insertSql, params, types);
はい、理論的には0または1を取得する必要がありますが、行が挿入されていない場合はエラーが原因であるため、DataAccessException
がスローされます。これにより、問題が発生したことがわかります。行が作成されました。
jdbctemplate.updateは、私たちが知っているように整数形式で返されます。 0または1を見つけるには、以下の簡単なコードでこれを実行します。
int i=jdbctemplate.update(.your db call..);
成功した場合は1、失敗した場合は0を返すので、それに応じてロジックを処理できます。
あなたの質問に答えるために、はい、@ Turophileが指摘したように、 メソッドシグネチャ (intを返す)からわかるように、応答で0または1を取得します。
@Turophile comment (申し訳ありませんがコメントを追加できません:/)に応答して、これを回避し、部分的なデータがデータベースに保存されないようにするには、Springs Transaction Management(tx)を使用します。これにより、特定の例外またはExceptionクラスのすべての例外に基づいてトランザクションをロールバックできます。デフォルトでは、@ Rollbackは実行時の未チェックの例外のみのトランザクションをロールバックします。
@Transactional(rollbackFor = Exception.class)
public Employee updateEmployee(Employee pEmployee) { ... }
@Transactionalをクラスに追加することもできますが、この機能の実装に興味がある場合は、 詳細を読む と思います。 txには多くの優れたドキュメントがあります。
ちなみに、メソッドの呼び出し元に嘘をつくことはお勧めしません。 「update」というメソッドを呼び出す場合は、レコードを更新するクエリを実行します。新しいレコードを挿入/作成する場合は、テーブルに新しいレコードを「挿入」するメソッドを作成または呼び出します。主キーが一意である場合、重複レコードはとにかく機能しません。