package org.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class BlobTest { /** * @param args * @throws SQLException * @throws IOException */ public static void main(String[] args) throws SQLException, IOException { // TODO Auto-generated method stub //create(); read(2); } //将二进制流存储入数据库blob字段类型。 public static void create() throws SQLException, IOException{ String sql = "insert into blob_test values(id,?)"; Connection conn = null; PreparedStatement ps = null; try{ conn = JdbcUtil.getInstance().getConnection(); ps = conn.prepareStatement(sql); File file = new File("input_text_right.gif"); BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); ps.setBlob(1, in); int id = ps.executeUpdate(); System.out.println("id:"+id); in.close(); }finally{ JdbcUtil.free(null, ps, conn); } } //读取二进制流,并写入新的文件 public static void read(int id) throws SQLException, IOException{ String sql = "select big_bit from blob_test where id=? limit 1"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try{ conn = JdbcUtil.getInstance().getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1, id); rs = ps.executeQuery(); byte[] b = new byte[1024]; while(rs.next()){ InputStream in = rs.getBinaryStream(1);//InputStream是字节输入流的所有类的超类 File file = new File("left.gif"); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));//BufferedOutputStream是缓冲的输出流 for(int i=0; (i=in.read(b))>0;){//read方法接收byte数组,并将数据存储在缓冲数组b中 out.write(b);//将指定的字节写入此缓冲的输出流。 } out.close();//关闭此输出流并释放与此流有关的所有系统资源。 } }finally{ JdbcUtil.free(rs, ps, conn); } } }