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?
Advertisement
Answer
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;