java上传文件通过mybatis存储到数据库的BLOB格式中
blob字段存储文件并读取

blob字段存储文件并读取文档或图片等文件在数据库表中以blob字段存储并读取的方法:1、将文件以blob形式存放到数据库:参考/topics/330265813CREATE TABLE yuser (ID number,photo BLOB);--首先要创建目录将需要存放到数据库的文件放到该目录中create or replace directory images as 'D:\images';SELECT *FROM dba_directories--然后将这些文件读取存放到数据库declarel_bfilebfile;l_blob blob;begininsert into yuser(ID,photo) values(1,empty_blob())return photo into l_blob;l_bfile:=bfilename('IMAGES','...test.doc');dbms_lob.open(l_bfile,dbms_lob.file_readonly);dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob.getlength(l_bfile)); dbms_lob.close(l_bfile);commit;end;2.Oracle导出Blob存储的图像或文件到指定目录:参考/dayrl/articles/1595879.html--首先要先创建这些文件读取后存放的目录create or replace directory images2 as 'D:\images2';CREATE OR REPLACE PROCEDURE b_wzzp_dump(locationno INNUMBER,filename IN VARCHAR2) ISl_file utl_file.file_type;l_buffer RAW(32767);l_amount BINARY_INTEGER := 32767;l_pos INTEGER := 1;l_blob BLOB;l_blob_len INTEGER;BEGINSELECT photo INTO l_blob FROM yuser WHERE id = locationno;l_blob_len := dbms_lob.getlength(l_blob);l_file := utl_file.fopen('IMAGES2', filename, 'w',/*l_blob_len*/32767);WHILE l_pos<l_blob_lenLOOPdbms_lob.read(l_blob, l_amount, l_pos, l_buffer);utl_file.put_raw(l_file, l_buffer, TRUE);l_pos := l_pos + l_amount;END LOOP;utl_file.fclose(l_file);EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);IF utl_file.is_open(l_file) THENutl_file.fclose(l_file);END IF;RAISE;END b_wzzp_dump;execute b_wzzp_dump(locationno =>指定表中的哪个文件,filename => filename);上述用到的一些包过程说明:dbms_lob.read——读取文件dbms_lob.read(lob_loc => blob字段,amount =>每次读取的字符数,offset =>从哪开始读取,buffer =>缓存量);dbms_lob.getlength——获取blob对象的长度dbms_lob.getlength(lob_loc =>对应的bLOB字段);utl_file.fopen——打开文件utl_file.fopen(location =>文件所在的目录,filename =>文件名称,open_mode =>打开方式(R/W/A) ,max_linesize =>文件每行最大的字符数,不能超过32767,最小为1,默认为null,表示操作系统运行时指定的值);注:max_linesize不能超过32767,如果超过则提示“ORA-29287: 最大行大小无效”utl_file.put_raw——将raw数据写入文件utl_file.put_raw(file =>文件类型,buffer =>存放raw数据的缓存,autoflush =>是自动刷新缓冲区数据);utl_file.is_open——判断文件是否打开,返回true或falseutl_file.is_open(file =>文件名);utl_file.fclose——关闭文件utl_file.fclose(file =>文件名);。
blob的java类型

blob的java类型摘要:一、前言二、Blob 的定义1.Blob 的概念2.Blob 与Java 的关系三、Blob 的Java 类型1.Blob 接口2.实现Blob 接口的类3.Blob 与数据库操作四、Blob 的应用场景1.文件存储2.二进制数据存储五、总结正文:一、前言在Java 编程中,Blob(Binary Large OBjects)是一种用于存储二进制数据的类型,广泛应用于数据库操作和文件处理。
本文将详细介绍Blob 的Java 类型以及其应用场景。
二、Blob 的定义1.Blob 的概念Blob 是Java 中的一种数据类型,用于存储大量的二进制数据。
它可以包含文本、图像、音频、视频等各种格式的数据。
Blob 类型继承自Object 类,因此它是一个对象类型。
2.Blob 与Java 的关系在Java 中,Blob 类型是JDBC(Java Database Connectivity)API 的一部分,用于处理数据库中的二进制数据。
通过Blob 类型,Java 程序可以方便地将二进制数据存储到数据库中,并从数据库中读取二进制数据。
三、Blob 的Java 类型1.Blob 接口Blob 接口是Java 中定义的一个接口,它包含了一些用于操作二进制数据的常用方法,如getBytes、setBytes、length 等。
任何实现了Blob 接口的类都可以被视为Blob 类型。
2.实现Blob 接口的类在Java 中,有多个类实现了Blob 接口,如ByteBlob、CharBlob、ShortBlob、LongBlob 等。
这些类分别用于存储字节、字符、短整数、长整数等类型的二进制数据。
此外,还可以通过自定义类来实现Blob 接口,以满足特定需求。
3.Blob 与数据库操作在Java 中,通过JDBC API,可以使用Blob 类型进行数据库操作。
例如,可以将Blob 对象作为参数传递给PreparedStatement 对象的setBlob 方法,将二进制数据存储到数据库中;也可以使用ResultSet 对象的getBlob 方法,从数据库中读取二进制数据并将其存储到Blob 对象中。
把文件作为BLOBs存入数据库

