0

我正在尝试保存图像并将其加载到 tableView 中,以便保存在我的 SQLite 文件中,我这样做:

-(void)InsertRecords:(NSData *)pic{
..... // Open my SQLite file
NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO myMovies (movieImage) VALUES (\"%@\")", pic];
...
const char *insert_stmt = [insertSQL UTF8String];
...
sqlite3_bind_blob(statement, 1, [pic bytes], [pic length], NULL);
...

哪张照片是 NSData,我得到了它的 NSLog。并给了我密码。同样为了加载我使用了这个代码:

int length = sqlite3_column_bytes(sqlStatement, 1);
MyMovie.image = [NSData dataWithBytes:sqlite3_column_blob(sqlStatement, 1) length:length];

和 NSLoged 来自它,它具有与 NSData 相似的结构,但具有不同的数据!它完全改变了!难道我做错了什么 ?

4

2 回答 2

1

sqlite3_bind_blob绑定到参数,但您的插入语句实际上没有参数。(您应该检查它的返回值是否有错误。)

您插入的语句所具有的是格式化为字符串的图片,它将中断任何非 ASCII 字节。

于 2012-10-26T18:21:24.810 回答
1
const char *insert_stmt = [@"INSERT INTO myMovies (movieImage) VALUES (?)" UTF8String];
...
sqlite3_bind_blob(statement, 1, [pic bytes], [pic length], SQLITE_TRANSIENT);
于 2012-10-26T20:01:21.020 回答