IPhone - attempt to copy sqlite database to document directory - copy empty version

I have a sqlite database called "ProductDatabase.sql" that I copied to the application project directory:

/Users/jacknutkins/Documents/TabbedDietApp/TabbedDietApp/ProductDatabase.sql

In the application application delegation class, I have this piece of code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //Set-up some globals m_DatabaseName = @"ProductDatabase.sql"; //Get the path to the documents directory and append the databaseName NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; m_DatabasePath = [documentsDirectory stringByAppendingPathComponent:@"ProductDatabase.sql"]; //Execute the "checkAndCreateDatabase" function [self checkAndCreateDatabase]; //Query the databse for all animal records and construct the "animals" array [self readProductsFromDatabase]; .... 

In this moment:

m_DatabasePath = '/ Users / jacknutkins / Library / Application Support / iPhone Simulator / 5.0 / Applications / 6D5BBE3A-BC9A-4C44-B089-FABA27CFFF4B / Library / ProductDatabase.sql'

Here is the code for the other 2 methods:

 - (void) checkAndCreateDatabase { NSError * error; //Check if the database has been saved to the users phone, if not then copy it over BOOL l_Success; //Create a file manager object, we will use this to check the status //of the databse and to copy it over if required NSFileManager *l_FileManager = [NSFileManager defaultManager]; //Check if the database has already been created in the users filesystem l_Success = [l_FileManager fileExistsAtPath:m_DatabasePath]; //If the database already exists then return without doing anything if(l_Success) return; //If not then proceed to copy the database from the application to the users filesystem //Get the path to the database in the application package NSString *l_DatabasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:m_DatabaseName]; //Copy the database from the package to the usrrs filesystem [l_FileManager copyItemAtPath:l_DatabasePathFromApp toPath:m_DatabasePath error:&error]; } 

If I execute some NSLogs:

l_DatabasePathFromApp = / Users / jacknutkins / Library / Application Support / iPhone Simulator / 5.0 / Applications / 6D5BBE3A-BC9A-4C44-B089-FABA27CFFF4B / TabbedDietApp.app / ProductDatabase.sql

and

error = Domain error = NSCocoaErrorDomain Code = 260 "Operation could not be completed. (Cocoa error 260.)" UserInfo = 0x6b6d060 {NSFilePath = / Users / jacknutkins / Library / Application Support / iPhone Simulator / 5.0 / Applications / 6D5BBE3A-BC9A- 4C44-B089-FABA27CFFF4B / TabbedDietApp.app / ProductDatabase.sql, NSUnderlyingError = 0x6b6cfa0 "The operation could not be completed. There is no such file or directory"}

I am not sure which file it cannot find here.

 - (void) readProductsFromDatabase { //Init the products array m_Products = [[NSMutableArray alloc] init]; NSLog(@"%@", m_DatabasePath); //Open the database from the users filessystem if(sqlite3_open([m_DatabasePath UTF8String], &database) == SQLITE_OK) { //Set-up the SQL statement and compile it for faster access const char *sqlStatement = "select * from products"; sqlite3_stmt *compiledStatement; if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { NSLog(@"Success.."); //Loop through the results and add them to the feeds array while(sqlite3_step(compiledStatement) == SQLITE_ROW) { //Read the data from the results row NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; NSString *aCategory = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; NSString *aCalories = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; NSString *aFat = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)]; NSString *aSaturates = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)]; NSString *aSugar = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)]; NSString *aFibre = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 7)]; NSString *aSalt = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 8)]; NSString *aImageURL = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 9)]; NSLog(@"Delegate"); NSString *aNote = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 10)]; NSUInteger myInt = sqlite3_column_int(compiledStatement, 11); NSString *aServes = [NSString stringWithFormat:@"%d", myInt]; //Create a new animal object with the data from the database Product *l_Product = [[Product alloc] initWithName:aName category:aCategory calories:aCalories fat:aFat saturates:aSaturates sugar:aSugar fibre:aFibre salt:aSalt imageURL:aImageURL note:aNote serves:aServes]; //Add the animal object to the animals array [m_Products addObject:l_Product]; } } //Release the compiled statement from memory sqlite3_finalize(compiledStatement); } sqlite3_close(database); } 
Database

declared in the .h file as follows:

 //Setup the database object sqlite3 *database; 

In the above method, the line:

 if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 

does not evaluate SQLITE_OK because the database that I am trying to copy to the document directory is empty.

I tried cleaning and assembling, deleting an empty copy of the database and restarting it, etc., but it always copies the empty database.

I searched this several times, and I tried everything I could find without success.

Any help would be greatly appreciated.

Jack

EDIT

If I execute 'select * from products' from a terminal window in the database in the project directory, I will return the expected results.

+4
source share
1 answer

I forgot to include the database file in the target membership by clicking the check box on the file inspector tab.

+10
source

Source: https://habr.com/ru/post/1402925/


All Articles