把文件作为BLOBs存入数据库许多数据库管理系统象Ms Access或者SQL Server将允许你将任意文件存为"binary large objects"(BLOBs)。
一个MS Access表格能够在OLE Object型的数据字段中存放二进制文件。
在SQL Server中,相应的数据类型是IMAGE。
存放的文件以后能够重新取出供下载,或者用ADO 显示。
AspUpload让你只使用短短一行代码就能把上传文件存入数据库!让我们看看第三组示例文件。
文件 Test3.htm几乎和Test1.htm相同,因此我们不再把它显示在这里。
文件UploadScript4.asp 很值得我们注意:<HTML><BODY><%Set Upload = Server.CreateObject("Persits.Upload.1")Upload.Save "c:\upload"On Error Resume NextFor Each File in Upload.FilesFile.ToDatabase "DSN=data;UID=sa;PWD=xxx;", "insert into Blobs(id, Path, BigBlob) values(12, ''" & File.Path & "'', ?)"if Err <> 0 ThenResponse.Write "Error saving the file: " & Err.DescriptionElseFile.DeleteResponse.Write "Success!"End IfNext%></BODY></HTML>这一行On Error Resume Next指示asp当以外发生时,不要显示错误信息,只将意外代码和描述存放到内建的Err对象,并且继续脚本的执行。
Javamysqlblob数据读写操作

Javamysqlblob数据读写操作package com.lw.database;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/*** CREATE: CREATE TABLE IDCard ( id char(18),pic BLOB);* @author fhadmin* from */public class LOBTest {protected static final String DEFAULT_URL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8"; protected static final String DRIVER_NAME = "com.mysql.jdbc.Driver";private Connection connection = null;public LOBTest() throws ClassNotFoundException, SQLException {Class.forName(DRIVER_NAME);connection = DriverManager.getConnection(DEFAULT_URL, "user", "password");}public void insert(String id,String path) throws SQLException, IOException {PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO IDCard VALUES (?,?)");preparedStatement.setString(1, id);FileInputStream fileInputStream = new FileInputStream(path);preparedStatement.setBlob(2, fileInputStream,fileInputStream.available());preparedStatement.execute();}public void get(String id) throws SQLException, IOException {PreparedStatement preparedStatement = connection.prepareStatement("SELECT pic FROM IDCard WHERE id = ?");preparedStatement.setString(1, id);ResultSet results = preparedStatement.executeQuery();while(results.next()) {FileOutputStream outputStream = new FileOutputStream("/Users/liuwei/temp.png");InputStream inputStream = results.getBinaryStream(1);int num = -1;while((num=inputStream.read())!=-1) {outputStream.write(num);}outputStream.flush();inputStream.close();outputStream.close();}}public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {LOBTest test = new LOBTest();test.insert("78907656784323", "/Users/liuwei/Documents/bt_next_nor.png");test.get("78907656784323");}}注意: MySQL的四种BLOB类型 类型⼤⼩(单位:字节) TinyBlob 最⼤ 255B Blob 最⼤ 65K MediumBlob 最⼤ 16M LongBlob 最⼤ 4G插⼊图像的时候,注意下图像⼤⼩,图像超过该类型所能容纳的最⼤字节的时候,会报错⼯作流模块1.模型管理:web在线流程设计器、预览流程xml、导出xml、部署流程2.流程管理:导⼊导出流程资源⽂件、查看流程图、根据流程实例反射出流程模型、激活挂起3.运⾏中流程:查看流程信息、当前任务节点、当前流程图、作废暂停流程、指派待办⼈4.历史的流程:查看流程信息、流程⽤时、流程状态、查看任务发起⼈信息5.待办任务:查看本⼈个⼈任务以及本⾓⾊下的任务、办理、驳回、作废、指派⼀下代理⼈6.已办任务:查看⾃⼰办理过的任务以及流程信息、流程图、流程状态(作废驳回正常完成)注:当办理完当前任务时,下⼀任务待办⼈会即时通讯收到新任务消息提醒,当作废和完结任务时,任务发起⼈会收到站内信消息通知。
mysql blob java语句

