web-dev-qa-db-ja.com

JdbcTemplate.update()戻り値を挿入

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);
6
Sriram Lns

はい、理論的には0または1を取得する必要がありますが、行が挿入されていない場合はエラーが原因であるため、DataAccessExceptionがスローされます。これにより、問題が発生したことがわかります。行が作成されました。

2
Turophile

jdbctemplate.updateは、私たちが知っているように整数形式で返されます。 0または1を見つけるには、以下の簡単なコードでこれを実行します。

int i=jdbctemplate.update(.your db call..);

成功した場合は1、失敗した場合は0を返すので、それに応じてロジックを処理できます。

1
Rajesh

あなたの質問に答えるために、はい、@ Turophileが指摘したように、 メソッドシグネチャ (intを返す)からわかるように、応答で0または1を取得します。

@Turophile comment (申し訳ありませんがコメントを追加できません:/)に応答して、これを回避し、部分的なデータがデータベースに保存されないようにするには、Springs Transaction Management(tx)を使用します。これにより、特定の例外またはExceptionクラスのすべての例外に基づいてトランザクションをロールバックできます。デフォルトでは、@ Rollbackは実行時の未チェックの例外のみのトランザクションをロールバックします。

@Transactional(rollbackFor = Exception.class)
public Employee updateEmployee(Employee pEmployee) { ... }

@Transactionalをクラスに追加することもできますが、この機能の実装に興味がある場合は、 詳細を読む と思います。 txには多くの優れたドキュメントがあります。

ちなみに、メソッドの呼び出し元に嘘をつくことはお勧めしません。 「update」というメソッドを呼び出す場合は、レコードを更新するクエリを実行します。新しいレコードを挿入/作成する場合は、テーブルに新しいレコードを「挿入」するメソッドを作成または呼び出します。主キーが一意である場合、重複レコードはとにかく機能しません。

1
Prancer