2014-01-16 151 views
6

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); 

答えて

1

はい、理論的にはあなたが0または1を取得する必要がありますが、ない行が挿入されなかった場合、それはエラーのためになりますので、DataAccessExceptionあなたは何かが間違っていたことを知っているだろうかである、スローされます行は作成されませんでした。

+0

実際、それについて考えると、データ切り捨ての警告があり、例外がスローされる場合もありますが、行が保存されるため、カウントは1になるはずです。 – Turophile

0

あなたの質問に答えるには、@Turophileが指摘したように、method signature(intを返す)からわかるように、0または1が返されます。

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

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

@Transactional

も同様にクラスに追加することができますが、私 read up more on itだろうあなたがこの機能を実装するに興味がある場合。 txには多くの良い文書があります。

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

1

jdbctemplate.updateはわかっているように整数形式で返されます。 0または1を見つけるために はちょうどあなたがあなたのロジックを処理することができ、それによると、そのように失敗する場合のために、成功のための1と0を返します簡単なコード

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

の下にこれを行います。