mysql blob java语句MySQL的Blob数据类型是用于存储二进制数据的字段类型。
在Java中,我们可以使用预备语句(PreparedStatement)来插入或更新Blob类型的数据。
以下是使用Java语句处理MySQL Blob类型的示例:1. 将文件插入到Blob字段中```// 假设 'conn' 为MySQL连接对象String sql = 'INSERT INTO my_table (id, file_blob) VALUES (?, ?)';PreparedStatement statement =conn.prepareStatement(sql);// id为整数类型,file为文件类型statement.setInt(1, 1);File file = new File('file_path');FileInputStream inputStream = new FileInputStream(file); statement.setBinaryStream(2, inputStream, (int)file.length());statement.executeUpdate();```2. 从Blob字段中读取文件```String sql = 'SELECT file_blob FROM my_table WHERE id = ?'; PreparedStatement statement =conn.prepareStatement(sql);statement.setInt(1, 1);ResultSet result = statement.executeQuery();if (result.next()) {InputStream inputStream =result.getBinaryStream('file_blob');File file = new File('new_file_path');FileOutputStream outputStream = newFileOutputStream(file);byte[] buffer = new byte[1024];int bytesRead = -1;while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead);}outputStream.close();inputStream.close();}```在上面的示例中,我们使用setBinaryStream()方法将文件插入到Blob字段中。
mybatis+springMVC操作存取blob

