Невозможно вставить строку в таблицу в SQLite - PullRequest
1 голос
/ 27 июня 2011

У меня есть два класса A и B, использующих базу данных SQLite. Класс A использует TableA, а classB использует tableB. Я могу вставить данные в класс A, но не в класс B. Однако в классе B запрос на выборку работает правильно. Я использовал ту же функцию вставки, что и в классе A. Я несколько раз просматривал свой код, но не смог чтобы понять это.

Код, куда я вставляю данные в базу данных. [app.sk insertDictionary: dictFrndDetail forTable: @ "tblAllProfiles"];

Функция, которую я использую для вставки:

- (void)insertDictionary:(NSDictionary *)dbData forTable:(NSString *)table {

    NSMutableString *sql = [NSMutableString stringWithCapacity:16];
    [sql appendFormat:@"INSERT INTO %@ (",table];

    NSArray *dataKeys = [dbData allKeys];
    for (int i = 0 ; i < [dataKeys count] ; i++) {
        [sql appendFormat:@"%@",[dataKeys objectAtIndex:i]];
        if (i + 1 < [dbData count]) {
            [sql appendFormat:@", "];
        }
    }

    [sql appendFormat:@") VALUES("];
    for (int i = 0 ; i < [dataKeys count] ; i++) {
        if ([[dbData objectForKey:[dataKeys objectAtIndex:i]] intValue]) {
            [sql appendFormat:@"%@",[dbData objectForKey:[dataKeys objectAtIndex:i]]];
        } else {
            [sql appendFormat:@"'%@'",[dbData objectForKey:[dataKeys objectAtIndex:i]]];
        }
        if (i + 1 < [dbData count]) {
            [sql appendFormat:@", "];
        }
    }

    [sql appendFormat:@")"];
    [self runDynamicSQL:sql forTable:table];
}

Код для запуска DynamicSQL:

- (BOOL)runDynamicSQL:(NSString *)sql forTable:(NSString *)table {

    int result;
    NSAssert1(self.dynamic == 1,[NSString stringWithString:@"Tried to use a dynamic function on a static database"],NULL);
    sqlite3_stmt *statement;
    if (statement = [self prepare:sql]) {
        result = sqlite3_step(statement);
    }       
    sqlite3_finalize(statement);
    if (result) {
        if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(databaseTableWasUpdated:)]) {
            [delegate databaseTableWasUpdated:table];
        }   
        return YES;
    } else {
        return NO;
    }

}

Но этот же код работает в одном классе, но не в этом классе. Как выяснить ошибку?

1 Ответ

2 голосов
/ 27 июня 2011

Использование FMDB для целей SQLITE, проще в управлении и реализации, чем sqlite. Ищите в Google учебники по FMDB, вы найдете это намного проще, чем ваша текущая реализация.

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