2 daffodilgirl DaffodilGirl 于 2013.01.24 10:46 提问

打开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;
}

2个回答

g989_1314125
g989_1314125   2013.01.24 13:13
已采纳

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

 if (sqlite3_open([dbPath UTF8String], &databaseHandle) == SQLITE_OK)
{
   //dbPath is your full database path you getting above
}

P.S.dbpath作为const char

const char *dbpath
xinyoulingxi1_tong
xinyoulingxi1_tong   2013.01.24 13:38

应该是你忘了 UTF8String

sqlite3 *database;
int result = sqlite3_open([dbPath UTF8String], &database);
if (result != SQLITE_OK) {
    sqlite3_close(database);
    NSLog(@"Error opening databse");
    return;
}
DaffodilGirl
DaffodilGirl 你的答案也正确,不过另外先回答的,谢谢
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
打开sqlite数据库失败
今天准备打开sqlite数据库的时候出现了这个错误 之前一直都是好好的,就今天用模拟器一打开app就出现这个问题,这是怎么回事?
sqlite3_open打开数据库失败 返回值14问题
原因:sqlite3_open第一个参数路径中有中文字符,而它只支持UTF-8编码,所以使数据库打开失败 解决:我在网上找的转码,先把路径转码。 CString MbcsToUtf8(const char *file) {     CString str;     WCHAR   *pwchar=0;     CHAR    *pchar=0;     int len=0;
【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式
SQLite创建和打开数据库的三种方式 我们发现,在Android中使用SQLite数据库的时候,创建和打开数据库的时候不止继承SQLiteOpenHelper 这一种方式。目前我至少发现了三种方式: 1.自定义一个类继承SQLiteOpenHelper; 2.使用Context.openOrCreateDatabase(); 3.SQLiteDatab
解决SQLite Expert Professional 打开加密数据库报错
当打开加密数据库时,应该弹出对话框输入密码才对,结果报错如下:解决办法:1.下载SQLite.Interop.dll下载地址:http://www.ddooo.com/softdown/100051.htm#dltab2.将SQLite.Interop.dll拷贝到SQLite Expert安装路径。(如:D:\ForJob\SQLite Expert Professional 5)3.重启电脑4...
winform调用sqlite,打包发布后,在客户机上安装运行却报错:找不到System.Data.SQLite.DLL
winform调用sqlite,打包发布后,在客户机上运行却报错:找不到System.Data.SQLite.DLL   解决方案:移除之前错误的DLL,使用正确的DLL(799KB)   http://good.gd/1936755.htm   为这个问题,我郁闷了很久!
Android内置数据库sqlite执行insert,单引号报错问题的解决
Android内置数据库sqlite执行insert,单引号报错问题的解决 转载请注明出处,谢谢~http://www.cnblogs.com/iOcean/archive/2012/03/02/2377648.html   1.问题描述     1 2 3 SQLiteDatabase mDB = this.getWri
android插入SQLite中文乱码问题
问题描述:Android开发中经常会遇到从txt、csv等文件中将数据加载到SQLite数据库中,而时常这些文件中都包含中文字符,如果不对编码作明确制定,则会采用默认的编码方式,此时便可能导致插入到数据库中包含中文的字段变成乱码,影响后续操作。解决方法:需要在读取文件时指定编码,如果包含中文,则需要指定为GB2312编码方式,如下所示:try { BufferedReader br = new B
使用命令行工具打开SQLite数据库&更改命令行窗口编码
[1]用sqlite3工具打开数据库 1.1进入到数据库目录 1.2用# sqlite3 数据库名 打开数据库 1.3执行sql语句查询 [2]使用chcp语句更改doc的编码方式 chcp936改变成gdk编码 chacp 65001改变成UTF-8
sqlite打开路径含中文的数据库文件失败的问题
打开数据库文件使用:sqlite3_open16即可
打开SQlite数据库
打开数据库: 在执行SQL数据库之前,首先要连接数据库(也可以称为打开数据库,因为SQlite数据库包含在单个操作系统文件中,一个文件对应一个数据库)。 可以使用sqlite3_open(),sqlite3_open_v2(),sqlite3Z_open16()函数打开数据库,这些函数的声明如下: int sqlite3_open( const char *filename,//数据库