首先来创建我们的数据库,
create database Image;
use Image;
create table country (
id int primary key auto_increment,
name varchar(30),
flag blob,
description varchar(255)
);
数据库创建完毕,下面是Java 的程序代码,它实现的功能是从一个目录中读入一张图片(china.gif) ,然后在把它输出在另一个目录中(1.gif).
*****************************************************************************************************
import java.sql.*;import java.io.*;
/**
author@tongxiao
time:2007.09.14
*/
public class TestImage {private static final String URL = "jdbc:mysql://localhost/Image?user=root&password=root&useUnicode=true";private Connection conn = null;private PreparedStatement pstmt = null;private ResultSet rs = null;private File file = null;private InputStream inputImage = null;private OutputStream outputImage = null;
public void blobInsert(String infile) { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!");
conn = DriverManager.getConnection(URL); System.out.println("Database connected!");
pstmt = conn .prepareStatement("insert into Country (name,flag,description) values (?,?,?)"); pstmt.setString(1, "china");
file = new File(infile); try { inputImage = new FileInputStream(file); } catch (FileNotFoundException e) {
e.printStackTrace(); } pstmt.setBinaryStream(2, inputImage, (int) (file.length()));
pstmt.setString(3, "A flag of China"); pstmt.executeUpdate(); System.out.println("commit successfully"); } catch (ClassNotFoundException e) {
e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { inputImage.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } }
}
public void readBolb(String path, int id) { InputStream is = null; byte[] buffer = new byte[4096];
try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!");
conn = DriverManager.getConnection(URL); System.out.println("Database connected!");
pstmt = conn .prepareStatement("select flag from Country where id =?"); System.out.println("select ok");
pstmt.setInt(1, id); rs = pstmt.executeQuery();
rs.next(); file = new File(path); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) {
e.printStackTrace(); }
} try { outputImage = new FileOutputStream(file); System.out.println(outputImage.toString()); } catch (FileNotFoundException e) {
e.printStackTrace(); }
Blob blob = rs.getBlob("flag"); is = blob.getBinaryStream(); try { System.out.println(is.available()); } catch (IOException e2) { e2.printStackTrace(); } try { System.out.println(is.available()); } catch (IOException e1) {
e1.printStackTrace(); }
int size = 0; try { while ((size = is.read(buffer)) != -1) { System.out.println(size); outputImage.write(buffer, 0, size);
} } catch (IOException e) {
e.printStackTrace(); }
} catch (ClassNotFoundException e) {
e.printStackTrace(); } catch (SQLException e) {
e.printStackTrace(); } finally { try { is.close(); outputImage.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } }
}
public static void main(String[] args) {
new TestImage().blobInsert("c:\\TDdownload\\china.gif"); new TestImage().readBolb("c:\\1.gif", 1);}
}
程序执行完你将在相应的目录下看到一张输出的图片.同时在Mysql 客户端使用:select * from country;将显示一堆的乱麻,这就正常.说明图片已经存入Mysql 中.到次本次试验完毕!