4

Java知识点总结(JDBC-二进制对象的使用)

@(Java知识点总结)[Java, JDBC]

BLOB(Binary Large Object)

  • 用于存储大量的二进制数据
  • 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。

Mysql中相关类型 :

  • TINYBLOB最大长度为255(2^[8]-1)字节的BLOB列。
  • BLOB[(M)]最大长度为65,535(2^[24]-1)字节的BLOB列。
  • MEDIUMBLOB最大长度为16,777,215(2^[24]-1)字节的BLOB列。
  • LONGBLOB最大长度为4,294,967,295或4GB[2^[32]-1]字节的BLOB列。
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * 二进制对象的使用
 * 插入一张图片,并读取出来
 * @author Administrator
 *
 */
public class Demo03 {
 
  //存
  private static void insert(Connection conn) {
    String sql = "insert into users(NAME,IMG) values(?,?)";
    PreparedStatement ps = null;
    try {
     ps = conn.prepareStatement(sql);
     ps.setString(1, "baby");
     ps.setBlob(2, new FileInputStream("E:/a.jpg"));
     ps.execute();
 
    } catch (SQLException | FileNotFoundException e) {
     e.printStackTrace();
    } finally {
     DBUtil. close(ps);
     DBUtil. close(conn);
    }
  }
 
  // 读
  private static void read(Connection conn) {
    String sql = "select * from users where USERID = ?";
    PreparedStatement ps = null;
    ResultSet rs = null;
    InputStream is = null;
    FileOutputStream fos = null;
    try {
     ps = conn.prepareStatement(sql);
     ps.setObject(1, 14);
     rs = ps.executeQuery();
     while (rs.next()) {
       Blob b = rs.getBlob("IMG");
       is = b.getBinaryStream();
       fos = new FileOutputStream("E:/b.jpg");
       int temp = 0;
       while ((temp = is.read()) != -1) {
         fos.write(temp);
       }
     }
    } catch (SQLException | IOException e) {
     e.printStackTrace();
    } finally {
     try {
       if(is !=null){
         is.close();
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
     try {
       if(fos != null){
         fos.close();
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
     DBUtil. close(rs);
     DBUtil. close(ps);
     DBUtil. close(conn);
 
    }
  }
  
  public static void main(String[] args) {
    insert(DBUtil.getConn());
    read(DBUtil.getConn());
  }
}

苏生
803 声望725 粉丝