2011-07-14 72 views
2

我正在创建一个Mac应用程序,它将一些数据保存到SQLite数据库。问题是:当我关闭数据库并再次打开时,数据不在那里。这里是我的代码: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

另外,您确定要将数据库保存到应用程序包吗?这不是推荐的位置。 – 2011-07-14 09:45:34

+0

我做了检查,一切似乎工作正常。我还注意到,当我在应用程序支持目录上创建一个新数据库时,我能够将数据保存到它。但是,当我再次打开它时,我无法将任何数据保存到它:( –

回答

-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);