Проблема с получением данных из sqlite - PullRequest
1 голос
/ 27 июня 2011

Привет, я работаю с sqlite, и я успешно добавил данные в базу данных, но проблема в том, что когда я удаляю некоторые данные в каком-то другом табличном представлении и возвращаюсь к своему основному виду, я нажимаю UIBarButton, чтобы вызватьфункция, которая снова проверяет данные в базе данных.

Теперь моя проблема заключается в том, что данные, которые недавно отображаются в таблице, были те, которые были удалены, поэтому я попытался напечатать свой изменяемый массив и в журнале явижу, что их нет таких данных, но и в ячейке табличного представления я вижу эти данные.ниже приведен мой код для чтения данных в БД

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
   NSString *databasePath =  [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"];

    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        // Setup the SQL Statement and compile it for faster access
        const char *sqlStatement = "SELECT potsName FROM potsDetail;";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {


                NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)];
                NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname];
                [potsArray addObject:pname];
                 NSLog(@"The data in the array is %@",potsArray);

            }
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);

Также вот код, который я вызываю на кнопку обновления

-(IBAction)RefreshButtonTouched
{
    [potsArray removeAllObjects];
    [self Read_Potname_FromDB];
    [potsTableView reloadData];
}

Запрос на удаление, который я пишу,я думаю, что я делаю некоторую ошибку с удалением здесь

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    NSString *databasePath =  [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"];

    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        // Setup the SQL Statement and compile it for faster access
        NSString *deleteStatement = [NSString stringWithFormat:@"delete from potsDetail where potsName = '%@'",sptr];
        const char *sqlStatement = [deleteStatement cStringUsingEncoding:NSASCIIStringEncoding];
        sqlite3_stmt *compiledStatement;

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

                NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)];
                NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname];
                [potsArray addObject:pname];
                //[pname release];
            }
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);

Пожалуйста, помогите мне, я довольно запутался с этим.Заранее спасибо

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Вы никогда не удаляли данные в базе данных sqlite.[potsArray removeAllObjects] просто удалит версию в памяти, а не ту, которая хранится на диске.Вам нужно будет добавить метод базы данных с запросом DELETE FROM, чтобы фактически повлиять на базу данных sqlite.

1 голос
/ 27 июня 2011

Здесь возможны два случая:

1) Данные на самом деле не удаляются, потому что вы, возможно, не вызвали "sqlite3_finalize (compiledStatement);"оператор, который отвечает за фиксацию любой транзакции.

2) UITableView не перезагружается, вы пытались использовать "[tableView reloadData];"по клику UIBarbuttonItem?

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