xcode sqlite3删除数据库错误

时间:2012-06-18 10:49:32

标签: xcode caching sqlite

我在我的iOS项目中使用sqlite3。 登录/注销时我想重新创建整个数据库。 (我可以做“从表中删除”;但是有~10个表,当我需要一个表时,我也要小心编写删除代码) 所以我搜索删除数据库;但我发现无法通过查询完成。 据说我必须从文件系统中删除它;  我的代码是;

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *dbPathDB=[appDelegate getDBPath];//dbname.sqlite
//to remove the db
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath =  [documentsDirectory stringByAppendingPathComponent:@"dbname.sqlite"];

//both of them works same if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
if(filePath){
    NSLog(@"it is removed now");
    [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
}

//recreating the db
if (sqlite3_open([dbPathDB UTF8String], &database) == SQLITE_OK) {
    NSLog(@"db is created");

}

当我在设备上尝试时,当我第一次登录时(尚未删除数据库)一切正常,当我退出并再次登录时,我收到有关插入数据的错误(但它可以连接到db,该部分有效,错误是关于再次插入相同的行。)

我停止设备再次运行并登录我没有插入错误,因为数据库很干净.. 它看起来像db文件被删除但db是在缓存上还是那样的?我怎样才能删除并创建相同的数据库,然后插入数据而不会出现错误

1 个答案:

答案 0 :(得分:3)

这个有效:

-(void)removeDB {
    // Check if the SQL database has already been saved to the users phone
    // if not then copy it over
    BOOL success;
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    success = [fileManager fileExistsAtPath:[appDelegate getDBPath]];
    if(success) {
        [fileManager removeItemAtPath:[appDelegate getDBPath] error:&error];
        NSLog(@"This one is the error %@",error);
        return;
    }
    //recreating the db
    if (sqlite3_open([[appDelegate getDBPath] UTF8String], &database) == SQLITE_OK) {
        NSLog(@"db is created");
    }
}