2013-08-31 43 views
0

我想更新在SQL数据库中的东西,但...错误每它给了我一个错误的时间SQL UPDATE语句

这是我的代码:

// UPDATE SQL 
- (void)sqlId:(int)sqlId text:(NSString *)text time:(NSString *)time preis:(NSString *)preis 
{ 
    [self openDb]; 

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

     NSString *insertSQL = [NSString stringWithFormat: 
           @"UPDATE `webdesign` SET data='%@', time='%d', preis='%@' WHERE id='%d')", 
           text, [time intValue], preis, sqlId]; 

     const char *insert_stmt = [insertSQL UTF8String]; 
     sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL); 

     if (sqlite3_step(statement) == SQLITE_DONE) { 
      NSLog(@"updated"); 
     } else { 
      NSLog(@"Error"); 
     } 

     sqlite3_finalize(statement); 
    } 

    [self closeDb]; 

} 

控制台说:

2013-08-31 12:07:21.366 Webdesign[6519:a0b] database opened 
2013-08-31 12:07:21.367 Webdesign[6519:a0b] Error 
2013-08-31 12:07:21.367 Webdesign[6519:a0b] database closed 

也许这是一个简单的问题,但我找不到它。

+0

你忘了创建 'sqlite3_stmt *语句= NULL;' – iPatel

+0

THX,但没有改变 – Loko

+0

检查sqlite3_prepare_v2'的'的返回值。当任何函数失败时,调用[sqlite3_errmsg](http://www.sqlite.org/c3ref/errcode.html)。 –

回答

0

不知道你的数据库SQLITE3的表结构,它不可能为您提供100%正确的答案,但我怀疑行

UPDATE `webdesign` SET data='%@', time='%d', preis='%@' WHERE id='%d') 

是错误的。事实上,你把小数点放在单引号之间,你把表名称放在单引号之间,...

我倾向于使用NSLog来写出创建的语句,并将该语句复制/粘贴到我的sqlite3中命令行工具(或者我经常使用的Valentina Studio中)来检查创建的语句是否正确。这节省了我很多时间。

亲切的问候, PB

0

哎呀我已经找到了错误...

@"UPDATE `webdesign` SET data='%@', time='%d', preis='%@' WHERE id='%d')" 

的 “)” 是错误的! :d

总是这样的小错误-.-