Taking the contents of a Blob and writing it to a file

M

MattC

I have a java.sql.Blob object that represents an XML file. I would like
to right the Blob to a file on the file system. Can someone tell me an
easy way to do this?
 
R

Roedy Green

I have a java.sql.Blob object that represents an XML file. I would like
to right the Blob to a file on the file system. Can someone tell me an
easy way to do this?

use Blob.getBytes. From there see
http://mindprod.com/applets/fileio.html
for how you might decode it, and write it as a string, or write it as
raw bytes.

XML is a character string so it properly belonged in a Clob, not a
Blob.
 
S

steve

use Blob.getBytes. From there see
http://mindprod.com/applets/fileio.html
for how you might decode it, and write it as a string, or write it as
raw bytes.

XML is a character string so it properly belonged in a Clob, not a
Blob.

you have to be a bit careful!!.
if it's in a clob and you are on oracle and your NLS language is set
incorrectly , your database will translate the content of it's clobs to a
different codepage, which might include conversion from single byte to
multibyte character sets.


sometimes , i might want to have chinese characters on my oracle database, i
generally write them to a blob , so that the database does not tanslate and
interpret them as single byte, instead of multibyte.


that said:
this is the code to get a blob , the "photo" is stored in the content field
of the database.
just modify the "bo" to a file stream


public static byte[] getPhoto(long photoId) throws Exception {
static final int MAXBUFSIZE = 4096;
Section section = null;
PreparedStatement st = null;
ResultSet rset = null;

try {
String sql =
"Select content from photo_store where deleted=0 and
id=?";
st = c.prepareStatement(sql);
st.setLong(1, photoId); // Bind the photo id

////Oracle
rset = st.executeQuery(); // Execute Query

oracle.sql.BLOB blob = null;

if (rset.next()) /*this is always true*/ {
blob = (oracle.sql.BLOB) rset.getObject(1);
}

if (blob != null) {
BufferedInputStream bis =
new BufferedInputStream(blob.getBinaryStream());
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buf = new byte[MAXBUFSIZE];
int n = 0;

while ((n = bis.read(buf, 0, MAXBUFSIZE)) != -1) {
bo.write(buf, 0, n);
}

bo.flush();
bo.close();
bis.close();

buf = null;

return bo.toByteArray();
}
} catch (Exception ex) {
Error_stuff.handleError(ex, -1, -1);

// ex.printStackTrace();
} finally {
if (st != null) {
try {
st.close();
} catch (Exception ex1) {
Error_stuff.handleError(ex1, -1, -1);
}
}
}

return null;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top