iOS数据库I / O磁盘错误

时间:2015-12-01 15:30:53

标签: ios objective-c sqlite

我还在学习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) {
        }
    }
}

0 个答案:

没有答案
相关问题