2013-06-26 41 views
-4

我试图在点击按钮时更新我的​​一个表的列。Sqlite3更新查询不能在ios应用程序中工作

问题是代码没有给出任何异常,但它并没有更新表。

当视图控制器再次加载时,它显示旧值而不是更新一个。

更新db的代码附在下面。

@try { 
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 

     NSString *sqlStatement = @"UPDATE messagesTable SET Favorite = 1 where MessageID="; 
     sqlStatement = [sqlStatement stringByAppendingString:msgId]; 

     NSLog(@"sql statement: %@", sqlStatement); 



     const char *sql = [sqlStatement UTF8String]; 
     int result = sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL); 
     if(result != SQLITE_OK) { 
      NSLog(@"Prepare-error #%i: %s", result, sqlite3_errmsg(database)); 
     } 

        // Release the compiled statement from memory 
     sqlite3_finalize(compiledStatement); 

    } 


    sqlite3_close(database); 


} 
@catch (NSException *exception) { 
    NSLog(@"Name: %@",exception.name); 
    NSLog(@"Reason: %@",exception.reason); 

} 
@finally { 

} 

欢迎任何建议。 :-)

+1

这是解决一个简单的问题。如果sqlite函数没有返回'SQLITE_OK',则报告'sqlite3_errmsg()'返回的错误消息。这就是它的目的,告诉你哪里出了问题。 – trojanfoe

+1

是的,从SQLite调用捕获异常没有真正意义。一切都是用返回码和错误码完成的。 –

+0

是的,正如Hot Licks所述; sqlite API基于C而不是Objective-C,所以它在哪里说它会抛出Objective-C异常(或者C++异常)? – trojanfoe

回答

3

您不打电话给sqlite3_step,它执行更新。在sqlite3_prepare后和sqlite3_finalize之前,你需要的东西,如:

if (sqlite3_step(compiledStatement) != SQLITE_DONE) 
    NSLog(@"%s: step error: %s", __FUNCTION__, sqlite3_errmsg(database)); 
+0

Thnx Rob ..你建议的解决方案适用于我.. !! –