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();
                 }
        }
};