Трудность развертывания базы данных с моим приложением для iphone - PullRequest
1 голос
/ 23 апреля 2010

У меня есть приложение, которому нужна база данных.Приложение отлично работает в симуляторе.Но когда я пытаюсь развернуть его на iphone, то выдает ошибку, что «нет такого табличного животного».В чем проблема?Я предоставляю код для лучшего понимания

(void)viewDidLoad
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,    NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"AnimalDatabase.sql"];


sqlite3 *database;


if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) 
{

    const char *sqlStatement = "insert into animal (id, name) VALUES (?, ?)";
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 
    {
        //NSLog(filePath);
        sqlite3_bind_int(compiledStatement, 1, 12);
        //NSLog(@"A");
        sqlite3_bind_text( compiledStatement, 2, [@"abc" UTF8String], -1, SQLITE_TRANSIENT);        
        //NSLog(@"B");
        if(sqlite3_step(compiledStatement) != SQLITE_DONE )
        {
            //NSLog(@"C");
            NSLog( @"Error: %s", sqlite3_errmsg(database) );
        }
        else
        {
            //NSLog(@"D");
            NSLog( @"Insert into row id = %d", sqlite3_last_insert_rowid(database));
        }
    }
    else
    {
        NSAssert1(0, @"Error while creating insert statement. '%s'", sqlite3_errmsg(database));
    }

    sqlite3_finalize(compiledStatement);
}
else
{
    NSLog(@"Error Occured");
}
sqlite3_close(database);
[super viewDidLoad];

}

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Я думаю, вам нужно посмотреть, что передается на ваш iPhone. У меня были проблемы с этим, есть некоторые странные проблемы, связанные с тем, как база данных создается или не создается на реальном iPhone. Я думаю, что в вашем случае происходит то, что база данных не передается, а затем ваш звонок на

sqlite3_open

фактически создает базу данных, поэтому вы не получите сообщение об ошибке, пока не вызовете оператор выбора.

Проверьте документацию о том, где разместить базу данных в ваших ресурсах, чтобы убедиться, что она копируется на ваш iPhone при сборке.

1 голос
/ 23 апреля 2010

Наиболее вероятная причина в том, что файл AnimalDatabase.sql не существует, поэтому нет таблицы Animal для вставки.

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