mybatis+springMVC操作存取blob基于springMVC+mybatis+xheditor存取内容,图⽚上传功能暂时没做,参考:⼀、Content实体类:import java.io.Serializable;import java.sql.Blob;import java.util.Date;public class Content implements Serializable{private static final long serialVersionUID = 1L;private String id ;private String org ;//来源private String title ;//标题public Blob content;//内容private Date publishDate;//发布时间//getter/setter省略}mysql 数据库设计:CREATE TABLE `content` (`id` varchar(100) NOT NULL COMMENT '主键id',`org` varchar(100) DEFAULT NULL COMMENT '来源',`title` varchar(100) DEFAULT NULL COMMENT '⽂章标题',`content` blob NOT NULL COMMENT '内容',`publish_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '发布时间', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8⼆、contentDao:import java.util.Map;public interface ContentDao {//保存内容public void saveContent(Map<String, Object> map);//查询内容public Map<String, Object> findContents(String id);}ContentMapper.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.3//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.wa.xwolf.sblog.dao.ContentDao"><insert id="saveContent" parameterType="java.util.Map" statementType="PREPARED">insert into content (id,org,title,content,publish_date) values (#{id},#{org},#{title},#{content,jdbcType=BLOB},#{publishDate}) </insert><select id="findContents" parameterType="ng.String" resultType="java.util.Map" statementType="PREPARED">select content from content where id=#{id}</select></mapper>三、controller:package com.wa.xwolf.sblog.controller;import java.io.IOException;import java.io.Writer;import java.util.Date;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.rowset.serial.SerialBlob;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSONObject;import .apache.bcel.internal.generic.NEW;import com.wa.xwolf.sblog.dao.ContentDao;import monUtils;import com.wa.xwolf.sblog.util.UUIDUtils;/*** 整合xheditor测试案例**/@Controllerpublic class XheditorController {private Logger log = Logger.getLogger(XheditorController.class);@AutowiredContentDao contentDao;@RequestMapping("/xheditor")public String toBlog(){return "editor/xheditor";}/*** xheditor上传图⽚* @param request* @param response* @param writer*/@RequestMapping("/upload")public void uploadImage(@RequestParam("filedata") MultipartFile file,HttpServletRequest request,HttpServletResponse response, Writer writer){//String fileName = file.getOriginalFilename();}/*** 保存内容* @param request* @param response* @param writer*/@RequestMapping("/saveContent")public void save(HttpServletRequest request,HttpServletResponse response,Writer writer) {String title = request.getParameter("title");String org = request.getParameter("org");String content = request.getParameter("content");java.sql.Blob blob=null;JSONObject object = new JSONObject();try {blob = new SerialBlob(content.getBytes());Map<String, Object> map = new HashMap<String, Object>();map.put("id",UUIDUtils.getLowerCase());map.put("title",title);map.put("org", org);map.put("content",blob);map.put("publishDate", new Date());contentDao.saveContent(map);object.put("result", true);object.put("msg","保存成功");} catch (Exception e) {e.printStackTrace();(new Date()+"内容保存失败,error Message ="+e.getMessage());object.put("result", false);object.put("msg","保存失败");} finally{try {writer.write(object.toJSONString());} catch (IOException e) {e.printStackTrace();}}}/*** 列出内容信息* @param request* @param response* @param model* @return*/@RequestMapping("/listContent")public ModelAndView toList(HttpServletRequest request,HttpServletResponse response,Model model){ModelAndView view = new ModelAndView();Map<String, Object > map = contentDao.findContents("0cfe4a5b991743fea7e18df94c871d48");//以byte[] ⽅式取出blog类型的数据String list = new String((byte[])map.get("content"));model.addAttribute("content",list);view.setViewName("editor/content_list");return view;}}jsp页⾯:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>xheditor整合案例</title><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.3.js"></script><script type="text/javascript" src="${pageContext.request.contextPath}/js/xheditor/xheditor-1.2.1.min.js"></script><script type="text/javascript" src="${pageContext.request.contextPath}/js/xheditor/xheditor_lang/zh-cn.js"></script><style type="text/css">/* 增加插⼊代码⼯具图标 */.btnCode {background: transparent url(images/code.gif) no-repeat 0px 0px;background-position: 3px -2px;}</style><script type="text/javascript">$(function(){/*加⼊扩展的插⼊代码的功能*/var plugins={Code:{c:'btnCode',t:'插⼊代码',h:1,e:function(){var _this=this;var htmlCode="<div>编程语⾔<select id='xheCodeType'>";htmlCode+="<option value='html'>HTML/XML</option>";htmlCode+="<option value='js'>Javascript</option>";htmlCode+="<option value='css'>CSS</option>";htmlCode+="<option value='php'>PHP</option>";htmlCode+="<option value='java'>Java</option>";htmlCode+="<option value='py'>Python</option>";htmlCode+="<option value='pl'>Perl</option>";htmlCode+="<option value='rb'>Ruby</option>";htmlCode+="<option value='cs'>C#</option>";htmlCode+="<option value='c'>C++/C</option>";htmlCode+="<option value='vb'>VB/ASP</option>";htmlCode+="<option value=''>其它</option>";htmlCode+="</select></div><div>";htmlCode+="<textarea id='xheCodeValue' wrap='soft' spellcheck='false' style='width:300px;height:100px;' />";htmlCode+="</div><div style='text-align:right;'><input type='button' id='xheSave' value='确定' /></div>";var jCode=$(htmlCode),jType=$('#xheCodeType',jCode),jValue=$('#xheCodeValue',jCode),jSave=$('#xheSave',jCode); jSave.click(function(){_this.loadBookmark();_this.pasteHTML('<pre class="brush: '+jType.val()+'">'+_this.domEncode(jValue.val())+'</pre> ');_this.hidePanel();return false;});_this.saveBookmark();_this.showDialog(jCode);}},};$('#content').xheditor({plugins:plugins,//使⽤我们定义的插件tools : 'full',width:980,height:450,skin : 'default',upImgUrl : "${pageContext.request.contextPath}/upload.htm",upImgExt : "jpg,jpeg,png,gif",html5Upload : false,//上传图⽚的配置onUpload : upload,loadCSS:'<style>pre{margin-left:2em;border-left:3px solid #CCC;padding:0 1em;}</style>', });//回调函数function upload(data){}});function save(){$.post("${pageContext.request.contextPath}/saveContent.htm",{"org":$("#org").val,"content":$("#content").val,"title":$("#title").val},function(data){alert(data);},"json");}</script></head><body><form action="${pageContext.request.contextPath}/saveContent.htm" method="post"><table><tr><td>来源:</td><td><input id="org" name="org"></td></tr><tr><td>标题:</td><td><input id="title" name="title"></td></tr></table><textarea id="content" name="content"></textarea><input type="submit" value="发布"></form></body></html>。
blob的java类型 -回复

blob的java类型-回复Blob的Java类型是java.sql.Blob。
该类型用于表示对数据库中二进制数据的引用,常用于存储大型文件(例如图像、音频和视频)。
在Java编程中,Blob对象可以通过以下几个步骤进行创建、读写和操作:第一步:创建Blob对象要创建Blob对象,首先需要获取数据库连接,并通过该连接创建PreparedStatement对象。
然后,可以使用setBlob方法将二进制数据插入到Blob对象中。
例如,假设我们有一个名为"image"的列用于存储图像数据,我们可以按照以下步骤创建Blob对象:javaConnection connection = DriverManager.getConnection(url, username, password);PreparedStatement statement =connection.prepareStatement("INSERT INTO table_name (image) VALUES (?)");File imageFile = new File("path/to/image.jpg");InputStream inputStream = new FileInputStream(imageFile); statement.setBlob(1, inputStream);statement.executeUpdate();在上述代码中,我们首先创建了数据库连接和PreparedStatement对象。
然后,通过使用setBlob方法,我们将输入流中的数据插入到Blob对象中,并执行SQL语句将Blob对象插入到数据库中。
第二步:读取Blob对象读取Blob对象的过程略有不同。
要从数据库中读取Blob对象,我们可以使用ResultSet对象,并调用getBlob方法获取Blob对象的引用。
mybatis存取Oracle数据库中Blob类型数据

mybatis存取Oracle数据库中Blob类型数据定义实体类映射实体字段类型为String@TableField("DATASTR")private String datastr;创建数据类型映射转换类package com.zz.spxt.mapper;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import java.io.ByteArrayInputStream;import java.io.UnsupportedEncodingException;import java.sql.*;/*** @Author: yang* @Date: Create in 2020/6/18* @Description:* @Modify By:*/public class BlobTypeHandle extends BaseTypeHandler<String> {private static final String DEFAULT_CHARSET = "UTF-8";@Overridepublic void setNonNullParameter( PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType ) throws SQLException {ByteArrayInputStream bis;try{/* 把String转化成byte流 */bis = new ByteArrayInputStream( s.getBytes( DEFAULT_CHARSET ) );} catch ( UnsupportedEncodingException e ){throw new RuntimeException( "Blob Encoding Error!" );}preparedStatement.setBinaryStream( i, bis, s.length() );}@Overridepublic String getNullableResult( ResultSet resultSet, String s ) throws SQLException{Blob blob = resultSet.getBlob( s );byte[] returnValue = null;String result = null;if ( null != blob ){returnValue = blob.getBytes( 1, (int) blob.length() );}try{if ( null != returnValue ){/* 把byte转化成string */result = new String( returnValue, DEFAULT_CHARSET );}} catch ( UnsupportedEncodingException e ){throw new RuntimeException( "Blob Encoding Error!" );}return(result);}@Overridepublic String getNullableResult( ResultSet resultSet, int i ) throws SQLException{Blob blob = resultSet.getBlob( i );byte[] returnValue = null;String result = null;if ( null != blob ){returnValue = blob.getBytes( 1, (int) blob.length() );}try{if ( null != returnValue ){result = new String( returnValue, DEFAULT_CHARSET );}} catch ( UnsupportedEncodingException e ){throw new RuntimeException( "Blob Encoding Error!" );}return(result);}@Overridepublic String getNullableResult( CallableStatement callableStatement, int i ) throws SQLException{String result = null;Blob blob = callableStatement.getBlob( i );byte[] returnValue = null;if ( null != blob ){returnValue = blob.getBytes( 1, (int) blob.length() );}try{/* 把byte转化成string */if ( null != returnValue ){result = new String( returnValue, DEFAULT_CHARSET );}} catch ( UnsupportedEncodingException e ){throw new RuntimeException( "Blob Encoding Error!" );}return(result);}}在mapper.xml 映射中指定转换类<result column="UPDATE_DATE" property="updateDate" /><result column="UPDATE_UID" property="updateUid" /><result column="DATASTR" property="datastr" typeHandler="com.zz.spxt.mapper.BlobTypeHandle"/>使⽤在使⽤过程中按照String 类型数据操作即可,数据处理转换在⾃定义类中已经完成了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上传文件通过mybatis存储到数据库的BLOB格式中
HTML 页面需要设置一个文件框
[html]view plaincopy
1.<form enctype="multipart/form-data">
2.
3.<input type="file"name="file"/>
4.
5.</form>
上传操作方法:
[java]view plaincopy
1.public int doUpload() throws Exception {
2.
3. Map<String, Object> param = new HashMap<String,Object>();
4. ServletFileUpload servletFileUpload = new ServletFileUpload();
5. FileItemIterator itr = servletFileUpload.getItemIterator(mSGA.getCur
rentRequest());
6.while (itr.hasNext()) {
7. FileItemStream fi = itr.next();
8.if ("file".equals(fi.getFieldName())) {
9. InputStream is = fi.openStream();
10.byte[] b = FileCopyUtils.copyToByteArray(is); //FileCopyU
tils 为spring下的一个工具类。
11.if (b == null || b.length == 0) { return0; }
12. param.put("FILE", b);//此处所用的参数类型为 byte[]
13. }
14. }
15.
16.//////////各种参数放入param你懂得。
17.
18.//dao 为个人封装的工具类。
19.
20. param.put("ID", dao.getSequence("SEQ_NAME"));
21.
22.return dao.insert("mapper_id", param);
23. }
mapper文件对应的sql设置
[html]view plaincopy
1.<insert id="mapper_id"parameterType="Map">
2. INSERT INTO DEMO
3. (ID,FILE)
4. VALUES
5. (#{ID}, #{FILE,jdbcType=BLOB}) --此处需要加上jdbcType=BLOB
6.</insert>
通过MyBatis实现图片数据的存储与读取
开发环境:
Mybatis:3.0.5
MySQL:5.x
1. 数据库Scheme
--
-- Table structure for table `user_graphic_t`
--
DROP TABLE IF EXISTS `user_graphic_t`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user_graphic_t` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`graphic_data` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=360 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
2. Mapper文件
<resultMap id="userGraphicMap" type="userGraphicVo">
<id column="id" property="id" jdbcType="DECIMAL" />
<result column="graphic_data" property="graphicData" jdbcType="BLOB" />
</resultMap>
<sql id="resultColumn">
id,graphic_data
</sql>
<insert id="insertUserGraphic" parameterType="userGraphicVo">
INSERT INTO user_graphic_t (
<include refid="resultColumn" />
)
values (
#{id},,#{graphicData}
)
</insert>
<select id="selectUserGraphic" parameterType="ng.Long" resultMap="userGraphicMap">
SELECT
<include refid="resultColumn" />
fromuser_graphic_t WHERE
id=#{id}
order by id desc
</select>
3. 映射VO:
public class UserGraphicVo {
private Long id;
private byte[] graphicData;
//get/set方法
}
4. DAO层调用
public void addUserGraphic(UserGraphicVouserGraphicVo) {
getSqlSessionTemplate().insert("userGraphicVo.insertUserGraphic", userGraphicVo);
}
5. JSP页面展示图片
<imgsrc="${ctxPath}/apps/showImage.action?id=${userGraphic.id}" />
6. Action处理
public void showReportImage() {
response.setContentType("image/jpeg");
if (!"".equals(id)) {
List<UserGraphicVo> list =
userGraphicService.findUserGraphicVoById(id);
if(null != list && !list.isEmpty()){
OutputStreamos = null;
try {
os = response.getOutputStream();
os.write(list.get(0).getGraphicData());
os.flush();
} catch (IOException e) {
("读取文件出错!" +
e.getMessage());
} finally {
if(null != os){
try {
os.close();
} catch (IOException e) {
("关闭文件输出流出错!" + e.getMessage());
}
}
}
}
}
}
7. 参考资料
/blog/1630672
/pzhtpf/article/details/7400606
/admin/blogs/1630698
/dcjob/blog/item/cd0cb809d8e43e3ce824886a.html。