如何逐行更新我的sqlite数据库? IOS

时间:2013-11-19 14:49:18

标签: ios sqlite sql-update

我想像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)时,我想用参数对象更新一个索引行。

感谢您提前

2 个答案:

答案 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_*