3

rc = sqlite3_open( "test.db"、&db);を実行すると、「データベースファイルを開くことができません」というメッセージが表示されます。??

sqlite3 *db; // sqlite3 db struct
char *zErrMsg = 0;
int rc;

// Open the test.db file
rc = sqlite3_open("test.db", &db); // <-- creates DB if not found ??

if( rc ){
    // failed
    fprintf(stderr, "ERROR: Can't open database: %s\n", sqlite3_errmsg(db));
} 
4

2 に答える 2

10

sqlite3_openデータベースがまだ存在しない場合はエラーを返します。データベースがまだ存在しない場合にデータベースを作成するには、フラグ とフラグを使用sqlite3_open_v2します(両方とも必須です)。SQLITE_OPEN_CREATESQLITE_OPEN_READWRITE

rc = sqlite3_open_v2(/* DB Path */, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

参照


を見つける/* DB PATH */には、ファイル名をドキュメントディレクトリに基づいて作成する必要があります。

- (NSString *) applicationDocumentsDirectory 
{    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

この便利な方法を使用して、ドキュメントパスをデータベース名と組み合わせることができます。

NSString *documents = [self applicationDocumentsDirectory];
NSString *dbPath = [documents stringByAppendingPathComponent:@"test.db"];

rc = sqlite3_open_v2([dbPath UTF8String], &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
于 2012-06-28T18:41:17.633 に答える
-1
#define SQLITE_OK 0
sqlite3 *db;
char *zErrMsg=0;
if(sqlite3_open("demo.db", &db) == SQLITE_OK)
{
    if(sqlite3_exec(db, "select * from Users", callback, 0, &zErrMsg) == SQLITE_OK)
            msgbox1("success");
    sqlite3_close(db);
}
else
    msgbox1("failure");

これが私が使用するサンプルコードです。

于 2014-09-14T06:47:54.430 に答える