我还在学习iOS开发,我正在尝试使用数据库来保存我的记录。当我第一次尝试插入它成功时。但是,当我执行另一个插入操作时,"磁盘I / O错误"即使select语句工作正常也会出现。
这里有一些代码段。我正在模拟器上进行测试。
- (IBAction)addToFavBtnPressed:(UIButton *)sender {
sqlite3_stmt *favStmt;
const char *dbpath = [_databasePath UTF8String];
if(sqlite3_open(dbpath, &_db) == SQLITE_OK) {
NSString* insertsql = @"";
if(_appDelegate.detailsDescription == nil)
{insertsql = [NSString stringWithFormat:@"INSERT INTO favs (ID, TITLE, START_DATE, END_DATE, BRIEF_DESCRIPTION, FULL_DESCRIPTION, SMALL_IMG, LARGE_IMG) VALUES (\"%d\", \"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")", _event._id.integerValue, _event.title, _event.startDate, _event.endDate, _event.briefDescription, _event.fullDescription, _event.smallImage, _event.largeImage];
}else {
insertsql = [NSString stringWithFormat:@"INSERT INTO favs (ID, TITLE, START_DATE, END_DATE, BRIEF_DESCRIPTION, SMALL_IMG, LARGE_IMG) VALUES (\"%d\", \"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")", _appDelegate.eventId, _appDelegate.detailsTitle, _appDelegate.detailsStartDate, _appDelegate.detailsEndDate, _appDelegate.detailsDescription, @"", @""];
}
const char *insert_statment = [insertsql UTF8String];
sqlite3_prepare_v2(_db, insert_statment, -1, &favStmt, NULL);
if(sqlite3_step(favStmt) == SQLITE_DONE) {
NSLog(@"Celebrating already %@", _event.title);
UIImage *activatedImage = [UIImage imageNamed:@"likeactivated.png"];
[_addToFavBtn setBackgroundImage:activatedImage forState:UIControlStateNormal];
} else {
NSLog(@"Error %s while preparing statement", sqlite3_errmsg(_db));
}
} else {
NSLog(@"booo hooo");
}
sqlite3_finalize(favStmt);
sqlite3_close(_db);
}
-(void)openOrCreateDb {
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
_databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"favs.db"]];
const char *dbpath =[_databasePath UTF8String];
if(sqlite3_open(dbpath, &_db) == SQLITE_OK) {
char *errMsg;
const char *sql_statement = "CREATE TABLE IF NOT EXISTS favs (ID INTEGER PRIMARY KEY, TITLE TEXT, AR_TITLE TEXT, START_DATE TEXT, END_DATE TEXT, BRIEF_DESCRIPTION TEXT, FULL_DESCRIPTION TEXT, AR_BREIF_DESCRIPTION TEXT, AR_FULL_DESCRIPTION TEXT, SMALL_IMG TEXT, LARGE_IMG TEXT, AR_SMALL_IMG TEXT, AR_LARGE_IMG TEXT)";
if(sqlite3_exec(_db, sql_statement, NULL, NULL, &errMsg) != SQLITE_OK) {
}
}
}