2011-10-31 8 views
4

これについて興味があります... pathForResourceを@ "fadfdasfa"や他の存在しない名前に変更しても、私はまだ "Database Opened"を記録しているようです。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'を試しましたか? –

答えて

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

関連する問題