2013-08-31 64 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

總是這樣的小錯誤-.-