在Sqlite ios中获取错误无法打开数据库连接?

时间:2014-12-21 12:16:44

标签: ios objective-c sqlite

我正在使用故事板构建iOS应用程序。我已在我的应用程序中集成了sqlite数据库。 我无法将数据插入表中,我收到此错误: 无法打开数据库连接

我已经使用相同的代码创建了两个更好的表,但是这个运动是我的第三个表,我收到了这个错误。

这是我的代码

//SQLlite database code used to get file path
-(NSString *) getSportsFilePath {
    NSString * docsPath= NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask,  YES)[0];
    return [docsPath stringByAppendingPathComponent:@"sportsdb.db"];
}

-(int) createTable:(NSString*) filePath {
    sqlite3* db = NULL;
    int rc=0;
    rc = sqlite3_open_v2([filePath cStringUsingEncoding:NSUTF8StringEncoding], &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (SQLITE_OK != rc) {
        sqlite3_close(db);
    }
    else {
        char * query ="CREATE TABLE IF NOT EXISTS sportsselection (id INTEGER PRIMARY KEY AUTOINCREMENT, sportslist  TEXT)";
        char * errMsg;
        rc = sqlite3_exec(db, query,NULL,NULL,&errMsg);
        if (SQLITE_OK != rc) {
            NSLog(@"Failed to create table rc:%d, msg=%s",rc,errMsg);
        }
        sqlite3_close(db);
    }
    return rc;
}

//SQLlite database code is used to insert data into the table
-(int) insert:(NSString *)filePath withName:(NSString *)sportslist {
    sqlite3* db = NULL;
    int rc=0;
    rc = sqlite3_open_v2([filePath cStringUsingEncoding:NSUTF8StringEncoding], &db, SQLITE_OPEN_READWRITE , NULL);
    if (SQLITE_OK != rc) {
        sqlite3_close(db);
        NSLog(@"Failed to open db connection");
    }
    else {
        NSString * query  = [NSString stringWithFormat:@"INSERT INTO sportsselection (sportslist) VALUES (\"%@\")",sportslist];
        char * errMsg;
        rc = sqlite3_exec(db, [query UTF8String] ,NULL,NULL,&errMsg);
        if (SQLITE_OK != rc) {
            NSLog(@"Failed to insert record  rc:%d, msg=%s",rc,errMsg);
        }
        sqlite3_close(db);
    }
    return rc;
}

- (void)viewDidLoad {
    if ( _sports) {
        for (int j=0;j< _sports.count;j++) {
            int rc= [self insert:[self getSportsFilePath] withName: _sports[j]];
            if (rc != SQLITE_OK) {
                NSLog(@"Failed to insert record");
            }
            else
                NSLog(@"Record is added");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您应该记录sqlite3_open_v2返回的返回码,以确定错误原因。

如果在致电createTable之前未能拨打insert,则可能会遇到错误。通常您会检查文件是否存在,如果找不到,请调用createTable。您似乎无法在任何地方拨打createTable