Ho alcune immagini in un database informix, come un campo blob blob (jpg), come posso scrivere le immagini sul disco con un SQL?Come scrivere un blob binario su disco su Informix
risposta
I dati sono memorizzati in un campo BYTE o BLOB?
Se i dati sono memorizzati in una colonna BLOB, quindi è possibile utilizzare:
SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
FROM TheTable
WHERE PK_Column = 23411 -- PK value
Se i dati sono memorizzati in una colonna BYTE, allora si deve lavorare piuttosto duro. Se si dispone di ESQL/C (ClientSDK) e un compilatore C sulla macchina, quindi si consiglia di ottenere SQLCMD dal IIUG Software Archive ed estrarre il software. È necessario il proprio set di ambienti Informix e si deve essere in grado di compilare programmi C. Quindi esegui:
Non ha molta importanza quello che viene specificato come prefisso: è sufficiente eseguire lo script di configurazione.
È quindi possibile compilare tutto (make
) oppure è possibile semplicemente compilare il programma selblob
(make selblob
). Quel programma è ciò che chiamo una "vignetta"; un programma microscopico che mostra come selezionare un BLOB BYTE su disco. È, tuttavia, anche pienamente funzionale; funzionerà con qualsiasi cosa tu passi o diagnostichi un errore.
Se il database si chiama precious
, il byte di dati è in una tabella byte_table
, colonna che contiene i dati è byte_column
, e le colonne chiave primaria sono col1
(e il valore richiesto è 23
) e col2
(e il valore richiesto è "Habeas Corpus"
), allora è possibile eseguire:
selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
-c byte_column -f output_file
Questo scaricherà il valore di byte in un file nominato.
Se non si dispone del compilatore ESQL/C o C o del permesso per utilizzarli, la vita è più difficile. L'approccio più vicino è quello di utilizzare l'istruzione SCARICO nel DB-Access:
dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!
Questo creerà un file contenente un hex-dump del valore di byte (2 byte per carattere). È quindi necessario post-elaborare il file per convertire l'esadecimale in dati regolari. Si noti che se la colonna fosse una colonna TEXT anziché una colonna BYTE, non sarebbe necessaria alcuna conversione. È possibile utilizzare uno abbastanza semplice script in Perl per fare la conversione (a condizione che il file è abbastanza piccolo da essere slurped nella memoria - si deve lavorare di più, se non è abbastanza piccolo):
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 condizione lunghezza specifica ' > 1
'per gestire la nuova riga alla fine dei dati non caricati.
(Per "hysterical raisins", alias "ragioni storiche", chiamo ancora sia "tipi di blob" BYTE e TEXT, anche se IDS 9.00 ha introdotto i nomi espliciti BLOB e CLOB per "smart blob", una coppia leggermente diversa di tipi di dati con funzionalità approssimativamente corrispondenti - nel mio libro, sono tutti tipi blob (minuscole). Questo è il problema con i vecchi che hanno imparato a conoscere i BLOB di BYTE e TEXT nel 1990, sei anni o più prima che BLOB e BLOB di BLOB fossero aggiunto. In ogni caso, non esiste una buona terminologia ufficiale alternativa per i vecchi BLOB di stile; non è politicamente corretto!)
È necessario scrivere un piccolo programma che interroga il database e salva i BLOB sul disco. La maggior parte dei database non ha la nozione di "file aperto su disco".
Credo di essere abituato a MySQL – levhita
- 1. Database blob vs File memorizzati su disco
- 2. ios scrivere su disco su sfondo filo
- 3. Come scrivere una RAMDirectory Lucene.Net su disco?
- 4. Scrivi un file binario scaricato su disco in Java
- 5. Condizioni (come "mi piace") su campo binario (blob) in oracle
- 6. Utilizzo di Pisa per scrivere un pdf su disco
- 7. Chrome: Come salvare un file su disco
- 8. Caricamento file WebAPI - Senza scrivere file su disco
- 9. Crea blob binario in JS
- 10. test su spazio su disco in linux
- 11. Come convertire un oggetto immagine in un blob binario
- 12. Impossibile scrivere un file binario
- 13. Python come scrivere in un file binario?
- 14. Trie basato su disco?
- 15. Salva NSMutableArray su disco
- 16. salvare Btrees in un file su disco e leggerlo
- 17. Salva file binario in BLOB da httppostedfile
- 18. stampa un albero binario su un lato
- 19. EhCache overflow su disco su percorso specifico
- 20. Rubyzip: Esporta il file zip direttamente su S3 senza scrivere tmpfile su disco?
- 21. Javascript: oggetto Blob su base64
- 22. memorizzando dati binari su cassandra proprio come il file binario MYSQL BLOB
- 23. Come scrivere in sicurezza su un file?
- 24. Come scrivere su un memoraproxy in Ext.js
- 25. Come scrivere su un oggetto risposta HttpServletResponse?
- 26. Come scrivere un file su Kafka Producer
- 27. Come scrivere un flusso su file?
- 28. Come scrivere su un OutputStream utilizzando DefaultHttpClient?
- 29. Come scrivere su un file in Kotlin?
- 30. Come scrivere le stringhe su un OutputStream
sei pazzo jon ... Avevo bisogno anche di questa risposta e ovviamente sarà la tua risposta se ha ottenuto qualcosa fare con informix – CheeseConQueso
Apparentemente LOTOFILE funziona anche su colonne BYTE, almeno in Informix 12.10. Grazie per tutti gli utili post Informix, ogni volta che cerco qualcosa su Informix il tuo nome compare :) – Otherside