开发者社区> 问答> 正文

打开SQlite数据库的时候报错 ?报错

用嵌入SQLite数据库开发ios应用,我把数据库放到SQlite管理员,然后拖到Xcode工程中。但是当我打开DB的时候,报错 out of memory ,不知道是不是SQlite的bug,因为我的文件很小,应该不会报出内存问题。

初始化数据库的代码:

- (id)initWithPath:(NSString *)path {
if (self = [super init]) {
    BOOL success;
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"SoundLib_DB.sqlite"];

    if ([fileManager fileExistsAtPath:dbPath] == NO) {
        NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"SoundLib_DB" ofType:@"sqlite"];
        [fileManager copyItemAtPath:resourcePath toPath:dbPath error:&error];
    }

    success = [fileManager fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.", dbPath);
    }
    sqlite3 *dbConnection;
//Here is when I get the error, at trying to open the DB
    if (sqlite3_open_v2("SoundLib", &dbConnection, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {
        NSLog(@"[SQLITE] Unable to open database!");
        NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(database), sqlite3_errcode(database));
        return nil;
    }
    database = dbConnection;
}
return self;
}

展开
收起
爱吃鱼的程序员 2020-06-23 14:47:27 646 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    报错可能是由于数据库路径传递为UTF8String,我看见你传递"SoundLib",不能这样直接传递。

    if(sqlite3_open([dbPathUTF8String],&databaseHandle)==SQLITE_OK){//dbPathisyourfulldatabasepathyougettingabove}

    P.S.dbpath作为constchar

    constchar*dbpath

    应该是你忘了UTF8String

    sqlite3*database;intresult=sqlite3_open([dbPathUTF8String],&database);if(result!=SQLITE_OK){sqlite3_close(database);NSLog(@"Erroropeningdatabse");return;}
    2020-06-23 14:47:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
国产数据库研制人才培养实践 立即下载
阿里云&信通院《Serverless数据库技术研究报告》 立即下载
微信SQLite数据库损坏恢复实践 立即下载