2013-10-24 42 views
2

我遇到了將blob插入sqlite數據庫的問題。我在ios上工作,所以它是objective-c。在sqlite數據庫中插入blob(objective-c)

計劃:

我我按下一個按鈕,照片選擇器打開,我選擇一張照片,即時接觸到另一個按鈕,照片保存在數據庫作爲一個blob。

一切工作正常只有插入不了。即時通訊allready int和字符串插入數據庫,它工作正常,但blob讓我發瘋。

守則即時通訊使用:

我得到了一類在那裏我得到了所有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]; 

所以我在想什麼?我從我的更新語句中得到插入allready失敗的錯誤。但我真的不知道我必須改變。

在此先感謝您的幫助!

+0

你應該像這樣改變updateStmt。 ** updateStmt = [NSString stringWithFormat:@「UPDATE Face SET image =?」]; ** –

+0

將圖像插入到SQL中效率不高,應該避免使用。使用本地存儲來存儲圖像,並使用'SQL'來存儲對該路徑/圖像名稱的引用 –

回答

1

我解決了它的圖像轉換爲字符串和插入的字符串。

在我的分貝級的我寫了這個方法:

-(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!"); 
} 

希望幫助別人。

0

您使用的base64在DB

下載base64

檢查後,該link