meine Forschung über auto_generated_keys gab mir einige Hinweise über vorbereitete Anweisungen möglicherweise abgehört, aber keine Probleme mit gewöhnlichen Aussagen wie unten sichtbar.Statement automatisch generierte Keys scheinen nutzlos Java w/MariaDB 10.x
Der Code bisher gibt mir die Schlüssel in einer Ergebnismenge, die so viele Zeilen wie die Anweisung aktualisiert hat. Aber entgegen meiner Erwartung gibt mir die getInt (1) -Methode nicht die automatisch inkrementierte ID der Tabelle, sondern einen automatisch inkrementierten Wert, der von 1 bis zum Ende der Ergebnismenge zählt.
Was mache ich falsch? Ich habe den Code so geändert, dass entweder com.mysql.jdbc als org.mariadb.jdbc-Connectors beide auf die neueste Version aktualisiert wurden.
Oder ist es eine andere Option, die ich irgendwo einstellen muss?
Trotzdem vielen Dank für Ihre Hilfe noch jetzt.
public void updateFZSetToUsed() {
/*
* Variablendeklaration
*
*/
Connection conn = null;
Statement stmt1 = null, stmt2 = null;
ResultSet rs = null, rs2 = null;
String stmtstr1, stmtstr2;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception WPex) {
System.out.println(WPex);
}
try {
conn = DriverManager.getConnection("jdbc:mysql://"+configVars.getProperty("serverIP")+"/"+configVars.getProperty("db")+"?", configVars.getProperty("usr"), configVars.getProperty("pw"));
stmt2 = conn.createStatement();
stmt2.executeUpdate("UPDATE fz SET fz_used = 1 WHERE fz_id in (SELECT calls_fz FROM calls)", Statement.RETURN_GENERATED_KEYS);
rs2 = stmt2.getGeneratedKeys();
while(rs2 != null && rs2.next()) {
System.out.println(rs2.getInt(1));
}
} catch (SQLException singleStoreExc) {
// handle any errors
System.out.println("updateFZSetToUsed SQLException: " + singleStoreExc.getMessage());
System.out.println("updateFZSetToUsed SQLState: " + singleStoreExc.getSQLState());
System.out.println("updateFZSetToUsed VendorError: " + singleStoreExc.getErrorCode());
return retString;
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx)
{
System.out.println("rsclose fehler");
}
rs = null;
}
if (rs2 != null) {
try {
rs2.close();
} catch (SQLException sqlEx)
{
System.out.println("rs2close fehler");
}
rs2 = null;
}
if (stmt1 != null) {
try {
stmt1.close();
} catch (SQLException sqlEx) {
System.out.println("stmt1cclose fehler");
}
stmt1 = null;
}
if (stmt2 != null) {
try {
stmt2.close();
} catch (SQLException sqlEx) {
System.out.println("stmt2cclose fehler");
}
stmt2 = null;
}
if (stmt2 != null) {
try {
stmt2.close();
} catch (SQLException sqlEx) {
System.out.println("stmt2cclose fehler");
}
stmt2 = null;
}
if (conn != null) {
try {
conn.close();
}
catch (SQLException sqlEx) {
System.out.println("conn close() Error "+sqlEx);
}
}
}
}
Hey vielen Dank für Ihre Antwort. Ich brauchte eine schnelle Lösung, also baute ich eine Arbeit für mein Problem auf. (2 verschiedene Abfragen, soweit ich mich erinnere) Aber eigentlich scheint es so zu sein, wie du es beschrieben hast: ID-Werte werden nur von INSERT-Anweisungen zurückgegeben. Vielleicht hat mich mein Gedächtnis in diesem Detail ausgetrickst, als ich versucht habe, mysqlI-XXX-Befehlsspezifikationen von php abzurufen. Nochmals vielen Dank für Ihre Eingabe. Ich weis das zu schätzen. – DigitalDude