Ios Sqlite错误-“;插入失败:无法打开数据库文件";

Ios Sqlite错误-“;插入失败:无法打开数据库文件";,ios,objective-c,sqlite,Ios,Objective C,Sqlite,我正在使用NSTimer每秒调用下面的函数,并使用参数传递activityType和Activity自信的值。在一些成功的插入之后,我得到一个错误“无法打开数据库文件” 如果执行了如此多的读/写操作,请保持数据库处于打开状态,并在最后关闭它。也就是说,使用ViewControllert打开它一次,然后关闭它一次。准确地说,您得到的是插入失败:无法打开数据库文件?@trojanfoe,是的,我得到的是相同的错误OK,如前所述:保持数据库打开,在数据库打开的所有时间,您可以将准备好的语句存储起来以节

我正在使用NSTimer每秒调用下面的函数,并使用参数传递activityType和Activity自信的值。在一些成功的插入之后,我得到一个错误“无法打开数据库文件”


如果执行了如此多的读/写操作,请保持数据库处于打开状态,并在最后关闭它。也就是说,使用ViewControllert打开它一次,然后关闭它一次。准确地说,您得到的是
插入失败:无法打开数据库文件
?@trojanfoe,是的,我得到的是相同的错误OK,如前所述:保持数据库打开,在数据库打开的所有时间,您可以将准备好的语句存储起来以节省时间。但是,您必须使用绑定变量,而不是像当前那样格式化语句。但是,它会更快、更安全。根据上面的建议,我已经打开了我的数据库,现在程序运行了一段额外的时间。但在成功插入250次之后,我又犯了同样的错误。
-(void)tableInsertionFunction:(NSString *)activityType confidenceIs:(NSString *)activityConfidence 
{

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = dirPaths[0];
    databasePath =  [docsDir stringByAppendingPathComponent:@"mainSDK.db"];
    dbpath = [databasePath UTF8String];

    if (sqlite3_open(dbpath, & demoDB) == SQLITE_OK) {

        NSString *insertStatement = [NSString stringWithFormat: @"INSERT INTO activityTable ( activityType , activityConfidence) VALUES ('%@' , '%@' )",activityType, activityConfidence];

        sqlite3_stmt *statement;
        const char *insert_stmt = [insertStatement UTF8String];
        sqlite3_prepare_v2(demoDB, insert_stmt,-1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE) {
            NSLog(@"Insertion Successful");
        }
        else {
            NSLog(@"Insertion Failure: %s",sqlite3_errmsg(demoDB));
        }

        sqlite3_close(demoDB);
    }
}