我正在尝试做的事情
在我的应用程序中,我有一个 SQL-Lite 数据库,为此我编写了一些方法。方法的回调是一个布尔值。True = 可以写入数据,False = 无法写入数据。该代码在 X-Code 中没有显示任何错误,所以我应该是对的。
问题
在我的方法中,我定义了一个布尔值并将其设置为 Null。之后我有一个 If-Clause,它检查数据是否可以写入我的数据库,并将定义的布尔值更改为真或假。这给我带来了错误:EXC_BAD_ACCESS (code = 2, address = 0x0)
关键是,我不明白为什么会出现这个错误。你们能告诉我,我做错了什么以及如何解决它。您可以在此处找到代码:
代码
- (BOOL *) createLogin:(NSInteger *)user_id
usr: (NSString *)username
pwd: (NSString *)password
date: (NSDate *)last_login{
BOOL *returnvalue = NULL;
self.ivo_db = [[ivo_database alloc] init];
if((sqlite3_open_v2([[ivo_db getWritableDatabase] UTF8String], &sqldb, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK)){
NSLog(@" %s Couldn't open writable database '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(sqldb), sqlite3_errcode(sqldb));
}else{
int userid = *user_id;
NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO tbl_login (user_id, username, password, last_login) VALUES (%d,'%@','%@','%@')", userid, username, password, last_login];
const char *putLoginData = [sqlString UTF8String];
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare(sqldb, putLoginData, -1, &sqlStatement, NULL) != SQLITE_OK)
{
NSLog(@"%s SQLITE_ERROR while preparing Statement '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(sqldb), sqlite3_errcode(sqldb));
*returnvalue = NO;
}else{
sqlite3_step(sqlStatement);
sqlite3_finalize(sqlStatement);
int lastInsert = sqlite3_last_insert_rowid(sqldb);
NSLog(@"lastinsertid:%d", lastInsert);
sqlite3_close(sqldb);
*returnvalue = YES;
}
}
return returnvalue;
}