Entdecken Sie, welche Datensätze von einem batch-update fehlgeschlagen

ich mache eine batch-Aktualisierung von 1000 Datensätze, die in java unter Verwendung von jdbc. Aus Ihnen 800 Datensätze aktualisiert wurden erfolgreich und 200 falied . also ich will prüfen von batch-update-Abfrage, die alle 200 Datensätze waren fehlgeschlagen zu b aktualisiert, und ich werde Sie einfügen in die Datenbank mittels Batchdatei einfügen . wie kann ich das erreichen ?

  • Nicht Ihre batch-Abfrage ein int-array reflektieren die Einträge aktualisiert?
  • ja, es funktioniert aber ich möchte wissen, welche alle Datensätze, die nicht aktualisiert wurden
  • Alle Datensätze, die den Wert 0 in das array zurückgegeben



2 Replies
  1. 2

    executeBath() Methode von Statement gibt ein array von Integer (eine ganze Zahl, die pro Befehl, der ausgeführt wurde). Jede ganze Zahl repräsentiert update zählen. Wenn 1 oder höher, update wurde erfolgreich abgeschlossen; wenn 0, wird kein Datensatz aktualisiert wurde, mit dem entsprechenden Befehl.

    Beispiel:

    List<YourClass> objectsToUpdate = getObjectsToUpdate();
    
    for (YourClass object : objectsToUpdate) {
        String updateCommand = generateUpdateCommand(object);
        statement.addBatch(updateCommand);
    }
    int[] results = statement.executeBatch();
    
    List<YourClass> notUpdated = new ArrayList<YourObject>();
    
    for (int i = 0; i < results.length; i++) {
        if (results[i] == 0) {
            notUpdated.add(objectsToUpdate.get(i));
        }
    }

    Dass war nur um zu zeigen, der Algorithmus. Erwägen Sie die Verwendung PreparedStatement statt Statement.

    • aber die Datensätze, die nicht aktualisiert wurden (Abfrage fehlgeschlagen) ich will um Sie abzurufen. wie kann ich das?
    • so etwas wie dieses: eine Liste/array von Objekten, die Sie erzeugen, einen Befehl pro Objekt und rufen Sie addBatch(), dann call executeBatch(), die ein array zurückgibt. Dann wird Sie Durchlaufen und prüfen, ob Element ist 0. Wenn die 0 ist, das Objekt in den entsprechenden array-index nicht aktualisiert wurde.
    • gerade aktualisiert meine Antwort.
    • danke . Ich versuche einfach aus
  2. 0

    Für die Vollständigkeit, es ist auch wichtig zu sagen, dass bei der Verwendung von batch-updates, die ein JDBC-Treiber kann auch zurück (als Teil des integer-array) Anweisung.SUCCESS_NO_INFO (wenn keine Informationen zu aktualisierten Zeilen verfügbar ist) oder eine Erklärung.EXECUTE_FAILED (wenn eine Ausnahme Auftritt)

    Einige JDBC-Treiber kann sogar stoppen die Ausführung, weitere Ausführungen (updates) im Fall einer Ausnahme.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.