美文网首页
数据库更新语句中的小注意

数据库更新语句中的小注意

作者: 小小东 | 来源:发表于2015-09-09 10:06 被阅读178次

    在使用数据库存取数据的时候,必须要注意的是:在存取数据使用model类的时候,定义全局变量的model类比较方便,但是在存入数据的时候(一定要先初始化,不然存入的数据,有可能会出现,下一条数据会将上一条数据也存入,也就是夹带了上面的数据和本条数据一起存入数据库,在需要写入数据库的时候,一定要先初始化,或者不定义全局变量,在要存入数据的时候,直接实例化一个相对应的model对象即可,更直观,也方便后期查找和修改)

    例如:下面两个不同实例化

    Student *stuName = [[Student alloc] init];

    Student *stuSex = [[Student alloc] init];

    下面是更新语句:

    UPDATE student SET name = ?, sex = ? WHERE number = ?

    在上面的更新语句中,多个属性的时候需要用逗号隔开,而不是AND隔开,用了AND之后会导致数据库中的数值变为0或者 1(这是需要注意的地方)

    下面是两种更新数据库的方法

    1:直接在方法中传递参数(如果数据库中的属性较少,该方法比较直观,方便,直接修改,不需要在通过model类)

    - (BOOL)updateStudentName:(NSString *)aName byID:(NSInteger)aID

    {

    sqlite3_stmt *stmt = nil;

    NSString *sqlStr = [NSString stringWithFormat:@"update student set name = '%@' where number = %ld", aName, aID];

    int result = sqlite3_prepare_v2(dbPoint, [sqlStr UTF8String], -1, &stmt, NULL);

    if (result == SQLITE_OK) {

    if (sqlite3_step(stmt) == SQLITE_ROW) {//觉的应加一个判断, 若有这一行则修改

    if (sqlite3_step(stmt) == SQLITE_DONE) {

    sqlite3_finalize(stmt);

    return YES;

    }

    }

    }

    sqlite3_finalize(stmt);

    return NO;

    }

    2:不传递参数,用model复制之后直接更新数据库(如果数据库中的属性较多,这种方法比较好):需要注意的是在更新中这只需要更新的数据如果不更新数据(不给赋新的值,数据库的的该属性会变成NULL,下次再进入APP会闪退,数据库会崩溃,原有数据会丢失,也就是说,更新的里面的所有的属性必须全部从新赋值,及时不改变,只要你更新方法中有的属性必须从新赋值)

    - (void)updatedata:(Student *)stu

    {

    // Update数据进入数据库

    char *update = "UPDATE student SET name = ?, sex = ? WHERE number = ?";

    char *errorMsg = NULL;

    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(dbPoint, update, -1, &stmt, nil) == SQLITE_OK) {

    // 下面的数字1,2是指上面问号的顺序

    //        Student *stu = [[Student alloc] init];

    const char *subjectChar = [stu.name UTF8String];

    const char *contentChar = [stu.sex UTF8String];

    sqlite3_bind_text(stmt, 1, subjectChar, -1, NULL);

    sqlite3_bind_text(stmt, 2, contentChar, -1, NULL);

    sqlite3_bind_int(stmt, 3, stu.number);

    }

    if (sqlite3_step(stmt) != SQLITE_DONE) {

    NSAssert(0, @"erroe updating tabels %s",errorMsg);

    }

    sqlite3_finalize(stmt);

    //    sqlite3_close(dbPoint);

    }

    相关文章

      网友评论

          本文标题:数据库更新语句中的小注意

          本文链接:https://www.haomeiwen.com/subject/svcpcttx.html