iPad SQLite3 не может выполнить запрос INSERT - PullRequest
1 голос
/ 29 декабря 2011

В настоящее время я пытаюсь просто вставить новую строку в базу данных SQLite3 на своем iPad.Я делал это несколько раз раньше в других приложениях и просто скопировал код.Скопированные SELECT запросы работают нормально, но если я пытаюсь INSERT, он терпит неудачу при == SQLITE_DONE

Вот как я пытаюсь вставить в базу данных:

NSString *databaseName = @"Waypoints.sql";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
    NSString *statement = [NSString stringWithFormat:
                           @"INSERT INTO Waypoints (id, name, alt, ias, temp, tas, wd, ws, gs, mt, mh, dist, time, fuel, fuelrate) VALUES (%d,'New...','','','','','','','','','','','','','');", [self numberOfWaypoints]];
    NSLog(@"Statement: %@", statement);
    const char *sqlStatement = [statement cStringUsingEncoding:NSASCIIStringEncoding];
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        if(sqlite3_step(compiledStatement) == SQLITE_DONE)
            NSLog(@"DATABASE: Adding: Success");
        else
            NSLog(@"DATABASE: Adding: Failed");
    }
    else
        NSLog(@"Error. Could not add Waypoint.");
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

Если я запускаю этот код нажатием кнопки, он выводит DATABASE: Adding: Failed в консоли.

Оператор NSLogged выглядит следующим образом:

INSERT INTO Waypoints (id, name, alt, ias, temp, tas, wd, ws, gs, mt, mh, dist, время, топливо, горючее) ЗНАЧЕНИЯ (2, 'New ...', '', '', '', '','', '', '', '', '', '', '', '', '');

Что прекрасно работает, если я вставлю его в терминал (подключенв тот же файл базы данных).

Это подводит меня к выводу: что может быть причиной этой проблемы?
Я подумал о, возможно, правах записи в файл.Может быть, но он не в комплекте, но уже скопирован в папку документов на устройстве.

Пожалуйста, помогите, как я могу заставить это работать?

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Попробуйте использовать NSUTF8StringEncoding для cStringUsingEncoding или печати

NSLog(@"%@", [NSString stringWithUTF8String:(char*)sqlite3_errmsg(database)]);

Рад, что вы можете найти ошибку с этим.

0 голосов
/ 30 декабря 2011

Следуя подсказке @IgnacioInglese, распечатав ошибку с NSLog(@"%@", [NSString stringWithUTF8String:(char*)sqlite3_errmsg(database)]);, я обнаружил, что база данных заблокирована.

Я обнаружил, что сделал ошибку новобранца, вернув значение в методе перед закрытием базы данных. Исправление, которое решило мою проблему.

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