2011-07-14 18 views
2

私はいくつかのデータをSQLiteデータベースに保存するMacアプリケーションを作成しています。問題は、データベースを閉じてもう一度開くと、データがそこにないことです。ここに私のコードは次のとおりです。SQLite3:データベースが保存されていません

NSString *sql = [NSString stringWithFormat:@"INSERT INTO people(name, artist, id, album, location, cover) VALUES('%@', '%@', %d, '%@', '%@', '%@');", name, artist, ID, album, path, cover]; 

sqlite3 *database = NULL;  
sqlite3_open([[[NSBundle mainBundle] pathForResource:@"db" ofType:@"database"] 
    cStringUsingEncoding:NSUTF8StringEncoding], &database); 

sqlite3_stmt *statement;  
sqlite3_prepare_v2(database, "CREATE TABLE IF NOT EXISTS people(name TEXT, id INT, artist TEXT, album TEXT, cover TEXT, location TEXT);", -1, &statement, NULL); 
sqlite3_step(statement); 
sqlite3_finalize(statement);  
sqlite3_prepare_v2(database, [sql cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL); 
sqlite3_step(statement); 
sqlite3_finalize(statement); 

statement = NULL; 
sqlite3_close(database); 
+1

何そこにいくつかのエラー処理を置くことについて?これらの関数呼び出しをチェックしているわけではなく、ほとんどすべてが失敗する可能性があります。 – Mat

+0

また、データベースをアプリケーションバンドルに保存してもよろしいですか?それはお勧めの場所ではありません。 –

+0

私は小切手をして、すべてうまく動作しているようです。また、Application Supportディレクトリに新しいデータベースを作成したときに、そのデータベースにデータを保存できたことに気付きました。しかし、私は再びそれを開いたとき、私はそれにすべてのデータを保存することができませんでした:( –

答えて

-1

あなたの挿入を確認するために、このコードを使用することができます:

sqlite3_stmt *stmt; 
char *errmsg; 
const char *sql = [isql cStringUsingEncoding:NSUTF8StringEncoding]; 

if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) { 
    NSLog(@"SQL Warning: Erro ao executar a instrução '%s'.", sqlite3_errmsg(database)); 
    sqlite3_reset(stmt); 
    sqlite3_finalize(stmt); 
    return; 
} 

if(!sqlite3_exec(database, sql, nil, &stmt, &errmsg) == SQLITE_OK) NSLog(@"SQL Warning: '%s'.", sqlite3_errmsg(database)); 

sqlite3_reset(stmt); 
sqlite3_finalize(stmt); 
関連する問題