2011-10-12 1 views
1

Je travaille avec SQLite dans mon projet android. Il y a une caractéristique qui est claire pour moi - s'il y a plusieurs threads fonctionnant avec DB alors ils devraient utiliser seulement une instance de DBHelper et SQLite garantissent un accès sécurisé (même s'il est concurrent) à la DB. Mais j'ai encore une chose à clarifier. Comment gérer avec la connexion DB (objet SQLiteDatabase)? Combien de fois devrais-je appeler geWritableDatabase() et close()? Est-ce correct si j'appelle ces méthodes une fois? Ou est-il préférable d'obtenir l'objet SQLDatabase et de le fermer à chaque fois que j'effectue une opération de lecture/écriture sur DB?Gestion de connexion Android SQLite

Répondre

0

Il est géré par défaut ... Je veux dire si une base de données à écriture ouverte, chaque fois que vous essayez d'accéder à la base de données en lecture seule, elle ferme l'écriture et crée une nouvelle instance de base de données en lecture seule. Pour autant que je sache :)

+0

Et si je veux écrire dans DB à partir de plusieurs threads que getWritableDatabase() et close() doivent être invoqués dans chacun d'eux? – tundundun

+1

Oui. il est préférable d'invoquer les méthodes getWritableDatabase() et getReadableDatabase() à chaque fois pour être sûr que vous êtes sur le point d'utiliser ... Aussi, s'il y a un multi-threading, vous devez gérer une sorte de synchronisation là où aucun développeur veut fermer sa base de données tout en récupérant des données de la base de données –

+1

Jetez également un coup d'oeil javadoc description ... Créez et/ou ouvrez une base de données. Ce sera le même objet retourné par getWritableDatabase() à moins qu'un problème, tel qu'un disque complet, nécessite que la base de données soit ouverte en lecture seule. Dans ce cas, un objet de base de données en lecture seule sera renvoyé. Si le problème est résolu, un appel futur à getWritableDatabase() peut aboutir, auquel cas l'objet de base de données en lecture seule sera fermé et l'objet en lecture/écriture sera renvoyé dans le futur. –