Java知識點總結(JDBC-二進位制物件的使用)

蘇生發表於2019-01-19

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());
  }
}

相關文章