SQLite数据库没有在iphone设备上加载

时间:2014-07-03 20:26:25

标签: iphone xcode sqlite ios-simulator

当我在模拟器上测试我的应用程序时,一切正常。但是当我在iPhone上测试应用程序时,它不会从db.sqlite3数据库加载。

我尝试了互联网的每一个解决方案。我清理了应用程序。我将数据库添加到构建短语 - 复制捆绑资源等。 你能帮助我吗?我的编码有没有失败?

-(void)openDataBase{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    dbPath = [documentsDirectory stringByAppendingString:@"db.sqlite3"];

    //load it
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *pathInRessource = [[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite3"];

    //exist it?
    if (![fileManager fileExistsAtPath:dbPath]) {
        [fileManager copyItemAtPath:pathInRessource toPath:dbPath error:nil];
    }

    //open database
    int result = sqlite3_open([dbPath UTF8String], &db);
    if (result != SQLITE_OK) {
        sqlite3_close(db);

        return;
    }

    //if ok
    NSLog(@"Data base opened");

}

2 个答案:

答案 0 :(得分:2)

在打开数据库时,您可以使用其他情况调用此方法来解决问题。

if (sqlite3_open([getDBPath UTF8String], &sqlhandle) == SQLITE_OK)
{
     NSLog(@"Database Open!");
}
else
{
    NSLog(@"Select err: %s",sqlite3_errmsg(sqlhandle));
}

您将能够使用此

获取正确的错误消息

答案 1 :(得分:1)

我喜欢你被卡住的地方,我正在做同样的事情并且对我来说很好。

BTW我已经更新了您的代码,我正在处理的问题,如果发现并遇到麻烦,请检查一下。

//My DB variable
static sqlite3 *database;

-(void)openDataBase{
if (database == NULL) 

    sqlite3 *mDatabse;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    dbPath = [documentsDirectory stringByAppendingString:@"db.sqlite3"];

    //load it
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *pathInRessource = [[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite3"];

    //exist it?
    if (![fileManager fileExistsAtPath:dbPath]) {
        [fileManager copyItemAtPath:pathInRessource toPath:dbPath error:nil];
    }

    if (sqlite3_open([path UTF8String], &mDatabse) == SQLITE_OK) {   
            NSLog(@"Database Successfully Opened");
            database = mDatabse;


        } else {
            NSLog(@"Error in opening database");
            mDatabse = NULL;
        }

}