4
我有一个问题,我的应用程序将打开该数据库并选择从中行确定,SQLite的内存的准备时,INSERT语句
然后,当我想用下面的代码添加新行,我总是得到的在执行prepare_V2
时出现以下问题。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while creating add statement. 'out of memory''
代码.....
static sqlite3 *database = nil;
static sqlite3_stmt *addStmt = nil;
- (BOOL)addUserprofile {
addStmt = nil; // set to force open for testing
database = nil; // set to force creation of addstmt for testing
if (database == nil) { // first time then open database
NSString *databaseName = @"UserProfile.db";
// Use editable database paths
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
NSLog(@"path = %@",databasePath);
NSLog(@"opening Database");
sqlite3 *database;
// Open the database from the users filessytem
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
NSLog(@"Database Open");
}
else {
NSLog(@"Database did not open");
}
}
if(addStmt == nil) {
NSLog(@"Creating add stmt");
const char *sql = "INSERT INTO Profile (ProfileName) VALUES(?)";
if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) {
NSAssert1(0, @"** Error while creating add statement. '%s'", sqlite3_errmsg(database));
success = NO;
return success;
}
}
sqlite3_bind_text(addStmt, 1, [ProfileName UTF8String], -1, SQLITE_TRANSIENT);
错误消息是“错误而产生的更新语句”,而你的代码表示,“建立出错添加语句“ - 你确定你正在调试你正在运行的代码吗? –
我想出了自己。打开的数据库不起作用。所以我摆脱了有条件的开放,并强制它打开每一次,现在的代码工作。我对添加和更新功能都有同样的问题。 –
非常感谢您发布答案。 –