日期:2014-05-16  浏览次数:20951 次

Mysql 中的blob相关问题

一、MySQL?BLOB?类型介绍
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。?

MySQL的四种BLOB类型?
?类型??大小(单位:字节)?
?TinyBlob??最大?255B
?Blob??最大?65K ?//我的不是这个大小啊,也许设个是以前的吧
?MediumBlob??最大?16M?
?LongBlob??最大?4G?

实际使用中根据需要存入的数据大小定义不同的BLOB类型。?
需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。
??

?

二、mysql中的blob存取

create table Dish {

?int id;

blob?photo;

};

下面是从数据库里写的方法:

???????? String filepath = (String)session.getAttribute("file");//这里获得的是用jspsmartupload上传的文件的路径
????????? File file = new File(filepath);
????????? FileInputStream fin = new FileInputStream(file);
??????
???????? ?dataBS = new blobConn();????
????????? con = dataBS.getConn();

????????? String erpsql = "insert into Dish values(?,?)";
????????? PreparedStatement stmt = con.prepareStatement(erpsql);
??????????stmt.setString(2,String.valueOf(id));
??????????stmt.setBinaryStream(3,fin,(int)file.length());//想数据库里插入是很简单的,就一行,但这种方法只有mysql可以用
??????????stmt.executeUpdate();
????????????????????????????
??????????fin.close();
??????????stmt.close();
??????????con.close();

下面是从数据库里读的方法:

1.BufferedInputStream inputimg = null;

try {

?Connection con = sqlDS.getConnection();//简写,获得数据库连接

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("select from Dish where id = 11");

if(rs.next()){

java.sql.Blob?blob?= (java.sql.Blob)rs.getBlob("photo");

input = new BufferedInputStream(blob.getBinaryStream);

}

BufferedImage image = null;

image = javax.imageio.ImageIo.read(input);

ServlerOutputStream sos = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);

encoder.encode(image);

input.close();