Dois-je ouvrir() et fermer () ma base de données SQL en permanence ou la laisser ouverte?
Je crée une application qui utilise une base de données SQL pour stocker des données. La façon dont l'application est conçue, elle sera mise à jour toutes les minutes 3 avec de nouvelles données en fonction des actions de l'utilisateur pendant que l'application est en cours d'exécution.
Dans les tutoriels que j'ai vus, ils vous recommandent de fermer la base de données après l'avoir modifiée (c'est un "coûteux" en termes de ressources).
Est-il préférable de le laisser ouvert pour la durée de mon Application, car il est mis à jour assez souvent ou dois-je exécuter la méthode close() immédiatement après chaque modification?
Je suppose que mon inquiétude est que l'ouvrir et le fermer constamment attirera plus de ressources que cela ne le ferait pour le laisser ouvert tout le temps.
5 réponses
J'ai essayé de laisser une connexion ouverte une fois -- je l'ai utilisée pour bourrer un répéteur ou quelque chose -- Je ne me souviens plus maintenant.
Plus Tard dans le programme, j'avais un autre besoin d'utiliser la connexion-je pense que je l'avais pour que lorsqu'un utilisateur clique sur un élément parent dans le répéteur, un div de détail apparaisse avec plus d'informations pour cet élément. Cela a généré une erreur -- quelque chose à l'effet de "impossible d'ouvrir() sur une connexion ouverte'.
Je pense que l'erreur aurait pu être évitable d'une autre manière (comme vérifier pour voir si la connexion que j'essayais d'ouvrir était déjà ouverte), mais en y réfléchissant, j'ai réalisé que je devais en faire une pratique standard tout au long de mon application, et cela semblait être trop de travail, donc j'ai juste fait une pratique standard pour toujours fermer mes connexions après chaque utilisation.
Les connexions restent dans un pool de connexions - Je ne suis pas enthousiaste à ce sujet-mais si j'étais curieux de la performance, je suppose que je garderais cela à l'esprit, en termes de ce qu'il en coûte pour ouvrir une connexion multiple fois, quelle que soit votre situation exige de toute façon.
Une autre pensée est que votre administrateur de base de données peut être capable de forcer la fermeture de toutes les connexions ouvertes, ou la base de données peut se fermer pour une autre raison. Si vous n'êtes pas le dba, vous pourriez penser au risque/bénéfice de dépendre de quelque chose que vous n'avez pas de contrôle à long terme, comme garder la connexion ouverte.
Trois minutes, c'est l'éternité sur les processeurs d'aujourd'hui, même le téléphone processeurs. Je le fermerais et l'ouvrirais à chaque fois. C'est mieux que de laisser éventuellement des poignées traîner dans "l'éther".
Disons que vous avez plusieurs opérations de base de données à faire dos à dos dans un seul thread. Je garderais la base de données ouverte pour faire ces actions. Cependant, fermez la base de données après avoir fait un morceau de travail.
Je pense que la réponse à cette question dépend également du type d'application accédant à la base de données.
Si vous ré-interrogez beaucoup la base de données Dans ce cas, vous pouvez garder la base de données ouverte.
Y a-t-il d'autres applications accédant à la même base de données? S'il y a un risque de problèmes de concurrence ou de blocage, il peut être sage de fermer la base de données après avoir terminé la lecture/écriture de/vers elle.
Jetez un oeil sur l'url suivante
Merci Deepak
Si vous me demandez par tout ce que j'ai lu jusqu'à présent sur android et en général, il est préférable de le fermer juste après avoir fait les modifications.
Ce que je trouve de mieux à faire quand vous le pouvez Est de créer et d'enregistrer un fournisseur de contenu. Il a ses prix, mais je crois que vous gagnez beaucoup plus que vous payez. Vous pouvez faire à peu près tout avec un fournisseur de contenu et l'exemple de bloc-notes sur le portail android est idéal pour apprendre à l'implémenter. il prend soin de la synchronisation db et l'ouvrir / le fermer. alors peut-être regarder à cela.