2013-03-16 33 views
2

我的iOS應用程序使用sqlite3的數據庫,到目前爲止,我已經成功地設法創建表,插入值,然後後來選擇它們。SQLite的更新語句可能性

但是,現在我想更新。我嘗試這樣做:

UPDATE field WHERE _id = 5 (name,type,state) VALUES (?,?,?) 

但SQLite的告訴我,附近的WHERE

存在一個語法錯誤,因爲我明白,SQLite的可能不支持上述語法更喜歡它的格式如下。

UPDATE field SET name= "Upper" type= "Pigs" state=1 WHERE _id = 5; 

在第二條語句不過,請注意有沒有(?,?,?)(參數化查詢我相信其所謂的)動態插入值到SQL字符串。告訴我這是可能的,如果是這樣的話?

回答

3

是的,你可以使用參數化查詢,如下: -

NSString *sqlString = @"UPDATE field SET name=?, type=?, state=? where _id=?"; 

sqlite3_stmt *stmt; 
if(sqlite3_prepare(database, [sqlString UTF8String], -1, &stmt, NULL) != SQLITE_OK) 
{ 
    //Handle Error 
} 


if(sqlite3_bind_text(stmt, 1, [record.name UTF8String],[record.type UTF8String],[record.state UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK) 
{ 
    // Handle Error 
} 
if(sqlite3_bind_int(stmt, 2, record.key) != SQLITE_OK) 
{ 
    // Handle Error 
} 


if (sqlite3_step(statement) != SQLITE_DONE) 
{ 
    // Handle Error 
} 

而且你的參數化代碼已準備就緒。

+0

我真的需要每個綁定值的if語句嗎? – 2013-03-16 20:17:37

+0

不,只是顯示了其中的一種方式.. – 2013-03-16 21:05:26

+0

它的工作原理。非常感謝。 – 2013-03-17 14:18:34

3

你想

update field set name = ?, type = ?, state = ? where id = 5