如果將要檔案寫入資料庫,您可以在欄位上使用
BLOB或CLOB資料型態,
BLOB全名Binary Large Object,用於儲存大量的二進位資料,
CLOB全名Character Large Object,用於儲存大量的文字資料。
在JDBC中也提供了
Blob與Clob兩個類別分別代表BLOB與CLOB資料,JDBC並沒有提供直接存入BLOB或CLOB的對應介面(像是setBlob()、setClob()等),但您可以使用PreparedStatement的
setBinaryStream()、 setObject()、setAsciiStream()、setUnicodeStream()等方法來代替,例如我們可以如下取得一個檔案,並將之存入資料庫中:
// 取得檔案 
File file = new File("./logo_phpbb.jpg"); 
int length = (int) file.length(); 
InputStream fin = new FileInputStream(file); 
 
// 填入資料庫 
PreparedStatement pstmt = conn.prepareStatement( 
                       "INSERT INTO files VALUES(?, ?)"); 
pstmt.setString(1, "米小國Logo"); 
pstmt.setBinaryStream (2, fin, length); 
pstmt.executeUpdate(); 
pstmt.clearParameters(); 
pstmt.close(); 
fin.close(); 
 如果要從資料庫中取得BLOB或CLOB資料,您可以如下進行:
Blob blob = result.getBlob(2);  // 取得BLOB 
Clob clob = result.getClob(2)  // 取得CLOB  
 Blob擁有
getBinaryStream()、getBytes()等方法,可以取得二進位串流或byte等資料,同樣的,Clob擁有
getCharacterStream()、getSubString()等方法,可以取得字元串流或子字串等資料,您可以查看API文件來獲得更詳細的訊息。
下面這個程式示範基本的檔案存入資料庫並取出另存新檔: 
BLOBCLOBDemo.java
 import java.io.File;
import java.io.File;
 import java.io.FileInputStream;
import java.io.FileInputStream;
 import java.io.FileOutputStream;
import java.io.FileOutputStream;
 import java.io.IOException;
import java.io.IOException;
 import java.io.InputStream;
import java.io.InputStream;
 import java.sql.Blob;
import java.sql.Blob;
 import java.sql.Connection;
import java.sql.Connection;
 import java.sql.DriverManager;
import java.sql.DriverManager;
 import java.sql.PreparedStatement;
import java.sql.PreparedStatement;
 import java.sql.ResultSet;
import java.sql.ResultSet;
 import java.sql.SQLException;
import java.sql.SQLException;
 import java.sql.Statement;
import java.sql.Statement;


 /**//**
/**//**
 * @author Administrator
 * @author Administrator
 *
 * 
 * TODO To change the template for this generated type comment go to Window -
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 * Preferences - Java - Code Style - Code Templates
 */
 */

 public class BLOBCLOBDemo
public class BLOBCLOBDemo  {
{

 public static void main(String[] args)
    public static void main(String[] args)  {
{
 String driver = "com.mysql.jdbc.Driver";
        String driver = "com.mysql.jdbc.Driver";
 String url = "jdbc:mysql//localhost:3306/upload?"
        String url = "jdbc:mysql//localhost:3306/upload?"
 + "useUnicode=true&characterEncoding=gbk";
                + "useUnicode=true&characterEncoding=gbk";
 String user = "root";
        String user = "root";
 String password = "123456";
        String password = "123456";

 try
        try  {
{
 Class.forName(driver);
            Class.forName(driver);
 Connection conn = DriverManager.getConnection(url, user, password);
            Connection conn = DriverManager.getConnection(url, user, password);
 File file = new File("./logo_phpbb.jpg");
            File file = new File("./logo_phpbb.jpg");
 int length = (int) file.length();
            int length = (int) file.length();
 InputStream fin = new FileInputStream(file);
            InputStream fin = new FileInputStream(file);
 // 存入檔案
            // 存入檔案
 PreparedStatement pstmt = conn
            PreparedStatement pstmt = conn
 .prepareStatement("insert into files values(?, ?)");
                    .prepareStatement("insert into files values(?, ?)");
 pstmt.setString(1, "Logo");
            pstmt.setString(1, "Logo");
 pstmt.setBinaryStream(2, fin, length);
            pstmt.setBinaryStream(2, fin, length);
 pstmt.executeUpdate();
            pstmt.executeUpdate();
 pstmt.close();
            pstmt.close();
 fin.close();
            fin.close();
 // 取出檔案
            // 取出檔案
 Statement stmt = conn.createStatement();
            Statement stmt = conn.createStatement();
 ResultSet result = stmt.executeQuery("select * from files");
            ResultSet result = stmt.executeQuery("select * from files");
 result.next();
            result.next();
 String description = result.getString(1);
            String description = result.getString(1);
 Blob blob = result.getBlob(2);
            Blob blob = result.getBlob(2);
 // 寫入檔案
            // 寫入檔案
 System.out.println("檔案描述: " + description);
            System.out.println("檔案描述: " + description);
 FileOutputStream fout = new FileOutputStream("./logo_phpbb_2.jpg");
            FileOutputStream fout = new FileOutputStream("./logo_phpbb_2.jpg");
 fout.write(blob.getBytes(1, (int) blob.length()));
            fout.write(blob.getBytes(1, (int) blob.length()));
 fout.flush();
            fout.flush();
 fout.close();
            fout.close();
 stmt.close();
            stmt.close();
 conn.close();
            conn.close();

 } catch (ClassNotFoundException e)
        } catch (ClassNotFoundException e)  {
{
 System.out.println("找不到驅動程式");
            System.out.println("找不到驅動程式");
 e.printStackTrace();
            e.printStackTrace();

 } catch (SQLException e)
        } catch (SQLException e)  {
{
 e.printStackTrace();
            e.printStackTrace();

 } catch (IOException e)
        } catch (IOException e)  {
{
 e.printStackTrace();
            e.printStackTrace();
 }
        }
 }
    }
 }
}
