【问题标题】:SQLite 3 Database Open IssuesSQLite 3 数据库打开问题
【发布时间】:2014-06-13 07:19:05
【问题描述】:

我在打开我的 SQLite3 数据库时遇到了一个奇怪的问题。

场景:用户点击 ListView 上的一行,数据库打开,然后再次成功关闭。直到用户在该行上多次点击后才会出现问题,然后数据库无法打开。该函数传统上在主线程上调用,因此只能发生一个进程,因此理论上可以避免此问题。

函数调用:

[self openDB];

Obj-c 代码:

-(void)OpenDataBase{
    if (sqlite3_open([[self dataFilePath] UTF8String], &sharedDataBase)!= SQLITE_OK) {
        sqlite3_close(sharedDataBase);
        NSLog(@"Failed to open database");
    }
}

它记录:

打开数据库失败

访问数据库时出错。错误代码为:21

关于如何解决此问题的任何建议?

编辑这是错误打印输出:无法打开数据库文件

【问题讨论】:

  • 使用sqlite3_errmsg 记录错误。
  • 顺便说一句 - 不要在无法打开的数据库上调用 sqlite3_close。没有意义。
  • 感谢回复,我试过这个 NSLog([NSString stringWithFormat:@"%c", sqlite3_errmsg]);但是它不会打印出数字,它只会打印出一个“?”有什么想法吗?
  • 您是否在每次使用后正确关闭数据库?确保您不是只是一遍又一遍地打开数据库而不每次都关闭它。
  • 我不知道极限。但是你应该总是清理你使用的东西。仅供参考 - 在我自己的应用程序中,我打开连接一次并在我的应用程序的整个生命周期中使用它。无需每次需要查询时打开和关闭。

标签: ios objective-c database sqlite


【解决方案1】:

根据问题 cmets 中来自@rmaddy 的信息,这对我有用:

我初始化数据库,然后在应用程序中只打开一次数据库。我已经测试过了,即使用力关闭,也不需要关闭。

最初,每次我需要访问数据库时都会打开和关闭数据库,但这不是必需的。现在它只打开一次,应用程序运行得更快。

感谢@rmaddy 的意见和建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2012-03-23
    • 1970-01-01
    • 2013-05-06
    • 2020-03-26
    相关资源
    最近更新 更多