Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在sqlite数据库中插入blob(objective-c)_Ios_Objective C_Database_Sqlite - Fatal编程技术网

Ios 在sqlite数据库中插入blob(objective-c)

Ios 在sqlite数据库中插入blob(objective-c),ios,objective-c,database,sqlite,Ios,Objective C,Database,Sqlite,我在将blob插入sqlite数据库时遇到问题。我在ios上工作,所以是objective-c 该计划: 我按下一个按钮,一个照片选择器打开,我选择一张照片,我触摸另一个按钮,照片作为一个斑点保存在数据库中 一切都很好,只是插不进去。我已经准备好在数据库中插入int和字符串,效果很好,但是blob让我发疯 我使用的代码是: 我有一个类,里面有所有的db方法。它叫db。我得到了一个类,我使用db对象 DB类: -(void)insertblob:(NSData *)blob stmt:(NSStr

我在将blob插入sqlite数据库时遇到问题。我在ios上工作,所以是objective-c

该计划:

我按下一个按钮,一个照片选择器打开,我选择一张照片,我触摸另一个按钮,照片作为一个斑点保存在数据库中

一切都很好,只是插不进去。我已经准备好在数据库中插入int和字符串,效果很好,但是blob让我发疯

我使用的代码是:

我有一个类,里面有所有的db方法。它叫db。我得到了一个类,我使用db对象

DB类:

-(void)insertblob:(NSData *)blob stmt:(NSString *)blobStmnt {

const char *sql = [blobStmnt UTF8String];

sqlite3_prepare_v2(database, sql, 1, &statement, NULL);

if (SQLITE_DONE != sqlite3_step(statement)) {
     NSLog(@"Error while inserting data. '%s'", sqlite3_errmsg(database));
}
sqlite3_bind_blob(statement, 1, [blob bytes], [blob length], SQLITE_TRANSIENT);

}
使用类:

[database openDB:@"Content"]
updateStmt = [NSString stringWithFormat:@"UPDATE Face SET image =%@", image];
[database insertblob:imageData stmt:updateStmt];
[database closeDB];
那么我错过了什么?我从update语句中得到一个错误,即在“U”处插入allready失败。但我真的不知道我要改变什么


提前感谢您的帮助

您可以使用base64将图像转换为字符串,并在db中插入字符串

下载类

检查完这个后,我解决了它

在我的db类中,我编写了以下方法:

-(void)insertblob:(NSData *)blob stmt:(NSString *)blobStmnt {

const char *sql = [blobStmnt UTF8String];
sqlite3_prepare_v2(database, sql, -1, &statement, NULL);

int returnValue = sqlite3_bind_blob(statement, 1, [blob bytes], [blob length], SQLITE_TRANSIENT);
sqlite3_step(statement);
sqlite3_finalize(statement);

if (returnValue != SQLITE_OK) {
    NSLog(@"NOT OK");
}
NSLog(@"Saved!");
}

希望这能帮助别人

您应该像这样更改updateStmt。updateStmt=[NSString stringWithFormat:@“更新面集图像=?”];在
SQL
中插入图像是无效的,应避免使用可证明的方法。使用本地存储存储映像,并使用
SQL
存储对该路径/映像名称的引用