Reputation: 9
I have a question related to retrieving files from MySQL using JDBC. I managed to save a .png file from my desktop & retrieve it successfully, but I can't read the file. It shows that the format is unsupported (eventhough I can open the original file without any issue).
Here's the code:
PreparedStatement ps = con.prepareStatement("select * from project where files IS NOT NULL ");
ResultSet rs = ps.executeQuery();
rs.next();
Clob c = rs.getClob(3);
Reader r = c.getCharacterStream();
FileWriter fw = new FileWriter("C:\\Users\\xxxl\\Pictures\\Picture1.png");
int in;
while ((in = r.read())!=-1)
fw.write((char)in);
fw.close();
con.close();
System.out.println("File successfully retrieved");
Any ideas what could be the cause and how to fix it?
Upvotes: 0
Views: 42
Reputation: 69440
You have to use FileOutpuStream
, because you have to write bytes not char
. Also you column should be a blob
.
Something like this should work
PreparedStatement ps = con.prepareStatement("select * from project where files IS NOT NULL ");
ResultSet rs = ps.executeQuery();
rs.next();
Blob c = rs.getBlob(3);
InputStream r = c.getBinaryStream();
FileOutputStream fw = new FileOutputStream ("C:\\Users\\xxxl\\Pictures\\Picture1.png");
int in;
byte[] readBytes = new byte[500];
while (r.read(readBytes)!=-1) {
fw.write(readBytes);
}
fw.close();
con.close();
System.out.println("File successfully retrieved");
Imports are:
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
Upvotes: 1