Wer hat das jemals gesehen? Ich benutze MS SQL Server 2008, und ich habe es mit zwei verschiedenen JDBC-Treibern (jtds und Microsoft) versucht. Ich führe eine einfache Anweisung, um eine Zeile zu aktualisieren, und es aktualisiert es, aber getUpdateCount
gibt 0 zurück. Wenn ich es für verschiedene Tabellen versuche, gibt es 1 wie erwartet zurück. Es ist etwas über diesen einen Tisch.JDBC getUpdateCount gibt 0 zurück, aber 1 Zeile wird aktualisiert, in SQL Server
PreparedStatement ps =
conn.prepareStatement("select count(*) from foo_users where user_id = 1")
ResultSet rs = ps.executeQuery();
rs.next()
println(" count(*) is " + rs.getInt(1)); // Prints 1
ps = conn.prepareStatement("update foo_users set is_admin = 1 where user_id = 1")
ps.execute()
int count = ps.getUpdateCount()
println(" update count is " + count) // Prints 0. WTF.
Was verursacht das?
Update als Antwort auf Kommentar: Ja, executeUpdate
funktioniert. Aber ich stelle diese Frage, weil ich eine Abfragebibliothek mit dem Namen jOOQ verwende, die falsche Ergebnisse zurückgibt, weil sie execute
und getUpdateCount
aufruft. Ich habe das ursprünglich aus meiner Frage herausgelassen, weil ich nicht glaube, dass die Bibliothek schuld ist.
Irgendein Grund, warum Sie nicht nur 'int count = executeUpdate();' verwenden, anstatt mit 'execute()' zu beginnen? –
Ja. Ich benutze tatsächlich eine andere Bibliothek (jOOQ), die 'execute()' aufruft. Vielleicht sollte ich auch auf ihre Mailingliste schreiben. Wie Sie vorschlagen, funktioniert 'executeUpdate' einwandfrei. –
Haben Sie tatsächlich den von 'execute()' zurückgegebenen Wert überprüft? Nur wenn es "falsch" ist, wird 'getUpdateCount()' eine Aktualisierungsanzahl zurückgeben. Andernfalls müssen Sie zuerst 'getMoreResults()' (vielleicht mehrere Male) aufrufen. Jetzt würde ich eine Update-Anzahl für diese spezifische Aussage erwarten. Und wenn 'execute'' true' zurückgibt, sollte 'getUpdateCount()' '-1' zurückgegeben haben, aber Sie wissen nie. –