sqlite3_prepare_v2 получает SQLITE_ERROR - PullRequest
       4

sqlite3_prepare_v2 получает SQLITE_ERROR

2 голосов
/ 28 февраля 2011

Я занимаюсь этим часами и ДОЛЖЕН заставить это работать!Он задерживает релиз приложения для iPhone ... Мой первый раз с использованием SQLite.Я следовал всем советам, и все же мой вызов sqlite3_prepare_v2 каждый раз получает SQLITE_ERROR (1)!

Вот мой код от моего контроллера:

        NSString *query = @"SELECT * FROM QandA ORDER BY random() LIMIT 1";
//  const char *sqlStatement = "SELECT * FROM QandA ORDER BY random() LIMIT 1";
    sqlite3_stmt *compiledStatement;

    // sqlite3_stmt *statement;
    int prepareStatus = sqlite3_prepare_v2(database, [query UTF8String],
                                           -1, &compiledStatement, NULL);
    if (prepareStatus == SQLITE_OK) {...

Вы заметите, что я 'мы пытались использовать "char *" также безрезультатно (среди других попыток).Моя база данных открывается нормально с:

    databaseName = @"Facts.sqlite";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
NSLog(@"databasePath = %@", databasePath);

int dbOpenStatus = sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL);

Из моего интерфейса контроллера:

    NSString *databaseName;
NSString *databasePath;

Я проверил в отладчике, и все выглядит хорошо, но оператором подготовки не удается.Я не знаю, как записать заявление, которое он пытается скомпилировать ... Я предполагаю / надеюсь, что это именно то, что говорит мой SELECT.

Может кто-нибудь помочь?Я в отчаянии.Mark

Ответы [ 3 ]

6 голосов
/ 28 февраля 2011

Нашел ответ здесь .Мне пришлось использовать это вместо пути к файлу БД:

[[NSBundle mainBundle]pathForResource:@"Facts"extension:@"sqlite"];

Это дало немного другой путь (один дополнительный каталог) - как только я использовал это, он работал!Надеюсь, это поможет кому-то еще ... Я потратил много часов на это.

1 голос
/ 19 июля 2011

Обратите внимание, что вышеприведенное немного неточно, следует использовать ofType, а не расширение, а ofType, очевидно, должно соответствовать расширению вашего файла.

Если ваша БД называется «mysqldatabase.sql», измените URL своего пути на:

databasePath = [[NSBundle mainBundle]pathForResource:@"mysqldatabase" ofType:@"sql"];
0 голосов
/ 28 февраля 2011

Код кажется нормальным, может быть, это глупый вопрос, но вы создали таблицу QandA внутри базы данных?

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