2013-03-16 75 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