2016-01-22 90 views
0

當我嘗試更新表它給了我一個SQLite的更新命令不工作

錯誤消息:近「(」:語法錯誤

請有人建議我解決這個問題, 。

我更新表時,我點擊它放在下面的工具欄上的保存按鈕(欄按鈕項)。

問題是,它總是走ing至sqlite3_step的其他聲明。

我不明白這個問題和上述錯誤的確切問題。

任何建議,將不勝感激。

以下是我更新方法:

if ([databaseManager didExistDatabaseInDocumentDirectory] == YES) 
    { 
     const char *dbpath = [[databaseManager getDatabasePathFromDocument] UTF8String]; 

     sqlite3_stmt *stmt; 
     if (sqlite3_open(dbpath, &scanningDB) == SQLITE_OK) 
     { 
      const char *update_stmt1 = "UPDATE FILES SET (documentType,orderNumber) VALUES (?,?) WHERE ID = ?"; 
      sqlite3_prepare_v2(scanningDB, update_stmt1, -1, &stmt, NULL); 

      sqlite3_bind_text(stmt, 1, [str UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text(stmt, 2, [str1 UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_int(stmt, 3,[num intValue]); 

      if(sqlite3_step(stmt)==SQLITE_DONE) 
      { 
       sqlite3_reset(stmt); 
       NSLog(@"Record Updated Successfully"); 

      } 
      else 
      { 
       NSLog(@"Could not Update Record"); 
       NSLog(@" error message %s",sqlite3_errmsg(scanningDB)); 
       sqlite3_finalize(stmt); 
       sqlite3_close(scanningDB); 
       return NO; 
      } 
      sqlite3_finalize(stmt); 
      sqlite3_close(scanningDB); 

     } 
     else 
      return NO; 
    } 
    else 
     return NO; 
+0

它看起來像你的更新查詢是錯誤的。看看這裏:http://www.tutorialspoint.com/sql/sql-update-query.htm – Mayur

回答

0

您更新查詢是錯誤的。

UPDATE FILES SET (documentType,orderNumber) VALUES (?,?) WHERE ID = ? 

語法:

UPDATE table_name 
SET column1 = value1, column2 = value2...., columnN = valueN 
WHERE [condition]; 

您的疑問:

UPDATE FILES SET documentType =?, orderNumber =? where ID =?, documentTypeString, Yourordernumber, yourID 

樣品:

- (void) update 
     { 
      if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
      { 
       if(updateStatement == nil) 
       { 
        const char *sql = "UPDATE FILES SET documentType =?, orderNumber =? where ID =?"; 
        if(sqlite3_prepare_v2(database, sql, -1, & updateStatement, NULL) != SQLITE_OK) 
         NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); 
       } 

       sqlite3_bind_text(documentType 
, 1, [comment UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(orderNumber 
, 2, [categoria UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_int(ID, 3, id); 


       if(SQLITE_DONE != sqlite3_step(updateStatement)) 
        NSAssert1(0, @"Error while updating data. '%s'", sqlite3_errmsg(database)); 
       else 
        //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid 
        //noteID = sqlite3_last_insert_rowid(database); 

        //Reset the update statement. 
        sqlite3_reset(updateStatement); 
       sqlite3_close(database); 
       deleteStatement = nil; 
      } 
      else 
       sqlite3_close(database); 
     } 

基本SQLite的教程: http://www.tutorialspoint.com/sqlite/index.htm

+0

你的意思是說它應該是這樣的:const char * update_stmt1 =「UPDATE FILES SET documentType =?,orderNumber =? WHERE ID =?「; –

+0

OR應該是這樣的:const char * update_stmt1 =「UPDATE FILES SET documentType = [str UTF8String],orderNumber = [str1 UTF8String] WHERE ID = [num intValue]」; –

+0

謝謝你Ramesh_T.It爲我工作。 const char * update_stmt1 =「UPDATE FILES SET documentType =?,orderNumber =?WHERE ID =?」; –

1

請糾正以下查詢。

const char *update_stmt1 = "UPDATE FILES SET documentType = ? ,orderNumber = ? WHERE ID = ? 

希望這會對你有幫助。

+0

雅它工作我@Ketan P.非常感謝。 –

+0

但我只想知道爲什麼這不起作用:更新文件集(documentType,orderNumber)VALUES(?,?)WHERE ID =?。我使用相同的插入語法,那裏工作正常。 –

+0

@NagendraK在插入它的工作,但sqlite可能不支持UPDATE相同的語法。如果這對你有幫助。你可以勾選這個答案。 –