J'ai quelques images dans une base de données informix, comme un champ blob binaire (jpg), comment puis-je écrire les images sur un disque avec un SQL?Comment écrire un blob binaire sur le disque sur Informix
Répondre
Les données sont-elles stockées dans un champ BYTE ou BLOB?
Si les données sont stockées dans une colonne de type BLOB, vous pouvez utiliser:
SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
FROM TheTable
WHERE PK_Column = 23411 -- PK value
Si les données sont stockées dans une colonne de BYTE, alors vous devez travailler plus dur plutôt. Si vous avez ESQL/C (ClientSDK) et un compilateur C sur votre machine, alors je recommande d'obtenir SQLCMD à partir du IIUG Software Archive et d'extraire le logiciel. Vous avez besoin de votre environnement Informix et vous devez être capable de compiler des programmes C. Ensuite, exécutez:
./configure --prefix=$HOME/bin
Il n'a pas beaucoup d'importance ce que vous spécifiez comme préfixe - il vous suffit de lancer le script de configuration.
Vous pouvez ensuite compiler tout (make
), ou vous pouvez simplement compiler le programme selblob
(make selblob
). Ce programme est ce que j'appelle une «vignette»; un programme microscopique qui montre comment sélectionner un blob BYTE sur le disque. Il est cependant aussi pleinement fonctionnel; il fonctionnera avec à peu près tout ce que vous lui lancerez ou diagnostiquerez une erreur.
Si votre base de données est appelée precious
, les données octet est dans une table byte_table
, la colonne contenant les données sont byte_column
, et les colonnes de clé primaire sont col1
(et la valeur requise est 23
) et col2
(et la valeur requise est "Habeas Corpus"
), alors vous pouvez exécuter:
selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
-c byte_column -f output_file
Cela déchargera la valeur d'octet dans le fichier nommé.
Si vous n'avez pas ESQL/C ou un compilateur C ou la permission de les utiliser, alors la vie est plus difficile. Le plus proche approche consiste à utiliser l'instruction UNLOAD dans DB-accès:
dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!
Cela va créer un fichier contenant un vidage hexadécimal de la valeur d'octet (2 octets par caractère). Vous devez ensuite post-traiter le fichier pour convertir l'hexagone en données régulières. Notez que si la colonne était une colonne TEXT au lieu d'une colonne BYTE, aucune conversion ne serait nécessaire. Vous pouvez utiliser un script Perl assez simple pour effectuer la conversion (à condition que le fichier est assez petit pour être slurped en mémoire - vous devez travailler plus dur si elle est pas assez petit):
perl -w -e '
$/ = "";
my $data = <>;
while (length($data) > 1)
{
my $hex = substr($data, 0, 2);
printf "%c", hex($hex);
$data = substr($data, 2);
}' <output_file
La condition de longueur précise ' > 1
'pour traiter le retour à la ligne à la fin des données déchargées. (Pour 'Raisins hystériques', alias 'raisons historiques', j'appelle toujours les types blob BYTE et TEXT, même si IDS 9.00 a introduit les noms explicites BLOB et CLOB pour 'blobs intelligents', une paire légèrement différente Dans mon livre, ce sont tous des types blob (en minuscules) C'est le problème avec les vieux gars qui ont appris les blobs BYTE et TEXT en 1990, six ans ou plus avant BLOB et blobs CLOB étaient ajoutée. Dans tous les cas, il n'existe pas de bonne terminologie officielle alternative pour les taches de style plus anciennes; en utilisant 'blobs stupide' n'est pas politiquement correct!)
Vous devez écrire un petit programme qui interroge la base de données et enregistre les blobs sur le disque. La plupart des bases de données n'ont aucune notion de "fichier ouvert sur le disque".
Je suppose que je suis habitué à MySQL – levhita
- 1. Comment POSTER un fichier sur un serveur REST sans écrire le fichier sur disque avec PHP?
- 2. Comment envoyer un blob binaire à un navigateur client?
- 3. Comment écrire une image CGPath ou vectorielle complexe sur le disque?
- 4. Comment INSÉRER binaire std :: string en BLOB
- 5. Enregistrer NSMutableArray sur le disque
- 6. Comment écrire un fichier téléchargé sur le disque à l'aide de l'alias de répertoire Oracle et des objets BFILE?
- 7. Comment afficher un tableau de doubles sur le disque dur?
- 8. Comment enregistrer un fichier xml sur le disque?
- 9. génère un fichier .txt à partir d'un StreamWriter sans écrire sur le disque?
- 10. Blob ... comment écrire de manière non récursive
- 11. Quel est le moyen le plus rapide pour lire/écrire sur le disque dans .NET?
- 12. Enregistrer une chaîne base64 sur le disque en tant que binaire en utilisant Delphi 2007
- 13. Comment puis-je écrire un XML sur mon disque dur à GetRequestStream
- 14. Écrire fichier binaire
- 15. High Disk Écrire sur le serveur
- 16. Enregistrement d'un fichier WAV sur le disque
- 17. Enregistrement d'une chaîne Base64 sur un disque en tant que binaire en utilisant PHP
- 18. Comment écrire correctement des fichiers dynamiques sur un serveur FTP?
- 19. Comment déterminer les blocs alloués sur un disque NTFS
- 20. php: inversion des effets de mysql_real_escape_string sur un binaire
- 21. Enregistrement des chaînes sur le disque sous Delphi 2009
- 22. VB - Comment lire et écrire un fichier binaire?
- 23. URL: Binaire Blob, Unicode ou Encodé Chaîne Unicode?
- 24. Comment écrire "sur le formulaire submit complete" en utilisant javascript?
- 25. Comment puis-je écrire un programme capable de tester le débit du disque?
- 26. comment écrire des données sur le canal socket
- 27. Enregistrement du résultat xml du serveur sql sur le disque
- 28. Comment créer un tableau binaire dans VbScript?
- 29. Comment utiliser fprintf et écrire sur un tube?
- 30. Comment écrire un transport personnalisé basé sur socket pour WCF
vous êtes fou jon ... J'avais besoin de cette réponse aussi bien sûr et il va être votre réponse si elle a quelque chose à faire avec informix – CheeseConQueso
Apparemment, LOTOFILE fonctionne aussi sur les colonnes BYTE, au moins dans Informix 12.10. Merci pour tous les messages utiles Informix, chaque fois que je cherche quelque chose sur Informix votre nom apparaît :) – Otherside