我应该经常使用open()和close()打开或关闭SQL数据库,还是保持它一直开着?

28

我正在开发一个使用SQL数据库存储数据的应用程序。根据应用程序的设计,每3分钟左右会根据用户的操作更新新数据。

在我看到的教程中,他们建议在更改后关闭数据库(这在资源方面是“昂贵”的)。

对于我开发的应用程序来说,是否最好将其保持打开状态,因为它会相当频繁地进行更新,或者应该在每次更改后立即运行close()方法?

我想我担心的是,不断地打开和关闭数据库会消耗比保持其一直打开更多的资源。

5个回答

6

我曾尝试保持一个连接处于打开状态——我用它来填充中继器或其他东西——现在记不清了。

程序后来有另一个需要使用这个连接的地方——我想当用户点击中继器中的父项时,会弹出一个详细信息div。这导致了一个错误——大概是“无法在已打开的连接上执行open()”之类的。

我认为这个错误可能可以通过其他方式避免(比如检查我尝试打开的连接是否已经打开),但是当我思考它时,我意识到我必须在我的整个应用程序中将其作为标准实践,而那似乎太麻烦了,所以我只是将其作为标准实践始终在每次使用后关闭我的连接。

连接保留在连接池中——我对此并不是很了解——但如果您关心性能,我想在多次打开连接时要考虑它的成本——无论您的情况需要什么。

另一个想法是,您的数据库管理员可能能够强制关闭所有打开的连接,或者数据库可能因为其他原因关闭。如果您不是DBA,则可能需要考虑依赖于您长期无法控制的东西(如保持连接打开)的风险/收益。


1
DBA?我们还在谈论安卓吗? - LarsH
数据库管理员 - papiro

3

即使是手机处理器,三分钟也可以是永恒。每次使用完毕请关闭它,下次再打开。这比在“虚空”中可能留下句柄更好。


3
假设您需要在单个线程中依次执行多个数据库操作。我建议您在执行这些操作时保持数据库连接打开状态,但是在完成一部分工作后,请关闭数据库连接。

3
我认为这个问题的答案也取决于哪种类型的应用程序正在访问数据库。
如果您需要经常重新查询数据库,那么可以保持数据库处于打开状态。
如果有其他应用程序访问同一个数据库,如果存在并发或阻塞问题的风险,则在读取/写入完成后关闭数据库可能是明智的选择。
请查看以下网址: 何时在Android上关闭数据库连接?每次操作完成后还是在应用程序退出后? 谢谢Deepak

1

如果你问我关于Android和一般编程方面的所有阅读,我认为最好在修改后立即关闭它。

当你可以的时候,我发现最好的做法是制作并注册内容提供程序。虽然它有一定的代价,但我相信你所获得的远比你所付出的要多得多。你几乎可以用内容提供程序来完成所有的事情,而Android门户网站上的记事本示例非常适合学习如何实现它。它会处理数据库同步和打开/关闭操作。因此,也许可以研究一下这个。


请查看记事本教程,然后跟随示例中的记事本项目进行操作。http://developer.android.com/resources/tutorials/notepad/index.html - DArkO
这与SQLite Helper实现有些不同(作为适配器或直接通过方法访问的简单数据库)。我认为内容提供程序是一个非常好的解决方案。在做了很多涉及数据库的项目并遇到并发问题、未关闭数据库或遇到已关闭的数据库等等问题后,我仍然发现内容提供程序是最好的解决方案,并且它对我制作的所有应用程序都完美地运行。尽管它有一些额外的开销。 - DArkO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接