Esse é o código que eu tento utilizar:
package testes;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BlobSample {
public static void main(String[] args) throws Exception, IOException, SQLException {
Connection conn = Conexao.pegarConexao();
String INSERT_PICTURE = "insert into pictures(id, name, photo) values (?, ?, ?)";
FileInputStream fis = null;
PreparedStatement ps = null;
try {
//save image as blob
conn.setAutoCommit(false);
File file = new File("C:\\foto_original.jpg");
fis = new FileInputStream(file);
ps = conn.prepareStatement(INSERT_PICTURE);
ps.setString(1, "2");
ps.setString(2, "foto_original");
ps.setBinaryStream(3, fis, (int) file.length());
ps.executeUpdate();
conn.commit();
//read back
String SELECT_PICTURE = "select id, name, photo from pictures";
ps = conn.prepareStatement(SELECT_PICTURE);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
//save blob as an image
FileOutputStream fos = new FileOutputStream("C:\\foto_modified.jpg");
//String id = rs.getString(1);
//String name = rs.getString(2);
InputStream is = rs.getBinaryStream(3);
byte[] buf = new byte[3000];
int read = 0;
while ((read = is.read(buf)) > 0) {
fos.write(buf, 0, read);
}
fos.close();
is.close();
}
} finally {
ps.close();
fis.close();
}
}
}
Bom o arquivo original tem 50.5 KB e quando o arquivo depois de lido armazenado no banco de dados MySQL como BloB, ele escreve o arquivo de volta, só que quando ele escreve o novo arquivo, esse arquivo fica com 50.1 KB e a imagem obviamente não visualiza.
Alguem sabe como fazer pra ele ficar perfeito? Tudo original? Sem nenhuma perda de dados?
Obrigado!