I am using sqlite3 in my project.
- I am getting error after couple(50-60) of transaction that "unable to open database file",So check my database file path but path is correct and file is there.
I tried each and every solution discussed on stack overflow, but with no
luck.I check my "DocumentDirectory" path, done all necessary step before to close database. Like:
sqlite3_finalize(selectStatement);
sqlite3_close(database);
I don't know how to tackle this problem.can I check that my sqlite3 database is open or not.
====================== 1============================
+(NSMutableArray*)executeDataSet:(NSString*)query { NSMutableArray *arryResult = [[NSMutableArray alloc] initWithCapacity:0]; const char *sql = [query UTF8String]; sqlite3_stmt *selectStatement; sqlite3 *database = [DataBaseClass openDataBase]; //prepare the select statement int returnValue = sqlite3_prepare_v2(database, sql, -1, &selectStatement, NULL); if(returnValue == SQLITE_OK) { //my code } } //sqlite3_reset(selectStatement); // NILOBJECT(selectStatement); // NILOBJECT(selectStatement); sqlite3_finalize(selectStatement); sqlite3_close(database); return arryResult; }==================== 2 =================================
+(sqlite3 *) openDataBase { sqlite3 * edenAdultDatabase; NSString * databasePath =[DataBaseClass pathForDatabase]; if(sqlite3_open([databasePath UTF8String], &edenAdultDatabase) == SQLITE_OK) { NSLog(@"Yes database is open"); return edenAdultDatabase; } else { NSLog(@"do something %s",sqlite3_errmsg(edenAdultDatabase)); } return edenAdultDatabase; }====================== 3 ===========================
+(NSString *) pathForDatabase { NSString *libraryDir = [FileManager pathForPrivateDocumentsFolder]; NSFileManager *fileMgr = [NSFileManager defaultManager]; NSError *error; NSString *privateFolderPath = [libraryDir stringByAppendingPathComponent:@"DataBase"]; if (![fileMgr fileExistsAtPath:privateFolderPath]) { [fileMgr createDirectoryAtPath:privateFolderPath withIntermediateDirectories:NO attributes:nil error:&error]; } /* // My database in library private folder ..this is just for test. // I copied databae to document dir but no luck. NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [documentPaths objectAtIndex:0]; privateFolderPath = [documentsDir stringByAppendingPathComponent:kDatabaseName]; */ privateFolderPath = [privateFolderPath stringByAppendingPathComponent:kDatabaseName]; return privateFolderPath; }