Kann ein Wert aus einer JDBC-Transaktion zurückgegeben werden? Angenommen, ich muss wissen, ob der Wert für "Schlüssel" nach Anwendung der folgenden Transaktion 1 oder -1 sofort ist. Das Ausführen einer nachfolgenden SELECT
auf dem Schlüssel führt zu einer Race-Bedingung, da ein anderer gleichzeitiger Prozess die gleiche Transaktion nach dem ersten Abschluss, aber bevor der nachfolgende SELECT
ausgeführt wird, ausführen kann. Kann die Transaktion den Wert an mich zurückgeben?Rückgabewert von JDBC-Transaktion
con.setAutoCommit(false)
val stmt = con.createStatement()
stmt.executeUpdate("UPDATE table SET value = CASE WHEN value > 0 THEN -1 ELSE 1 END WHERE key = 'key'");
con.commit();
oder in einem Schuss 'ResultSet result = Statement.executeUpdate ("query") zu verwenden;' ** Anmerkung ** wir Können wir auch 'executeUpdate' mit' INSERT UPDATE AND DELETE' verwenden, lesen Sie mehr [hier] (https://www.tutorialspoint.com/jdbc/statement-object-example.htm) –
@YCF_L: Sie können 'executeUpdate nicht verwenden() 'für Abfragen, die ein Ergebnis zurückgeben. [Zitat aus den API-Dokumenten] (http://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#executeUpdate-java.lang.String-): "* Führt die angegebene SQL aus Aussage, (...) ** die nichts zurückgibt *** ". Und der Postgres-Treiber ** scheitert ** mit "Ein Ergebnis wurde zurückgegeben, wenn nichts erwartet wurde", wenn Sie 'executeUpdate()' mit einer Abfrage verwenden, die ein Ergebnis zurückgibt. –
ich meinte 'int result = statement.executeUpdate (" query ");' also wenn das Ergebnis groß ist, dann bedeutet 0, dass Sie eine oder mehrere Anweisungen ausgeführt haben, andernfalls, wenn das Ergebnis 0 bedeutet, dass kein Datensatz aktualisiert oder eingefügt wird oder gelöscht, so sehe ich keine Notwendigkeit, ResultSet –