У меня было похожее требование, которое я обнаружил в моем случае с использованием Java + Hibernate (возможно, аналогичная задача в других вариантах Hibernate, но не пробовал его), довольно быстро привело меня туда.
Я настроил отображение так:
<hibernate-mapping>
<class name="<com.package.table>" table="table">
<id column="pk" name="pk" type="int">
</id>
<property name="blobfield" type="blob"/>
</class>
</hibernate-mapping>
Java-бин для переноса данных, что-то вроде:
package com.package;
import java.sql.Blob;
...
public class table {
...
public Blob getBlobfield {
...
И цикл примерно такой:
...
tx = session.beginTransaction();
Criteria crit = session.createCriteria(table.class);
crit.setMaxResults(50); // Alter this to suit...
List<table> rows = crit.list();
for (table r: rows) {
ExtractBlob(r.getId(), r.getBlobField);
}
И что-то («ExtractBlob», я называю это), чтобы извлечь BLOB-объект (используя PK для генерации имени файла), что-то вроде этого:
...
FileOutputStream fout=new FileOutputStream(<...base output file on PK for example...>
BufferedOutputStream bos=new BufferedOutputStream(fout);
InputStream is=blob.getBinaryStream();
byte[] b=new byte[8192];
while ( (is.read(b))>0 ) {
bos.write(b);
}
is.close();
bos.close()
;
...
Я могу опубликовать более полный пример, если вы считаете, что он может быть полезен - но я бы извлек код из более крупного проекта, иначе я бы просто опубликовал его прямо вверх.