1.MySQL中的BLOB类型
Mysql中可以存储大文件数据,一般使用的BLOB对象。如图片,视频等等。
BLOB是一个二进制大对象,可以容纳可变数量的数据。因为是二进制对象,所以与编码方式无关。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
四种字段类型保存的最大长度如下:
TINYBLOB – 255 bytes
BLOB – 65535 bytes(64KB)
MEDIUMBLOB – 16,777,215 bytes(16MB) (2^24 – 1)
LONGBLOB – 4G bytes (2^32 – 1)
2.java对MySQL图片的读取
下面是test数据库中定义的phototest表结构。
id | int(11) | YES |
photo | mediumblob | YES |
保存与读取图片的代码如下:
1 import java.io.*; 2 import java.sql.*; 3 public class LoadStoreBLOB { 4 public static void main(String[] args) { 5 DBConnection DB = new DBConnection(); //负责连接MySQl数据库的类 6 Connection con = null; 7 PreparedStatement ps = null; 8 ResultSet rs = null; 9 InputStream in = null; 10 try { 11 //从本地硬盘硬盘读取一张图片保存到数据库 12 con=DB.getConn(); 13 in=new FileInputStream("sdf.png"); 14 ps=con.prepareStatement("insert into test.phototest values(?,?)"); 15 ps.setInt(1,2); 16 ps.setBinaryStream(2, in, in.available()); 17 ps.executeUpdate(); 18 in.close(); 19 DB.closeConn(con); 20 21 //从数据库读取图片保存到本地硬盘 22 con=DB.getConn(); 23 ps=con.prepareStatement("select * from test.phototest where id=?"); 24 ps.setInt(1,2); 25 rs=ps.executeQuery(); 26 rs.next(); //将光标指向第一行 27 in=rs.getBinaryStream("photo"); 28 byte[] b=new byte[in.available()]; //新建保存图片数据的byte数组 29 in.read(b); 30 OutputStream out=new FileOutputStream("222.jpg"); 31 out.write(b); 32 out.flush(); 33 out.close(); 34 DB.closeConn(con); 35 } 36 catch (Exception e) { 37 System.out.println("Error::"+e); 38 } 39 } 40 }
3.选择合适的字段大小
如果选择的字段类型的最大长度较小,放不下保存的数据,可能会报出MySQL数据截断异常。如:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘photo’ at row 1
Mysql 中文参考手册列类型:
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#blob
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11628.html