检查sqlite3数据库是否为null

时间:2016-03-02 07:11:07

标签: ios objective-c sqlite

我正在构建一个ios应用程序,其中sqlite文件被启动一次并在所有sqlite事务中使用;它是为了节省性能。 它被定义为:

static sqlite3 *dbName = nil;

在函数中,我将数据库初始化为:

-(int)initialize:(NSString *)dbPath{
    if (sqlite3_open_v2(dbPath, &dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) {
        //some codes
    }
}

在一些事务之后,我发现sqlite3实例为NULL并且app崩溃了。我想知道是否有办法检查sqlite3实例是否已取消分配。

1 个答案:

答案 0 :(得分:0)

我可以看到两个潜在的问题:

  1. 您正在多次打开数据库,并最终(我不能说何时)放弃并设置NULL的句柄。这是因为你没有防止多次打开它。

  2. 您的代码显示sqlite3_open_v2(dbPath, &dbPath, ...,但这不是正确的。名称dbName也没有很好地选择。

  3. 这应该可以解决大部分问题:

    -(int)initialize:(NSString *)dbPath{
        if (dbName == NULL) {
            if (sqlite3_open_v2(dbPath, &dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) {
                //some codes
            }
        }
    }
    

    您最好使用单例模式,而不是static,因为它更清晰。