In meiner Android-Anwendung muss ich Daten in verschiedene SQLite-Tabellen aus verschiedenen Threads einfügen (ein Thread zum Einfügen in eine Tabelle und 5 Tabellen). Es gibt eine Menge von Daten, so dass ich beginTransaction()
->setTransactionSuccessful()
->endTransaction();
in jedem Thread und alle Threads gleichzeitig starten, aber in der zweiten oder manchmal dritten Thread Ich habe immer diese Ausnahme:Kann keine Operation ausführen, da beim Einfügen in die Datenbank keine aktuelle Transaktion vorhanden ist.
Ich benutze einzelne SQLite-Verbindung (Singleton) wie mentioned here war, aber dennoch bleibt dieses Problem.So hoffe ich auf etwas Hilfe.Vielen Dank im Voraus!
P.S Und wenn ich Race Conditions habe, welchen anderen Weg sollte ich für Multithreading-Insertion verwenden?
Ich habe ein paar Ideen zu meiner Antwort @AlexanderKaraberov hinzugefügt. – Gray
Haben Sie eine Klasse (nur ein DAO), die diese tatsächliche Datenbank ändert. Dann würden Ihre Threads einfach 'insert()' oder ähnliches aufrufen. Die Methode würde "synchronisiert" und es würde entscheiden, ob ich die Transaktion starten muss, wenn sie nicht bereits gestartet wurde, oder eine Transaktion beenden, wenn sie bereits gestartet wurde. – Gray