【问题标题】:sqlite3_open always returning SQLITE_OK?sqlite3_open 总是返回 SQLITE_OK?
【发布时间】:2011-12-18 19:59:41
【问题描述】:

对此感到好奇...似乎即使我将 pathForResource 更改为 @"fadfdasfa" 或其他不存在的名称,我仍然在记录“数据库已打开”?

sqlite3 * myDatabase;

NSString *path = [[NSBundle mainBundle] pathForResource:@"carsdatabase" ofType:@"db"];

    if (sqlite3_open([path UTF8String], &myDatabase) == SQLITE_OK)
        NSLog(@"Database Opened");
    else 
        NSLog(@"Failed to Open");

【问题讨论】:

  • 好吧,如果它还不存在的话,也许它是被创建的。你试过sqlite3_open_v2吗?

标签: objective-c sqlite


【解决方案1】:

如果数据库尚不存在,则会为您创建数据库。

【讨论】:

  • 请注意,如果它确实存在,如@Raloul explains,也会返回SQLITE_OK。
【解决方案2】:

这样打开数据库:

std::string filename("mydatabase.db");
sqlite3 *db;
int rc = sqlite3_open_v2(filename.c_str(), &db, SQLITE_OPEN_READWRITE, NULL);

如果数据库文件不存在,它会返回一个错误代码(14)。但是,如果文件存在但不是有效的数据库,则返回SQLITE_OK!

【讨论】:

  • SQLITE_OPEN_READONLY模式打开时:可以通过发出SQL命令进一步检测无效文件。如果返回 26(“文件已加密或不是数据库”),则该文件存在但不是 sqlite3 数据库文件。
【解决方案3】:

这就像在终端中运行以下命令:

sqlite3 test.db

如果它不存在,它将为您创建。因此,您每次更改名称时只需创建一个新数据库,您可能会在主包中看到它。

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多