我正在编写第一个使用SQLite的MacOS应用程序(https://github.com/ccgus/fmdb)。
我可以为每个事务(CRUD)打开/关闭数据库连接,也可以在init / dealloc上打开/关闭数据库连接。什么是最好的方式?
答案 0 :(得分:0)
我不确定我是否有明确的答案,但我自己已经对此进行了一些调查,我看到很多人说可以让数据库保持打开状态。
另外,如果你看看Sqlite网站,你会发现他们已经做了很多工作来确保数据库不会因崩溃,电源故障等而损坏。
http://www.sqlite.org/testing.html
http://www.sqlite.org/atomiccommit.html
我使用Sqlite和FMDB的经验似乎是打开连接并保持打开状态。请记住,这是文件的“连接”,它位于闪存上的本地文件系统上。这是一种与网络连接完全不同的情况。我认为失败的可能性非常小,因为它显然设计用于处理崩溃,电源故障等,即使它们发生在实际的数据库操作期间 - 因此在数据库操作之外它们不是问题。
你可以当然认为在不使用时保持数据库连接打开是不好的做法,我不建议在典型的客户端 - 服务器设置中,但在iPhone / iPad上我认为它是非问题。保持开放似乎工作正常,并且不用担心。
答案 1 :(得分:-1)
你不希望你的应用程序从头到尾保持数据库是开放的,除非它只是启动,做数据库的东西,然后退出。这样做的原因是,在极少数情况下,应用程序可能会因系统问题,断电等原因而终止;由于SqLite是基于文件的,因此可能会导致未封闭的文件或其他一些不同步的情况。当您需要打开数据库时,打开数据库,执行您的操作,并在不再需要打开数据库时将其关闭。在实际执行db操作时,您无法防止崩溃,但是当您运行最后一组db操作时,您会发现数据库是稳定的并且已关闭。顺便说一下,SqLite很快打开和关闭。好吧,让我修改一下:我已经编译到我的应用程序中的SqLite3了。我实际上并不了解其他版本。