我正在尝试保存图像并将其加载到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的结构但具有不同的数据!它完全改变了!难道我做错了什么 ?
答案 0 :(得分:1)
sqlite3_bind_blob
绑定到参数,但您的insert语句实际上没有参数。 (您应该检查其返回值是否有错误。)
您插入语句的内容是格式化为字符串的图片,对于任何非ASCII字节都会中断。
答案 1 :(得分:1)
const char *insert_stmt = [@"INSERT INTO myMovies (movieImage) VALUES (?)" UTF8String];
...
sqlite3_bind_blob(statement, 1, [pic bytes], [pic length], SQLITE_TRANSIENT);