如何在iOS中更新文本保存到数据库

时间:2013-10-30 10:17:19

标签: ios database sqlite uitextview

我有UITextView用于写笔记。写完笔记然后点击完成按钮文本将保存到数据库。在我从旧文本中继续添加一些文本后,单击“完成”按钮,它将保存新的文本行。

表:

 texts               texts_id
    Hi                    1
   Hi, How are u?         1

首先我写了Hi文本并点击完成。然后我从数据库查询文本并写了你好吗?但它节省了新的一排?我需要用Hi替换第一行,你好吗?有可能吗?

if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

        const char *sql = [[NSString stringWithFormat:@"SELECT textnotes FROM textnote where textnote = '%@','%@',",txtview.text,artID] cStringUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"sql is %s",sql);

        BOOL favExist = false;

        sqlite3_stmt *statement, *addStmt;

        if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
            // We "step" through the results - once for each row.
            while (sqlite3_step(statement) == SQLITE_ROW) {


                favExist = true;
            }
        }


        if(!favExist){


            const char *sqlInsert = [[NSString stringWithFormat:@"insert into textnote (textnotes,text_id ) values ('%@','%@')", txtview.text,artID] cStringUsingEncoding:NSUTF8StringEncoding];

            NSLog(@"sql insert is %s",sqlInsert);

            // [catID release];

            if(sqlite3_prepare_v2(database, sqlInsert, -1, &addStmt, NULL) != SQLITE_OK)
                NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

            if(SQLITE_DONE != sqlite3_step(addStmt))
                NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));



        }

1 个答案:

答案 0 :(得分:1)

你应该做一个“UPDATE”语句,而不是插入。

在第一次“完成”点击时,您的代码很好,但在随后点击“完成”按钮,您想要更新该行时,您需要使用类似的内容。

const char *sqlUpdate = [[NSString stringWithFormat:@"update textnotes set text = '%@' where id = rowID", txtview.text,rowID] cStringUsingEncoding:NSUTF8StringEncoding];

我希望这对你有意义。插入时,只需添加一个新行。它看起来像你的'id'列不是AutoIncrement,因为它应该是行ID不重复。