Je suis très confus en ce qui concerne l'accès à SQLiteDatabase
. Il faut soit une seule connexion, soit des connexions multiples pour avoir accès à plusieurs fils. J'ai lu de nombreux articles, dont les deux suivants.
https://stackoverflow.com/a/3689883/3027124 http://touchlabblog.tumblr.com/post/24474398246/Android-sqlite-locking
Les deux recommandent d'avoir une seule connexion. Même ma propre réponse à la même question a été acceptée par le PO. J'ai utilisé le Singleton
approche de l'accès SQLiteopenHelper
classe.
https://stackoverflow.com/a/35358702/3027124
Mais Je suis toujours confus après avoir lu la documentation de enableWriteAheadLogging
qui stipule
Cette méthode permet d'exécuter en parallèle des requêtes provenant de plusieurs pays. threads sur la même base de données. Pour ce faire, elle ouvre plusieurs connexions à la base de données et en utilisant une connexion de base de données différente pour chaque requête. Le mode journal de la base de données est également modifié pour permettre d'écrire en même temps que de lire.
Maintenant, c'est la partie qui prête à confusion. Si je veux accéder à la base de données à partir de plusieurs threads simultanés, je dois Singleton
l'accès à SQLiteOpenHelper
ce qui, dans ma compréhension, signifie l'exécution en série des insertions alors que les lectures simultanées peuvent être faites sans erreur. Mais la documentation ci-dessus dit que pour avoir un accès simultané, enableWriteAheadLogging
doit être appelé, ce qui a pour effet de créer des connexions multiples. Que se passe-t-il ? Qu'est-ce que cela signifie si je fais des insertions en appelant getWritableDatabase()
en utilisant Singleton SQLiteOpenHelper
à partir de plusieurs fils ? Les appels seront-ils sériels ? Est-ce que enableWriteAheadLogging
être appelé ?
Veuillez clarifier.