我想像Android一样逐行更新我的数据库sqlite3,并使用索引来更新特定行。我怎么用来做那个?
-(void) updateBddWithData:(Data*) data{
sqlite3 *databaseOK=self.database;
if(sqlite3_open([self.databasePath UTF8String], &databaseOK) == SQLITE_OK) {
NSString* updateIntoBdd = [NSString stringWithFormat:@"UPDATE ART_TABLE SET ida = '%@' ,title = '%@' ,chapo = '%@' ,link = '%@' ,linkimg = '%@' ,pubdate = '%@' ,creator = '%@' ,description = '%@' ",data.ide,data.title,data.chapo,data.link,data.linkImg,data.pubDate,data.creator,data.description];
sqlite3_stmt* statement = NULL;
int returnValue = (sqlite3_prepare_v2(databaseOK, [updateIntoBdd UTF8String], -1, &statement, NULL));
if(returnValue == SQLITE_OK){
if(sqlite3_step(statement) == SQLITE_DONE){
// What can I do ?
}
}
sqlite3_finalize(statement);
sqlite3_close(databaseOK);
}
}
当我调用我的方法Update(object)时,我想用参数对象更新一个索引行。
感谢您提前
答案 0 :(得分:0)
为了避免重新发明轮子,我建议使用像FMDatabase这样的包装。
但是,如果你真的想在没有包装器的情况下这样做:
-(void) updateBddWithData:(Data*) data {
sqlite3 *databaseOK=self.database;
if(sqlite3_open([self.databasePath UTF8String], &databaseOK) == SQLITE_OK) {
NSString* updateIntoBdd = [NSString stringWithFormat:@"INSERT OR REPLACE INTO ART_TABLE (ida, title, chapo, link, linkimg, pubdate, creator, description) VALUES ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@')", data.ide, data.title, data.chapo, data.link, data.linkImg, data.pubDate, data.creator, data.description];
sqlite3_stmt* statement = NULL;
const char *update_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(databaseOK, insert_stmt,-1, &update_stmt, NULL);
if (sqlite3_step(statement) == SQLITE_DONE) {
//SUCCESS
}
else {
//ERROR
}
sqlite3_reset(statement);
sqlite3_close(databaseOK);
}
}
答案 1 :(得分:0)
您在声明中缺少WHERE
子句。
通常情况下,您在表格中有ID
(也许这是您的ida
?),以便您可以使用:
UPDATE ART_TABLE SET ida = '%@', ... WHERE id ='%@';
另请考虑使用更安全的sqlite3_bind_*。