gpt4 book ai didi

iphone - NSData返回Null问题

转载 作者:行者123 更新时间:2023-12-03 20:41:58 26 4
gpt4 key购买 nike

在我的应用程序中,我在数据库中存储了多个图像
我的数据库字段类型是 blob。

存储image数据效果很好,但是当我使用下面的代码从数据库获取imagedata

   NSData *photodata=[[NSData alloc] initWithBytes:sqlite3_column_blob(compiledStmt, 12) length:sqlite3_column_bytes(compiledStmt, 12)];

但是该字段包含空数据,它返回我 <3c3e> 来代替空值。
我使用下面的查询插入数据

   strQuery_DB = [NSString stringWithFormat:@"update tbl_project_review set answer ='%@',comment ='%@',photodata='%@' where prjid=%d",temp,escapedStr1,tempdata,prjid];

最佳答案

当您使用%@时说明符为 stringWithFormat:方法,它调用description各自参数的方法。对于 NSData对象,这将返回 < 包围的数据的十六进制表示形式和> 。对于空NSData对象它将返回字符串 <>这就是正在插入数据库的内容。这可能不是您想要做的,因为这也会不必要地使图像数据的大小加倍。

您应该使用参数化查询函数,例如sqlite_bind_blob 。这将使处理数据输入变得更容易。基本上,您需要将更新查询更改为如下所示(添加适当的错误检查等):

const char sql[] = "update tbl_project_review set answer = ?, comment = ?, photodata = ? where prjid = ?";
sqlite3_stmt *stmt = NULL;
sqlite3_prepare_v2(db, sql, sizeof sql, &stmt, NULL);

sqlite3_bind_text(stmt, 1, [tmp UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [escapedStr1 UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_blob(stmt, 3, [tempdata bytes], [tempdata length], SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 4, prjid);

sqlite3_step(stmt); // check for SQLITE_DONE

关于iphone - NSData返回Null问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13737376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com