2010-04-30 8 views
4

Je tente d'enregistrer des données BLOB à partir d'une base de données SQLite (cache Safari: Cache.db) dans un fichier, mais pour une raison quelconque, sqlite ne lira pas tout le BLOB. Je voudrais finalement le faire dans ruby, mais pour l'instant quelque chose qui fonctionne directement dans l'invite de commande sqlite est très bien. Aussi, j'ai lu toutes les entrées qui en parlent ici sur stackoverflow, mais la plupart d'entre elles discutent uniquement de la performance d'enregistrement des images dans les blobs et l'entrée qui montre que les blobs sont sauvegardés dans le fichier est en C# moi. Voici ce que j'ai essayé:Enregistrement des données Blob de la base de données SQLite dans un fichier

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

sqlite> sélectionnez receiver_data à partir de cfurl_cache_blob_data où entry_ID = 3501;
GIF89a (

A hexdump de l'original (fichier guest.gif) montre que arrête sqlite la lecture de la goutte après la première valeur nulle:

hexdump $ guest.gif -C
00000000 47 49 46 38 39 61 28 00 28 00 00 00 f7 f1 f5 fd | GIF89a ((....... |.

sqlite> .output test.gif
sqlite> sélectionnez receiver_data de cfurl_cache_blob_data où entry_ID = 3501;
$ hexdump -C test.gif
00000000 47 49 46 38 39 61 28 0a | GIF89a (. |

Répondre

7

SQLite3 est lecture le blob entier, mais le programme shell SQLite est seulement afficher jusqu'à la NUL.

Pour tester cela, vous pouvez essayer:

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

Eh oui, ça marche :) , je voulais sauver blobs à des fichiers en utilisant Ruby, mais je me suis retrouvé à l'aide de java: http://stackoverflow.com/questions/2150265/récupérer-une-image-stockée-comme-blob-sur-un-mysql-db Merci – Felipe

1

Génération d'un fichier à partir d'un blob binaire ou brut est assez simple en Ruby. Vous le faites de la même manière que vous écrivez dans un fichier. Par exemple, pour créer un jpeg:

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