大量图片存储可否使用blob存储

文章分类文章档案友情链接有网友提取以下问题:框架测试:mysql数据库测试(保存blob类型的数据会出问题) ,针对mysql数据库做测试:发现更新blog字段,总是保存System.Byte[]经本地测试,发现对&DbType.Binary 类型的参数赋size值时,抛出异常:索引超出了数组界限其实是无意发现的,调试时不小心拉过了赋值突然才发现。看一段小代码:&DbParameter para = _fac.CreateParameter();& & & & & & para.ParameterName = parameterN& & & & & & para.Value = value == null ? DBNull.Value :& & & & & & para.DbType = dbT& & & & & & if (dbType != DbType.Binary && size & -1)//mysql不能设定长度,否则会报索引超出了数组界限错误。& & & & & & {& & & & & & & & switch (dbType)& & & & & & & & {& & & & & & & & & & case DbType.AnsiString:& & & & & & & & & & case DbType.AnsiStringFixedLength:& & & & & & & & & & case DbType.StringFixedLength:& & & & & & & & & & & & para.Size =& & & & & & & & & & & && & & & & & & & & & default:& & & & & & & & & & & & para.Size = size / 2;//&& & & & & & & & & & & && & & & & & & & }& & & & & & }& & & & & & para.Direction =在对多数据库支持时,我们产生了一个参数,然后赋参数名,参数值,参数类型,参数大小和参数指向。而Mysql竟然在对Size赋值的问题处理上有些Bug。经过测试,其实数据库类型对Size的赋值是正常的,唯Mysql有问题,只能说Mysql的Dll在处理的时候有点不小心。秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统"2010年7月 总版技术专家分月排行榜第二2010年6月 总版技术专家分月排行榜第二
2010年5月 总版技术专家分月排行榜第三
2011年4月 PowerBuilder大版内专家分月排行榜第二2010年12月 PowerBuilder大版内专家分月排行榜第二2009年7月 PowerBuilder大版内专家分月排行榜第二2009年4月 PowerBuilder大版内专家分月排行榜第二
2010年8月 PowerBuilder大版内专家分月排行榜第三
2006年12月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。深入浅析mybatis oracle BLOB类型字段保存与读取
作者:烟火_
字体:[ ] 类型:转载 时间:
本文给大家浅析mybatis oracle blob类型字段的保存与读取,blob字段是指二进制大对象,用来存储大量文本数据。感兴趣的朋友一起学习吧
一、BLOB字段
  BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存图片、文件等二进制类型的数据。
二、使用mybatis操作blob
  1、表结构如下:
create table BLOB_FIELD
VARCHAR2(64 BYTE)
VARCHAR2(64 BYTE)
TAB_PKID_VALUE
VARCHAR2(64 BYTE)
CLOB_COL_NAME
VARCHAR2(64 BYTE)
CLOB_COL_VALUE
constraint PK_BLOB_FIELD primary key (ID)
  2、实体代码如下:
