【发布时间】:2013-01-14 14:12:04
【问题描述】:
我的应用程序使用 SQLite 数据库来存储联系人的某些数据。例如(record_ID、时间戳等)我正在尝试使用此方法用某些值更新 SQLITE 记录。
在初始化数据库后,我曾经调用过这个方法。仅更新了 1 条记录。即使我每次都调用这个方法来更新。
- (void) updateRecord:(int)recordID:(NSString *)sapCustId:(NSString *)sapContactId: (NSString *)timestamp {
static sqlite3_stmt *updateStmt = nil;
if(updateStmt == nil) {
NSString *sql = [NSString stringWithFormat:@"update contactList set sapCustId = \"%@\", sapContactId = \"%@\", timestamp = \"%@\" Where record_ID = \"%d\"", sapCustId, sapContactId, timestamp, recordID];
const char *sql_stmt = [sql UTF8String];
if(sqlite3_prepare_v2(databaseHandle, sql_stmt, -1, &updateStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(databaseHandle));
}
// sqlite3_bind_text(updateStmt, 0, [sapCustId UTF8String], -1, SQLITE_TRANSIENT);
// sqlite3_bind_text(updateStmt, 1, [sapContactId UTF8String], -1, SQLITE_TRANSIENT);
// sqlite3_bind_int(updateStmt, 2, recordID);
// sqlite3_bind_text(updateStmt, 3, [timestamp UTF8String], -1, SQLITE_TRANSIENT);
if(SQLITE_DONE != sqlite3_step(updateStmt))
NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(databaseHandle));
sqlite3_reset(updateStmt);
sqlite3_close(databaseHandle);
//Reclaim all memory here.
[sapContactId release];
[sapCustId release];
}
告诉我。如何解决?
【问题讨论】:
-
你在哪里打开你的数据库?
-
在我调用 updateRecord 方法的地方打开它.. 即首先我调用 [gss initDatabase];然后 [gss updateRecord:record_ID:sapCustId:sapContactId:timestamp];
-
你为什么不打电话给
sqlite3_finalize? -
摆脱那些静态的东西,并确保准备、执行和完成每个
UPDATESQL 语句。如果 (a) 您正在绑定语句而不是每次都从头开始构建 SQL,则您可以使用保留的sqlite3_stmt做一些事情; (b) 您并非一直在打开和关闭数据库。 -
@ibiren 非常好。我在那里提供了answer。但是,一般来说,当您告诉我们您遇到了一个断言错误,但您并没有告诉我们断言是什么时,这令人沮丧。您完成所有这些工作以执行
sqlite3_errmsg以获得很好的描述性错误消息,然后您不会与我们分享它们。始终告诉我们 (a) 断言是什么、完整的内容以及任何相关的NSLog声明; (b) 告诉我们它在哪里。
标签: ios sqlite ios6 sql-update xcode4.5