zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Java实现对Mysql的图片存取操作详解编程语言

mysqlJAVA编程语言 实现 详解 操作 图片 存取
2023-06-13 09:20:35 时间

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表结构。


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

cjavamysql