学科分类
目录
Java Web

处理BLOB数据

BLOB类型的操作与CLOB类似,只是BLOB专门用于存放二进制数据,如图片、电影等。为了大家更好地学习BLOB数据的处理方式,接下来,在D盘下保存一个itcast.jpg图片,通过一个具体的案例来演示图片的存储和读取,具体步骤如下:

(1)首先在数据库chapter01中,创建一个数据表testblob,创建表的SQL语句如下所示:

create table testblob(

   id int primary key auto_increment,

   img blob

);

(2)在工程chapter01中,新建一个类BLOBDemo01,该类用于将图片写入表testblob中,BLOBDemo01的具体实现代码如例1所示。

例1 BLOBDemo01.java

1  package cn.itcast.jdbc.example;

 2  import java.io.*;

 3  import java.sql.Connection;

 4  import java.sql.PreparedStatement ;

 5  import cn.itcast.jdbc.example.utils.JDBCUtils;

 6  public class BLOBDemo01 {

 7    public static void main(String[] args) {

 8      Connection conn = null;

 9      PreparedStatement prestmt = null;

 10     try {

 11       conn = JDBCUtils.getConnection();

 12       String sql = "insert into testblob values(?,?)";

 13       prestmt = conn.prepareStatement(sql);

 14       prestmt.setInt(1, 1);

 15       File file = new File("D:\\itcast.jpg");

 16       InputStream in = new FileInputStream(file);

 17       prestmt.setBinaryStream(2, in, (int) file.length());    

 18       prestmt.executeUpdate();

 19     } catch (Exception e) {

 20       e.printStackTrace();

 21     } finally {

 22       // 释放资源

 23       JDBCUtils.release(null, prestmt, conn);

 24     }

 25   }

 26 }

程序执行后,图片的信息就以二进制的形式保存到表testblob中了,如果直接使用SELECT语句查看表testblob中的数据,则只能显示一些二进制数据,图片是无法显示的。

(3)在工程chapter01中,新建一个类BLOBDemo02,该类用于从数据库中读取要获取的图片,BLOBDemo02的具体实现方式如例2所示。

例2 BLOBDemo02.java

 1  package cn.itcast.jdbc.example;

 2  import java.io.*;

 3  import java.sql.Connection;

 4  import java.sql.PreparedStatement ;

 5  import java.sql.ResultSet;

 6  import cn.itcast.jdbc.example.utils.JDBCUtils;

 7  public class BLOBDemo02 {

 8    public static void main(String[] args) {

 9      Connection conn = null;

 10     PreparedStatement stmt = null;

 11     ResultSet rs = null;

 12     try {

 13       conn = JDBCUtils.getConnection();

 14       String sql = "select * from testblob where id = 1";

 15       stmt = conn.prepareStatement(sql);

 16       rs = stmt.executeQuery();

 17       if (rs.next()) {

 18         InputStream in = new BufferedInputStream(

 19             rs.getBinaryStream("img"));

 20         OutputStream out = new BufferedOutputStream(

 21             new FileOutputStream("img.jpg"));

 22         int temp;

 23         while ((temp = in.read()) != -1) {

 24           out.write(temp);

 25         }

 26         out.close();

 27         in.close();

 28       }

 29     } catch (Exception e) {

 30       e.printStackTrace();

 31     } finally {

 32       JDBCUtils.release(rs, stmt, conn);

 33     }

 34   }

 35 }

在例2中,使用PreparedStatement对象读取数据库中所存储的图片,由于读取出来的图片无法显示,因此,我们将读取出来的图片保存到img.jpg中。程序执行完毕后,可以直接在工程chapter01的根目录下发现img.jpg图片。

点击此处
隐藏目录