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

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

作者: 小小东 | 来源:发表于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