2011-06-14 91 views
24

我正在创建一个使用SQL数据库存储数据的应用程序。应用程序的设计方式会根据用户在应用程序运行时的行为,每3分钟更新一次新数据。我是否应该不断打开()并关闭()我的SQL数据库或将其保持打开状态?

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

在我的应用程序的持续时间内保持打开状态会更好吗,因为它是在相当频繁的基础上更新,还是应该在每次更改后立即运行close()方法?

我想我担心的是,打开它并不断关闭它会吸引更多的资源,而不会让它整个打开。

回答

5

我试图离开打开的连接,一次 - 我用它的东西中继器或东西 - 不记得现在。

在程序的后面,我有另一个需要使用连接 - 我想我已经这样做,以便当用户点击转发器中的父项时,将会弹出一个详细div,并提供该项的更多信息。这产生了一个错误 - 对'无法打开()打开连接'的影响。

我认为这个错误可能是以另一种方式避免的(比如检查我试图打开的连接是否已经打开),但正如我想到的那样,我意识到我必须使这个标准在整个我的应用程序中练习,这似乎是太多的工作,所以我只是在每次使用后总是关闭连接的标准做法。

连接停留在连接池 - 我不是那种专家 - 但如果对性能感到好奇,我想我会牢记这一点,就开放连接多次所需的费用而言 - 无论你的情况如何,无论如何。

另一个想法是,您的数据库管理员可能能够强制关闭所有打开的连接,或者数据库可能因其他原因关闭。如果你不是dba,那么你可以考虑风险/好处,取决于你没有长期控制的东西,例如保持连接的开放。

+0

DBA?我们还在谈论Android吗? – LarsH 2017-02-07 21:05:35

+0

数据库管理员 – papiro 2017-03-01 16:15:45

3

三分钟就是今天的处理器,甚至是手机处理器的永恒。我会关闭它并每次打开它。 “以太”可能会让把手挂在外面。

+0

upvote for三分钟在今天的处理器上是永恒的 – 2014-12-30 06:48:46

1

如果你问我目前为止关于android的所有内容,一般情况下最好在做出修改后关闭它。

我发现尽可能做到最好的做法是实际制作和注册内容提供商。 它有它的价格,但我相信你比你付出更多。 您可以使用内容提供程序完成所有任务,android门户上的记事本示例非常适合学习如何实现它。它负责数据库同步和打开/关闭它。所以也许看看。

+0

这是通过创建一个dbHelper或dbAdapter完成的吗? – easycheese 2011-06-14 08:00:18

+0

看看记事本教程,然后按照例子中的记事本项目。 http://developer.android.com/resources/tutorials/notepad/index.html – DArkO 2011-06-14 08:28:05

+0

它与sqlite helper实现(作为一个适配器或只是一个简单的数据库,你将直接通过方法访问)有点不同。我相信内容提供商是一个非常好的解决方案。在做了很多带有数据库和并发问题的项目之后,没有关闭数据库或运行到封闭的数据库等等等等,以使用不同的设计模式来解决这些问题后,我仍然发现内容提供者是最好的解决方案,对我所做的所有应用程序来说远远不够。尽管它有一个更大的开销。 – DArkO 2011-06-14 08:31:42

3

比方说,您有几个数据库操作可以在单个线程中进行背靠背操作。我会保持DB开放来执行这些操作。但是在完成大量工作后关闭数据库。

3

我认为这个问题的答案还取决于访问数据库的应用程序的类型。

如果你重新查询数据库很多 在这种情况下,你可以保持数据库打开。

是否有任何其他应用程序访问相同的数据库? 如果存在并发或阻塞问题的风险,在完成对数据库的读写之后关闭数据库可能是明智之举。

看一看onthe以下网址

When to close db connection on android? Every time after your operation finished or after your app exit

感谢迪帕克

相关问题