我正在尝试使用以下代码在数据库中插入一些数据:
-(void)insertLocationOnDatabase:(LocationType *)aLocation {
sqlite3_stmt *stmt;
int location = [aLocation.locationID intValue];
NSLog(@"Location ID: %i", location);
const char *sql = "insert into tbl_location values (?,?,?,?)";
if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) == SQLITE_OK) {
sqlite3_bind_int(stmt, 0, location);
sqlite3_bind_text(stmt, 1, [aLocation.Description UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [aLocation.isActive UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [aLocation.sequenceOrder UTF8String], -1, SQLITE_TRANSIENT);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"Location %@ inserted on database",aLocation.Description);
}
else {
NSLog(@"Error on step: %i",sqlite3_errcode(database));
}
}
else {
NSLog(@"Error on prepare: %i",sqlite3_errcode(database));
}
}问题出现在网上:
sqlite3_bind_int(stmt, 0, location);如果没有这一行并更改sql,代码就可以正常工作,但是当我把这一行放回原处时,我得到了这个错误:
2010-09-17 10:24:01.032 StockControl[944:207] Error on step: 20来自sqlite3.h:
#define SQLITE_MISMATCH 20 /* Data type mismatch */有人知道我哪里错了吗?
致敬,克劳迪奥
发布于 2010-09-17 08:36:37
根据binding methods in SQLite的文档,绑定从1开始计数,而不是从0开始:
第二个参数是要设置的
参数的索引。最左边的SQL参数的索引为1。
这很可能导致类型不匹配。
发布于 2010-09-17 08:43:19
为什么不使用下面的方法呢?
NSString *sqlCmd = [NSString stringWithFormat:
@"insert into tbl_location values (%d,'%@','%@','%@')",
location,
aLocation.Description,
aLocation.isActive,
aLocation.sequenceOrder];
const char *sql = [sqlCmd UTF8String];
// ...我只对大数据使用绑定,例如图像文件。
https://stackoverflow.com/questions/3731894
复制相似问题