Como armazenar/recuperar imagens para/do SQL Server
O jTDS é um driver JDBC 3.0 de código aberto para o Microsoft SQL Server (6.5, 7, 2000 e 2005). O pacote java.sql junto com o driver acima ajuda em armazenar dados binários na base de dados do Microsoft SQL Server.
O exemplo abaixo mostra como armazenar e recuperar os dados de uma imagem no SQL Server.
import java.sql.*;
import java.io.*;
public class saveImage
{
public static void main(String[] args)
{
DB db = new DB();
Connection conn=db.dbConnect(
"jdbc:jtds:sqlserver://localhost:1433/test","sa","");
db.insertImage(conn,"d://filepath//test.JPG");
db.getImageData(conn);
}
}
class DB
{
public DB() {}
public Connection dbConnect(String db_connect_string,
String db_userid, String db_password)
{
try
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection conn = DriverManager.getConnection(
db_connect_string, db_userid, db_password);
System.out.println("conectado");
return conn;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public void insertImage(Connection conn,String img)
{
int len;
String query;
PreparedStatement pstmt;
try
{
File file = new File(img);
FileInputStream fis = new FileInputStream(file);
len = (int)file.length();
query = ("insert into TableImage VALUES(?,?,?)");
pstmt = conn.prepareStatement(query);
pstmt.setString(1,file.getName());
pstmt.setInt(2, len);
//Método usado para inserir uma stream de bytes
pstmt.setBinaryStream(3, fis, len);
pstmt.executeUpdate();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void getImageData(Connection conn)
{
byte[] fileBytes;
String query;
try
{
query = "select data from tableimage";
Statement state = conn.createStatement();
ResultSet rs = state.executeQuery(query);
if (rs.next())
{
fileBytes = rs.getBytes(1);
OutputStream targetFile=
new FileOutputStream("d://filepath//new.JPG");
targetFile.write(fileBytes);
targetFile.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
};