2014-01-16 9 views
6

JdbcTemplate.update() gibt die Anzahl der betroffenen Zeilen zurück - damit Sie nicht nur wissen, dass delete/update erfolgreich war, wissen Sie auch, wie viele Zeilen gelöscht/aktualisiert wurden.JdbcTemplate.update() gibt Rückgabewerte ein

Was ist der Rückgabewert, wenn ich versuche, eine Zeile einzufügen.

Ist es möglich, den Rückgabewert als "0" zu erhalten?

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

Antwort

1

Ja, in der Theorie sollten Sie 0 oder 1, aber wenn keine Zeile eingefügt wurde, wäre es aufgrund eines Fehlers sein, so ein DataAccessException würde geworfen werden, das ist, wie würden Sie wissen, dass etwas schief gelaufen ist und keine Zeile wurde erstellt.

+0

Tatsächlich gibt es auch den Fall, in dem Sie eine Warnung zum Abschneiden von Daten haben und eine Ausnahme ausgelöst wird, aber die Zeile wird gespeichert, daher sollte die Anzahl 1 sein. – Turophile

0

Um Ihre Frage zu beantworten, ja, wie @Turophile darauf hingewiesen, erhalten Sie eine 0 oder 1 als Antwort, wie Sie aus der method signature (die einen Int zurückgibt).

Als Reaktion auf @Turophile comment (Entschuldigung kann ich keinen Kommentar hinzufügen: /), um dies zu vermeiden und zu vermeiden, dass Teildaten in der Datenbank gespeichert werden, verwenden Sie Springs Transaction Management (tx). Dies würde Ihnen ermöglichen, Transaktionen basierend auf bestimmten Ausnahmen oder allen Ausnahmen aus der Exception-Klasse zurückzusetzen. Beachten Sie, dass @Rollback standardmäßig Transaktionen zur Laufzeit rückgängig macht, ohne die Ausnahmen nur.

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

Die @Transactional kann auch als gut, aber ich würde read up more on it, wenn Sie bei der Implementierung dieser Funktion interessiert der Klasse hinzugefügt werden. Es gibt eine Menge guter Dokumentation auf tx.

Als Randnotiz empfehle ich nicht, den Anrufer Ihrer Methode zu lügen. Wenn Sie eine Methode mit dem Namen "update" aufrufen, führen Sie eine Abfrage aus, die den Datensatz aktualisiert, wenn Sie einen neuen Datensatz einfügen/erstellen, eine Methode erstellen oder aufrufen möchten, die einen neuen Datensatz in Ihre Tabelle "einfügt" Ein doppelter Datensatz würde sowieso nicht funktionieren, wenn der/die Primärschlüssel eindeutig sind.

1

jdbctemplate.update wird im Integer-Format zurückgeben, wie wir wissen. nur tun dies unter einfachen Code um 0 oder 1 zu finden

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

es 1 für den Erfolg zurück und 0 für Fehlerfall so, es nach Sie Ihre Logik verarbeiten kann.