您的位置:首页 > 数据库

关于数据库存取图片的些许事例

2016-11-14 18:39 267 查看
最近不小心碰见了关于数据库以二进制流存取图片的问题,以前只是在数据库中选择存放图片,所以觉得没什么问题,不过当这个问题出现时,还是头疼了一会,写出来,希望和我一样所有的新手共勉!!!

向数据库中存取图片(以二进制流的方式)

首先:存储图片

File file = new File(“地址”);//如d://ccc.jpg

FileInputStream fis = new FileInputStream(file);//得到图片的二进制流

定义sql插入语句;

连接数据库;

pstmt.setBinaryStream(3,fis,(int)file.length);

插入图片数据;
此时,图片已经以二进制流的方式存入数据库中。
=======================================================

然后:取出图片

连接数据库;

查询得到图片数据;

//这里注意顺序(这两个语句必须挨在一起执行,否则流会关闭),其实在我做这个的时候就一直是这个问题困扰着我,整整一上午啊。。。。。

InputStream in = new rs.getBinaryStream(4);

String str = encodeBase64(toByteArray(in));//将图片二进制流转化成Base64编码,这是我做的一个接口,所以图片要经过Base64加密。
其实我要表达的意思很简单,就是如果你要在这里读取图片的话,应该在得到流之后立刻就进行这项操作,否则流会关闭。
=======================================================
顺便带上这个函数。

这里toByteArray(InputStream in)方法是将二进制流转化成字节数组

Public Static byte[] toByteArray(InputStream in) throws IOException {

   ByteArrayOutputStream output = new ByteArrayOutputStream();

   byte[] buffer = new byte[73000];//72KB

   Int n = 0;

   While(-1 != (n = in.read(buffer))){

       output.write(buffer,0,n);

   }

   Return output.toByteArray();

}
=========================================================

encodeBase64()参数为字节数组,所以需要将二进制流转化成字节数组,再进行Base64编码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: