2011-10-31 65 views
4

对此好奇......即使我将pathForResource更改为@“fadfdasfa”或其他不存在的名称,我仍然在记录“数据库已打开”?sqlite3_open总是返回SQLITE_OK?

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"); 
+1

嗯,也许它是如果它还不存在的话就被创建。你尝试过'sqlite3_open_v2'吗? – 2011-10-31 15:21:20

回答

7

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

+1

请注意,如果它确实存在,就像@Raloul [解释](http://stackoverflow.com/a/14295620/948581)一样,SQLITE_OK也会返回。 – Tibo

1

这是当你运行在终端如下所示:

sqlite3 test.db 

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

5

打开数据库是这样的:

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

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

+0

以''SQLITE_OPEN_READONLY''模式打开时:可以通过发出SQL命令进一步检测无效文件。如果这返回26(“文件被加密或不是数据库”),则文件存在但不是sqlite3数据库文件。 – Tibo