Boa tarde a todos,
Estou fazendo um select de uma imagem no SQL Server, porém quando eu crio um arquivo a partir do valor retornado, a imagem fica desfigurada.
Alguém sabe me dizer como eu faço para solucionar o problema?
O tipo de dado da imagem no SQLServer está como text.
Eis a imagem gerada apartir do resultado:
Meu código:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) throws SQLException, IOException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
//String sql = "select cpros, figjpgs from SIGCDPRO where cpros between '010000.03591' and '010050.03603'";
String sql = "select cpros, figjpgs from SIGCDPRO where cpros = '010050.03603'";
ConectaBanco conectaBanco = new ConectaBanco();
Connection conn = conectaBanco.getConexao();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String figjpgsStr = rs.getString("figjpgs");
String cpros = rs.getString("cpros").trim();
//funciona, porem mantem a imagem desfigurada(String)
writeToFile(cpros, figjpgsStr);
//funciona, porem deixa a imagem desfigurada (bytes [])
//createFileOnRoot(cpros, decodeImage(figjpgsStr));
}
rs.close();
ps.close();
conn.close();
JOptionPane.showMessageDialog(null, "Fim do processo de transporte.");
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
private static void writeToFile(String cpros, String content) {
File file = new File("imgs/" + cpros + ".jpg");
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
bw.write(content);
bw.flush();
bw.close();
} catch(IOException e) {
e.printStackTrace();
} finally {
if(bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}