2017-08-29 31 views
0

我的iOS應用的上線應該在哪裏關閉sqlite的連接 - iOS應用

sqlite3_exec(database, "COMMIT", 0, 0, 0); 

下面是完整的功能終止。

-(void)clearCarts 
{ 
    sqlite3_exec(database, "BEGIN", 0, 0, 0); 
    sqlite3_stmt *stmt = nil; 
    const char *sql = "DELETE FROM carts"; 
    if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database)); 
    if (SQLITE_DONE != sqlite3_step(stmt)) 
     NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database)); 
    sqlite3_reset(stmt); 
    sqlite3_finalize(stmt); 
    sqlite3_exec(database, "COMMIT", 0, 0, 0);// terminates here 
} 

可能是什麼原因,並在那裏我應該使用sqlite3_close(database)作爲sqlite3_close(database)未在任何功能中使用。 請高級建議,謝謝。

回答

0

這必須是因爲您沒有打開數據庫來執行查詢,並且應該在執行語句後使用sqlite3_close(database)

嘗試用下面的代碼

sqlite3 *database; 
sqlite3_stmt *selectstmt; 

if (sqlite3_open([yourDatabasePath UTF8String], &database) == SQLITE_OK) 
{ 
    NSString *sql = [NSString stringWithFormat:@"DELETE FROM carts"]; 
    const char *insert_stmt = [sql UTF8String]; 
    sqlite3_prepare_v2(database,insert_stmt, -1, &selectstmt, NULL); 
    if(sqlite3_step(selectstmt)==SQLITE_DONE) 
    { 
     NSLog(@"Delete successfully"); 
    } 
    else 
    { 
     NSLog(@"Error while Clean Database. '%s'", sqlite3_errmsg(database)); 
    } 
    sqlite3_finalize(selectstmt); 
} 
sqlite3_close(database); 
+0

謝謝你的答案。實際上數據庫正在以另一種功能打開,如下所示: ' - (id)initContent:(NSString *)source {0} {0} {0} self = [super init]; int ret = sqlite3_open([source UTF8String],&database); if(ret!= SQLITE_OK) { sqlite3_close(database); NSLog(@「error opening database!error =%i」,ret); } return self; }' – Yas

+0

您的歡迎:) –

+0

任何其他建議請:)我對這一切都很新,需要修改一個iOS應用程序。應用程序並沒有終止此聲明中的所有時間,有時它可以正常工作,有時終止。不知道爲什麼它是這樣的.. – Yas

相關問題