package com.test.
import java.sql.C
public class BlobField {
private String tabN// 表名
private String tabPkidV// 主键值
private String blobColN// 列名
private byte[] blobColV// 列值 clob类型
public String getTabName() {
return tabN
public void setTabName(String tabName) {
this.tabName = tabN
public String getTabPkidValue() {
return tabPkidV
public void setTabPkidValue(String tabPkidValue) {
this.tabPkidValue = tabPkidV
public String getBlobColName() {
return blobColN
public void setBlobColName(String blobColName) {
this.blobColName = blobColN
public byte[] getBlobColValue() {
return blobColV
public void setBlobColValue(byte[] blobColValue) {
this.blobColValue = blobColV
  3、mybatis sql代码如下:
&?xml version="." encoding="UTF-" ?&
&!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd"&
&mapper namespace="com.test.dao.BlobFieldDao"&
&sql id="blobFieldColumns"&
a.ID AS id,
a.TAB_NAME AS tabName,
a.TAB_PKID_VALUE AS tabPkidValue,
a.BLOB_COL_NAME AS blobColName,
a.BLOB_COL_VALUE AS blobColValue
&sql id="blobFieldJoins"&
&select id="get" resultType="blobField"&
&include refid="blobFieldColumns" /&
FROM BLOB_FIELD a
&include refid="blobFieldJoins" /&
WHERE a.ID = #{id}
&select id="findList" resultType="blobField"&
&include refid="blobFieldColumns" /&
FROM BLOB_FIELD a
&include refid="blobFieldJoins" /&
&insert id="insert"&
INSERT INTO BLOB_FIELD(
TAB_NAME ,
TAB_PKID_VALUE ,
BLOB_COL_NAME ,
BLOB_COL_VALUE
) VALUES (
#{tabName},
#{tabPkidValue},
#{blobColName},
#{blobColValue,jdbcType=BLOB}
&update id="update"&
UPDATE BLOB_FIELD SET
TAB_NAME = #{tabName},
TAB_PKID_VALUE = #{tabPkidValue},
BLOB_COL_NAME = #{blobColName},
BLOB_COL_VALUE = #{blobColValue}
WHERE ID = #{id}
&delete id="delete"&
DELETE FROM BLOB_FIELD
WHERE ID = #{id}
  3、controller代码如下:
  a、保存BLOB字段代码
* 附件上传
* @param testId
* @param request
* @throws UnsupportedEncodingException
@RequiresPermissions("exc:exceptioninfo:feedback")
@RequestMapping(value = "attachment", method = RequestMethod.POST)
@ResponseBody
public Map&String, Object& uploadAttachment(@RequestParam(value = "testId", required = true) String testId,
HttpServletRequest request)
throws UnsupportedEncodingException {
Map&String, Object& result = new HashMap&String, Object&();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)
// 获得文件
MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 与前端设置的fileDataName属性值一致
String filename = multipartFile.getOriginalFilename();// 文件名称
InputStream is =
//读取文件流
is = multipartFile.getInputStream();
byte[] bytes = FileCopyUtils.copyToByteArray(is);
BlobField blobField = new BlobField();
blobField.setTabName("testL");
blobField.setTabPkidValue(testId);
blobField.setBlobColName("attachment");
blobField.setBlobColValue(bytes);
//保存blob字段
this.testService.save(blobField, testId, filename);
result.put("flag", true);
result.put("attachmentId", blobField.getId());
result.put("attachmentName", filename);
} catch (IOException e) {
e.printStackTrace();
result.put("flag", false);
} finally {
IOUtils.closeQuietly(is);
  b、读取BLOB字段
* 下载附件
* @param attachmentId
@RequiresPermissions("exc:exceptioninfo:view")
@RequestMapping(value = "download", method = RequestMethod.GET)
public void download(@RequestParam(value = "attachmentId", required = true) String attachmentId,
@RequestParam(value = "attachmentName", required = true) String attachmentName, HttpServletRequest
request, HttpServletResponse response) {
ServletOutputStream out =
response.reset();
String userAgent = request.getHeader("User-Agent");
byte[] bytes = userAgent.contains("MSIE") ? attachmentName.getBytes() : attachmentName.getBytes("UTF-
"); // fileName.getBytes("UTF-")处理safari的乱码问题
String fileName = new String(bytes, "ISO--");
// 设置输出的格式
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "fileName=" + URLEncoder.encode(attachmentName,
BlobField blobField = this.blobFieldService.get(attachmentId);
//获取blob字段
byte[] contents = blobField.getBlobColValue();
out = response.getOutputStream();
//写到输出流
out.write(contents);
out.flush();
} catch (IOException e) {
e.printStackTrace();
  本例子将文件上传并保存到BLOB类型字段字段,下载的时候读取BLOB字段,并写入成输出流。
以上就是本文的全部叙述,希望对大家有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具MySQL blob字段存储图片操作示例_Linux编程_Linux公社-Linux系统门户网站
你好,游客
MySQL blob字段存储图片操作示例
来源:Linux社区&
作者:zhongweijian
create&table&view(id&int&unsigned&NOT&NULL&AUTO_INCREMENT,&catid&int,title&varchar(256),picture&MEDIUMBLOB,&content&TEXT,PRIMARY&KEY&(id));&&java类操作:
import&java.awt.I&&
import&java.io.*;&&
import&java.nio.ByteB&&
import&java.sql.PreparedS&&
import&java.sql.ResultS&&
import&java.sql.SQLE&&
import&java.util.logging.L&&
import&java.util.logging.L&&
import&javax.swing.ImageI&&
import&org.bean.V&&
public&class&ViewPointDao&{&&
&&&&public&static&View&getView(Integer&catId)&{&&
&&&&&&&&View&view&=&new&View();&&
&&&&&&&&try&{&&
&&&&&&&&&&&&String&sql2&=&"SELECT&title,&content,&picture&FROM&view&where&catid=?&limit&1";&&
&&&&&&&&&&&&PreparedStatement&stmt2&=&BaseDaoFactory.getInstance().prepareStatement(sql2);&&
&&&&&&&&&&&&stmt2.setInt(1,&catId);&&
&&&&&&&&&&&&ResultSet&resultSet&=&stmt2.executeQuery();&&
&&&&&&&&&&&&while&(resultSet.next())&{&&
&&&&&&&&&&&&&&&&String&name&=&resultSet.getString(1);&&
&&&&&&&&&&&&&&&&String&description&=&resultSet.getString(2);&&
&&&&&&&&&&&&&&&&ByteBuffer&bb&=&ByteBuffer.allocate(<FONT color=#c&*&<FONT color=#c);&&
&&&&&&&&&&&&&&&&byte[]&buffer&=&new&byte[1];&&
&&&&&&&&&&&&&&&&InputStream&is&=&resultSet.getBinaryStream(3);&&
&&&&&&&&&&&&&&&&while&(is&!=&null&&&&is.read(buffer)&&&0)&{&&
&&&&&&&&&&&&&&&&&&&&bb.put(buffer);&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&ImageIcon&icon&=&new&ImageIcon(bb.array());&&
&&&&&&&&&&&&&&&&view.setImage(icon.getImage());&&
&&&&&&&&&&&&&&&&view.setTitle(name);&&
&&&&&&&&&&&&&&&&view.setContent(description);&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(IOException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&catch&(SQLException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&&
&&&&&&&&return&null;&&
&&&&public&static&boolean&addView(View&view)&{&&
&&&&&&&&FileInputStream&fis&=&null;&&
&&&&&&&&try&{&&
&&&&&&&&&&&&if&(exit(view.getCatId()))&{&&
&&&&&&&&&&&&&&&&return&update(view);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&String&sql&=&"INSERT&INTO&view&(title,&content,&catid,&picture)&VALUES&(?,&?,&?,&?)";&&
&&&&&&&&&&&&PreparedStatement&stmt&=&BaseDaoFactory.getInstance().prepareStatement(sql);&&
&&&&&&&&&&&&stmt.setString(1,&view.getTitle());&&
&&&&&&&&&&&&stmt.setString(2,&view.getContent());&&
&&&&&&&&&&&&stmt.setInt(3,&view.getCatId());&&
&&&&&&&&&&&&if&(view.getImageFile()&!=&null)&{&&
&&&&&&&&&&&&&&&&File&image&=&new&File(view.getImageFile());&&
&&&&&&&&&&&&&&&&fis&=&new&FileInputStream(image);&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&stmt.setBinaryStream(4,&fis,&(int)&image.length());&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&stmt.setBinaryStream(4,&null,&0);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&int&count&=&stmt.executeUpdate();&&
&&&&&&&&&&&&if&(count&&&0)&{&&
&&&&&&&&&&&&&&&&return&true;&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&return&false;&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(IOException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&catch&(SQLException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&finally&{&&
&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&&&&&if&(fis&!=&null)&{&&
&&&&&&&&&&&&&&&&&&&&fis.close();&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&catch&(IOException&ex)&{&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&return&false;&&
&&&&public&static&boolean&update(View&view)&{&&
&&&&&&&&FileInputStream&fis&=&null;&&
&&&&&&&&try&{&&
&&&&&&&&&&&&String&sql&=&"update&view&set&title=&?&,content=&?&"&+&(view.getImageFile()&!=&null&?&(",picture=&?&")&:&"&")&+&"where&catid=&?&";&&
&&&&&&&&&&&&PreparedStatement&stmt&=&BaseDaoFactory.getInstance().prepareStatement(sql);&&
&&&&&&&&&&&&stmt.setString(1,&view.getTitle());&&
&&&&&&&&&&&&stmt.setString(2,&view.getContent());&&
&&&&&&&&&&&&if&(view.getImageFile()&!=&null)&{&&
&&&&&&&&&&&&&&&&stmt.setInt(4,&view.getCatId());&&
&&&&&&&&&&&&&&&&File&image&=&new&File(view.getImageFile());&&
&&&&&&&&&&&&&&&&fis&=&new&FileInputStream(image);&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&stmt.setBinaryStream(3,&fis,&(int)&image.length());&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&stmt.setInt(3,&view.getCatId());&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&int&count&=&stmt.executeUpdate();&&
&&&&&&&&&&&&if&(count&&&0)&{&&
&&&&&&&&&&&&&&&&return&true;&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&return&false;&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(IOException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&catch&(SQLException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&finally&{&&
&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&&&&&if&(fis&!=&null)&{&&
&&&&&&&&&&&&&&&&&&&&fis.close();&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&catch&(IOException&ex)&{&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&return&false;&&
&&&&public&static&boolean&exit(Integer&catId)&{&&
&&&&&&&&try&{&&
&&&&&&&&&&&&String&sql2&=&"SELECT&title,&content,&picture&FROM&view&where&catid=?&limit&1";&&
&&&&&&&&&&&&PreparedStatement&stmt2&=&BaseDaoFactory.getInstance().prepareStatement(sql2);&&
&&&&&&&&&&&&stmt2.setInt(1,&catId);&&
&&&&&&&&&&&&ResultSet&resultSet&=&stmt2.executeQuery();&&
&&&&&&&&&&&&while&(resultSet.next())&{&&
&&&&&&&&&&&&&&&&return&true;&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(SQLException&ex)&{&&
&&&&&&&&&&&&Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE,&null,&ex);&&
&&&&&&&&}&&
&&&&&&&&return&false;&&
import&java.awt.I&&
public&class&View&{&&
&&&&private&String&&&
&&&&private&String&&&
&&&&private&Image&&&
&&&&private&String&imageF&&
&&&&private&int&catId;&&
&&&&public&int&getCatId()&{&&
&&&&&&&&return&catId;&&
&&&&public&void&setCatId(int&catId)&{&&
&&&&&&&&this.catId&=&catId;&&
&&&&public&String&getContent()&{&&
&&&&&&&&return&&&
&&&&public&void&setContent(String&content)&{&&
&&&&&&&&this.content&=&&&
&&&&public&Image&getImage()&{&&
&&&&&&&&return&&&
&&&&public&void&setImage(Image&image)&{&&
&&&&&&&&this.image&=&&&
&&&&public&String&getTitle()&{&&
&&&&&&&&return&&&
&&&&public&void&setTitle(String&title)&{&&
&&&&&&&&this.title&=&&&
&&&&public&String&getImageFile()&{&&
&&&&&&&&return&imageF&&
&&&&public&void&setImageFile(String&imageFile)&{&&
&&&&&&&&this.imageFile&=&imageF&&
相关资讯 & & &
& (09/25/:24)
& (02/07/:50)
& (02/01/:30)
& (04/27/:16)
& (02/01/:53)
& (01/28/:24)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款&&&&【Oracle BLOB】存储的图片批量导出到文件夹
【Oracle BLOB】存储的图片批量导出到文件夹
使用PL/SQL脚本将Oracle的Blob字段中存储的图片批量导出到文件夹,可在文件夹中直接查看。
若举报审核通过,可奖励20下载分
被举报人:
skyonline0
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
数据库下载排行}

我要回帖

更多关于 hibernate存储blob 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信