2010-04-30 172 views
4

我試圖從一個SQLite數據庫(Safari緩存:Cache.db)保存blob數據到一個文件,但由於某種原因,sqlite不會讀取整個blob。我最終想用ruby做到這一點,但現在直接在sqlite命令提示符下工作的東西沒問題。另外,我已經閱讀了所有在stackoverflow中討論這個的條目,但是其中大多數只討論了將圖像保存在blob中的性能,並且顯示將blob保存到文件的條目在C#中沒有幫助我。這裏是我試過的:將Blob數據從SQLite數據庫保存到文件

sqlite> select * from cfurl_cache_response limit 1; 3501 | 0 | 945281827 | 0 | http://www.gospelz.com/components/com_jomcomment/smilies/guest.gif|2010-02-24 16:20:07

sqlite> select cfurl_cache_blob_data receiver_data where entry_ID = 3501;
的GIF89a(

原始(guest.gif)文件的hexdump都表明源碼停止第一空值之後讀取斑點:

$ hexdump都-C guest.gif 47 49 46 38 39 61 28 00 28 00 F7 00 00 F1 F5 FD |的GIF89a((....... |。

源碼> .OUTPUT test.gif
源碼>選擇receiver_data從cfurl_cache_blob_data其中entry_ID = 3501;
$ hexdump -C test.gif
00000000 47 49 46 38 39 61 28 0a | GIF89a(。

回答

7

sqlite3的是閱讀整個BLOB,但SQLite的shell程序僅僅是顯示到NUL。

爲了測試這一點,你可以嘗試:

select hex(receiver_data) from cfurl_cache_blob_data where entry_ID = 3501; 
+0

是的,這工作:) 我本來想用紅寶石保存垢文件,但我最終用java:http://stackoverflow.com/questions/2150265/retrieve-an-image-stored-as-blob-on-a-mysql-db 謝謝 – Felipe 2010-05-03 14:59:56

1

生成從BLOB或原始的二進制文件是非常簡單的在Ruby中。你可以像寫入文件一樣進行。例如,要創建一個JPEG:

File.open("image_name.jpg", 'w') {|f| f.write raw_blob_content }