Я создал одно приложение, где я храню данные в базе данных и читаю их. Я создал файл .sql и добавил его в папку ресурсов. Я могу сохранять и извлекать данные через симулятор, мое приложение работает нормально над симулятором, но , когда я устанавливаю то же самое приложение на устройство, я получаю сообщение об ошибке «Нет такой таблицы» .
Может кто-нибудь предложить решение этой проблемы.
Вот блок кода, который я использую:
/////// Inside AppDelegate.m >> Старт >>>
///// для проверки наличия или отсутствия базы данных >>>>
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TempDatabase.sql"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success) {
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TempDatabase.sql"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
} else {
NSLog(@"Database file found at path %@", dbPath);
}
/////// Inside AppDelegate.m
/////// Логика записи файлов в базу данных >>> начало >>
sqlite3 *pDb;
char *databaseName;
databaseName = @"TempDatabase.sql";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
//databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
databasePath =[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TempDatabase.sql"];
//[self copyDatabaseIfNeeded];
if(sqlite3_open([databasePath UTF8String], &pDb) == SQLITE_OK)
{
const char *sqlStatement = "INSERT INTO tablename (name) VALUES(?)";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(pDb, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
{
sqlite3_bind_text( compiledStatement, 1, [strTxtFldValue UTF8String], -1, SQLITE_TRANSIENT);
}
if(sqlite3_step(compiledStatement) != SQLITE_DONE )
{
NSLog( @"~~~~~~~~~~~ 1 Error: %s", sqlite3_errmsg(pDb) );
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Name name is not added." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirmation" message:@"name is added successfully." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(pDb);
/////// Логика для записи файлов в базу данных <<