我正在使用故事板构建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");
}
}
}
答案 0 :(得分:1)
您应该记录sqlite3_open_v2
返回的返回码,以确定错误原因。
如果在致电createTable
之前未能拨打insert
,则可能会遇到错误。通常您会检查文件是否存在,如果找不到,请调用createTable
。您似乎无法在任何地方拨打createTable
。