2016-08-05 31 views
-1

Ich erstelle eine Klasse und erweitert von SQLiteOpenHelper für kopieren und sqlite-Datenbank in meiner Android App verwenden. Diese Klasse enthält zwei Methoden:check sqlite android database ist geöffnet oder geschlossen

public void OpenDatabase(); 

und

public void CloseDatabase(); 

für öffnen und schließen Datenbank. in den anderen Aktivitäten und Klassen Wie kann ich überprüfen, ob meine Datenbank jetzt geöffnet oder geschlossen ist?

+0

Ihr Mantra 'öffnen es sein sollte, verwenden Sie es. schließe es. NIEMALS offen lassen! –

+0

@Rotwang - wenn Sie Funktionen haben, die Arbeitsteile trennen, wobei die Datenbank nacheinander aufgerufen wird, ist es sinnvoll, sie offen zu lassen. Wenn Sie beispielsweise Funktionen haben, die eine einzelne Spalte aktualisieren, müssen Sie drei Spalten aktualisieren. kann es kosten, eine Dabase 3 Mal hintereinander zu öffnen und zu schließen –

+0

@pamblam Warum können Sie kein UPDATE durchführen, das 3 Spalten gleichzeitig aktualisiert? Ich kann. Für Operationen, die einen Batch von Befehlen beinhalten, gibt es ** Transaktionen **. Wieder: "öffne es, benutze es, schließe es". Es ist ein Mantra. Ich schreibe Programme seit 32 Jahren. Und dieses Mantra ** hat mich nie enttäuscht. –

Antwort

0

Sie können leicht überprüfen, ob die Datenbank bereits verwendet wird, indem Sie jedes Mal, bevor Sie sie verwenden, isDbLockedByCurrentThread oder isDbLockedByOtherThreads für das einzelne SQLiteDatabase-Objekt aufrufen. Dies wird mehrere Manipulationen an der Datenbank zu verhindern und die Anwendung von einem möglichen Absturz

0

Set ein Flag in Ihrer Klasse speichern, um zu verfolgen ..

class poop extends SQLiteOpenHelper{ 
    private boolean isDBOpenf = false; 
    public void OpenDatabase(){ 
     // open database 
     isDBOpenf = true; 
    } 
    public void CloseDatabase(){ 
     // close database 
     isDBOpenf = false; 
    } 
    public boolean isDBOpen(){ return isDBOpenf; } 
}