将图像保存到SQLite

时间:2012-03-16 11:24:37

标签: iphone sqlite uiimage

以下代码我写的是在DB中存储图像。

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO slamDetailsTable (name, gender, phone,email,movie,abt,dob,smiley1,smily2,smily3,image) VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",?)", contact.name, contact.gender, contact.phone,contact.email,contact.movies,contact.abtMe,contact.dob,contact.smiley1,contact.smiley2,contact.smiley3];
        NSLog(@"query %@",insertSQL);
        const char *insert_stmt = [insertSQL UTF8String];

        sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);
        sqlite3_bind_blob(statement, 1, [contact.imageData bytes], [contact.imageData length], NULL);
        if (sqlite3_step(statement) == SQLITE_DONE)
        {
            NSLog(@"Row added");
        } 

        else {
            NSLog(@"Failed to add row");
        }

我正在添加以获取图片。

NSData *imageDataFromDb = [[NSData alloc]initWithBytes:sqlite3_column_blob(statement, 11) length:sqlite3_column_int(statement, 11)];

但是。 imageDataFromDb显示0个字节。

2 个答案:

答案 0 :(得分:2)

您不应使用sqlite3_column_int()来获取blob的长度。正确使用的电话是sqlite3_column_bytes()

  

如果结果是BLOB或UTF-8字符串那么   sqlite3_column_bytes()例程返回其中的字节数   BLOB或字符串。

答案 1 :(得分:0)

虽然您已经要求做一些相当具体的事情,但我总是发现将图像存储在设备上并将该图像的名称或位置存储在数据库中是一种更有效的方法。将大图像存储在SQLite数据库中可能非常耗时。