Verwenden Sie die Java7-Anweisung try-with-resources für die Verarbeitung zum Schließen des Cursors

Überblick

Ich werde Ihnen zeigen, wie Sie die in Java7 hinzugefügte Anweisung ** try-with-resources ** verwenden, um kurz den Vorgang des Schließens des Cursors zu schreiben, der beim Abrufen von Werten aus der Datenbank verwendet wird.

Code, der die Anweisung try-with-resources verwendet

try (Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null)) {
    ... // (Verarbeitung mit Cursor)
}

Wenn Sie den Code schreiben, um die Daten vom Inhaltsanbieter mithilfe der Anweisung try-with-resources abzurufen, erhalten Sie den obigen Code.

Weil die Anweisung try-with-resources beim Verlassen des Blocks innerhalb des Versuchs automatisch die Methode Cursor # close () aufruft. Sie müssen close () nicht mehr explizit aufrufen.

Was passiert, wenn Sie die Anweisung try-with-resources nicht verwenden?

Wenn Sie den Code mit der Anweisung try-finally schreiben, ohne die Anweisung try-with-resources zu verwenden, sieht dies wie folgt aus.

Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
try {
    ... // (Verarbeitung mit Cursor)
} finally {
    if (c != null) {
        c.close()
    }
}

Der Code wird länger, wenn Sie die finally-Klausel schreiben. Außerdem müssen Sie vor dem Schließen überprüfen, ob der Cursor nicht null ist Zusätzlich zur Verlängerung des Codes besteht die Gefahr, dass das Nullurteil vergessen wird und NPE verursacht wird.

Ein weiteres Beispiel, das die Anweisung try-with-resources nicht verwendet, ist Code, der nicht einmal die Anweisung try verwendet:

Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
... // (Verarbeitung mit dem Cursor) ★
if (c != null) {
    c.close()
}

Das Problem beim Schreiben ist, dass der Cursor nicht geschlossen wird, wenn am Stern eine Ausnahme auftritt. Daher ist es besser, dies zu vermeiden.

Zusammenfassung

Wenn Sie den Cursor verwenden, sollten Sie ihn in eine Try-with-Resources-Anweisung schreiben. Sie müssen sich keine Sorgen um den langwierigen Prozess machen, und es scheint sich um einen prägnanten Code zu handeln.

Recommended Posts

Verwenden Sie die Java7-Anweisung try-with-resources für die Verarbeitung zum Schließen des Cursors
Java für Anweisung
[Java] für Anweisung / erweitert für Anweisung
(Memo) Java für Anweisung
[Verarbeitung × Java] Verwendung von Variablen
Java (Klassentyp für Feld verwenden)
[Verarbeitung × Java] Verwendung von Arrays
[Verarbeitung × Java] Verwendung der Schleife
[Verarbeitung × Java] Verwendung der Klasse
[Verarbeitung × Java] Verwendung der Funktion
Java, für Anweisung / while-Anweisung ab Anfänger
[Java] Was soll ich zum Schreiben von Dateien verwenden?
Einfaches Hindernisrennen mit Java-Verarbeitung
Verwenden Sie vorerst eine externe Java-Bibliothek
Verwenden wir Java New FileIO! (Einführung für Anfänger)
Für JAVA-Lernen (2018-03-16-01)
Java-Thread-Verarbeitung
2017 IDE für Java
Java-String-Verarbeitung
[Java] Verwenden Sie Collectors.collectingAndThen
[Java] Multithread-Verarbeitung
[Java] Stream-Verarbeitung
Java-Switch-Anweisung
Java iterativer Prozess
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Verwendung von Truth (Assertion Library für Java / Android)
Verwenden Sie Watson Conversation als NLP (Java) (Verarbeitung natürlicher Sprache)
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
[Anfänger] Java-Variable / logischer Operator / erweitert für Anweisung [Anmerkung 22]
So schleifen Sie Java Map (für jede / erweiterte for-Anweisung)