Ошибка чтения и записи данных в базу данных sqlite с iphone devide - PullRequest
0 голосов
/ 13 января 2012

Я создал одно приложение, где я храню данные в базе данных и читаю их. Я создал файл .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);

/////// Логика для записи файлов в базу данных <<

1 Ответ

1 голос
/ 24 января 2012

Вы пытались создать базу данных во время выполнения. Выполните запрос во время выполнения и создайте таблицу, попробуйте это, это определенно вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...