SQLite Connection Error

  • Hallo,




    ich habe das Problem, dass wenn ich in meiner App gleichzeitig das Lesen und schreiben in die DB probiere, die App abstürzt. Hätte man sich vermutlich denken können -.-


    Einfach vermeiden kann ich es leider nicht, da ich durch den AlarmManager jede Stunde Daten in diese Datenbank reinschreibe und dann kann es passieren, dass der Nutzer genau in diesem Moment Daten davon abruft. Wenn dies passiert kommt es zu diesem Fehler:

    Zitat

    The connection pool for database 'my Database' has been unable to grant a connection to thread 1 with flags 0x2 for 240.0000 seconds


    Ich habe schon gegoogelt, dabei habe ich herausgefunden, dass ein ContentProvider des Problemes Lösung wäre, allerdings kommt es mir ein wenig übertrieben dafür vor, schließlich geht um nur um dieses Problem, ich will keine Daten für andere Apps bereitsstellen oder ähnliches.


    Bisher habe ich es so probiert:

    Java
    static BatteryManager getInstance(Context c) {	 if(bm==null) bm = new BatteryManager(c); return bm; }



    Allerdings bringt das leider nichts, ich wollte vermeiden, das mehrere Objekte von BatteryManager im Umlauf sind. BatteryManager ist mein SQLiteOpenHelper.


    Sobald also über den AlarmManager mit dem BatteryManager agiert wird und ich gleichzeitig Daten abrufe kommt es zu Problemen, welche ich nur durch Neuinstallation lösen kann. Hat da schon jemand mit Erfahrung gemacht?

  • Zitat

    Ich habe schon gegoogelt, dabei habe ich herausgefunden, dass ein ContentProvider des Problemes Lösung wäre, allerdings kommt es mir ein wenig übertrieben dafür vor, schließlich geht um nur um dieses Problem, ich will keine Daten für andere Apps bereitsstellen oder ähnliches.


    SQLite kann halt leider nur schreiben oder nur lesen. ContentProvider ist hier schon die richtige Lösung, dafür haben die den erfunden.
    Erleichtert Dir auch den Umgang mit Loadern in deiner APP.



    Ein Dirty Lösung wäre, in deinem DB Helper eine Static Variable einzubauen.


    static Boolean isUpdateing = false;


    Und diese fragst du beim Lesen ab und "wartest" dann ein paar Millisekunden.

  • Ich habe jetzt auch schon Angefangen, den ContentProvider einzubauen. Gibt es da eine "richtige" Lösung, um Dynamisch Tabellen hinzuzufügen?
    Und ich kann auf den ContentProvidern auch mit dem gleichen Context parallel drauf zu greifen, ohne Fehler zu verursachen, oder?
    Ich mache es jetzt in der Query Methode bei jedem Ausführen mit "IF NOT EXISTS", aber toll ist das ja auch nicht.


    Achso, und wenn ich es doch "dreckig" mache, würde dann auch
    [JAVA]if(this.getWritableDatebase().isOpen)
    //Warten
    [/JAVA]
    vor den Methoden funktionieren?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!