Может загрузить изображение в SQLite, но может извлечь его снова - PullRequest
1 голос
/ 06 февраля 2012

У меня есть приложение, в котором я могу выбрать фотографию из библиотеки и установить ее в UIImageviev в моем приложении.Затем я также сохраняю его в таблицу SQLite, но не могу извлечь его снова с помощью поиска по имени.Я знаю, что метод сохранения успешен, так как я управляю им из приложения терминала вручную.Что не так с моим методом извлечения ???

//Save the photo which is currently in an UIImage Variable into the SQLITE photos as BLOB
-(IBAction)SaveImage{
        sqlite3_stmt *save_statement;
        const char *dbpath = [databasePath UTF8String];
        NSString *insertSQL = [NSString stringWithFormat: @"insert into photos (name, photo) values(?, ?)"];
        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_open(dbpath, &photosDB);
        sqlite3_prepare(photosDB, insert_stmt, -1, &save_statement, NULL);
        sqlite3_bind_text(save_statement, 1, [text.text UTF8String], -1, SQLITE_TRANSIENT);
        NSData *binData = UIImagePNGRepresentation(image.image);
        if (sqlite3_bind_blob(save_statement, 2, [binData bytes], [binData length], SQLITE_TRANSIENT)==SQLITE_OK) {
        status.text = @"Gonderi Kaydedildi";}else{status.text = @"Tanimlanamayan bir sorun var";}
        sqlite3_step(save_statement);
        sqlite3_finalize(save_statement);
        sqlite3_close(photosDB);}

Ниже у меня есть некоторые проблемы ...

//Get the photo from database construct it and set it into the UIImageView variable in our application
-(IBAction)ImageFromDatabase{

        sqlite3_stmt *call_statement;
        const char *dbpath = [databasePath UTF8String];
        NSString *findSQL = [NSString stringWithFormat: @"SELECT name, photo FROM photos WHERE name=\"%@\"", [text text]];
        const char *sql = [findSQL UTF8String];
        sqlite3_open(dbpath, &photosDB);
        sqlite3_prepare(photosDB, sql, -1, &call_statement, NULL);
        if (sqlite3_step(call_statement) == SQLITE_ROW) {
            NSString *imageName = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(call_statement, 0)];
            status.text = imageName;

            const char *rawData = sqlite3_column_blob(call_statement, 2);
            int rawDataLength = sqlite3_column_bytes(call_statement, 2);
            NSData *data = [NSData dataWithBytes:rawData length:rawDataLength];
            UIImage *image1 = [[UIImage alloc]initWithData:data];
            image.image = image1;}

        sqlite3_step(call_statement);
        sqlite3_finalize(call_statement);
        sqlite3_close(photosDB);
}

Я чувствую, что проблема ниже esspecilly, но??!

    const char *rawData = sqlite3_column_blob(call_statement, 2);
    int rawDataLength = sqlite3_column_bytes(call_statement, 2);
    NSData *data = [NSData dataWithBytes:rawData length:rawDataLength];
    UIImage *image1 = [[UIImage alloc]initWithData:data];
    image.image = image1;

Вы это видели ???

1 Ответ

0 голосов
/ 06 февраля 2012

Вы извлекаете фотографию из столбца 2. Чтобы процитировать справочную страницу SQLite ;

Крайний левый столбец набора результатов имеет индекс 0

Вы выбираете только 2 столбца, пронумерованных от 0 до 1, поэтому чтение из столбца № 2 завершится неудачей.

В sqlite3_bind_blob индекс начинается с 1, поэтому ваша вставка завершается успешно.

...