java上传文件通过mybatis存储到数据库的BLOB格式中

合集下载

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的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存入数据库

把文件作为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数据读写操作

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语句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

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类型-回复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类型数据

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 类型数据操作即可,数据处理转换在⾃定义类中已经完成了。

mybatis blob类型

mybatis blob类型

在MyBatis中,Blob类型用于处理二进制大对象(Binary Large OBjects)。

Blob类型的数据通常用于存储图像、音频、视频或其他类型的文件。

在MyBatis中,你可以使用Blob类型映射到数据库中的BLOB 列。

通常情况下,你可以使用Java的Blob接口来处理Blob类型的数据。

然而,MyBatis提供了一种更简单的方式来处理Blob类型的数据,即使用Java的字节数组(byte[])来表示Blob数据。

在MyBatis的映射文件中,你可以使用以下语法来定义Blob类型的列:```xml<resultMap id="exampleResultMap" type="com.example.Example"><result property="imageData" column="image_data" javaType="byte[]" jdbcType="BLOB"/></resultMap>```在这个示例中,`imageData`是Java对象的属性,对应数据库表中的`image_data`列。

`javaType`属性指定了属性的Java类型为字节数组(byte[]),`jdbcType`属性指定了对应数据库类型的JDBC类型为BLOB。

当查询结果返回时,MyBatis会将Blob数据转换为字节数组(byte[]),并将结果赋值给对应的Java属性。

同样地,当插入或更新数据时,MyBatis会将字节数组(byte[])转换为Blob类型,并将其存储到数据库中。

需要注意的是,在处理Blob类型的数据时,可能会遇到一些性能问题。

因为Blob类型的数据通常比较大,所以在处理过程中可能会对数据库性能产生一定的影响。

因此,在实际应用中,建议谨慎使用Blob类型的数据,并考虑其他存储方案(如文件系统或云存储)来处理大型文件。

BLOB和CLOB的存取操作

BLOB和CLOB的存取操作

BLOB和CLOB的存取操作BLOB和CLOB是数据库中用于存储大型二进制对象和字符对象的数据类型。

BLOB代表二进制大对象,CLOB代表字符大对象。

在数据库中,BLOB和CLOB可以存储图像、音频、视频文件等二进制数据,以及大段的文本数据。

存取操作BLOB和CLOB数据可以通过数据库中的SQL语句和程序代码来实现。

下面将详细介绍如何进行存取操作,包括数据的插入、查询、更新和删除。

1.插入操作:a.存储二进制数据(BLOB):-使用INSERTINTO语句插入一条记录,使用BINARY或VARBINARY关键字指定数据类型。

- 使用参数化查询(Prepared Statement)将BLOB数据作为输入。

b.存储字符数据(CLOB):-使用INSERTINTO语句插入一条记录,使用VARCHAR或TEXT关键字指定数据类型。

-使用参数化查询将CLOB数据作为输入。

2.查询操作:a.查询二进制数据(BLOB):-使用SELECT语句查询数据表,并使用BINARY或VARBINARY数据类型读取BLOB数据。

- 通过流(InputStream)读取BLOB数据并进行处理。

b.查询字符数据(CLOB):-使用SELECT语句查询数据表,并使用VARCHAR或TEXT数据类型读取CLOB数据。

- 通过字符串(String)读取CLOB数据并进行处理。

3.更新操作:a.更新二进制数据(BLOB):-使用UPDATE语句更新表中的记录,并使用BINARY或VARBINARY数据类型更新BLOB字段。

-使用参数化查询将新的BLOB数据作为输入。

b.更新字符数据(CLOB):-使用UPDATE语句更新表中的记录,并使用VARCHAR或TEXT数据类型更新CLOB字段。

-使用参数化查询将新的CLOB数据作为输入。

4.删除操作:a.删除二进制数据(BLOB):-使用DELETE语句从数据表中删除记录,或设置BLOB字段的值为NULL。

blob的java类型 -回复

blob的java类型 -回复

blob的java类型-回复Blob(Binary Large Object)是一种用于存储大型二进制数据的数据类型,在Java中也有对应的Blob类型。

本文将从Blob的定义开始,逐步介绍Blob类型在Java中的使用方法和常见操作。

首先,Blob是一种数据类型,用于存储大型二进制数据,例如图像、音频、视频等。

Blob类型在Java中用于表示数据库中的二进制大对象。

二进制大对象是一种可以存储任意二进制数据的数据类型,比如大型图片、文件等。

Blob类型为这些数据提供了一个统一的接口,方便存储、检索和处理。

在Java中,可以使用java.sql包中的Blob类来操作Blob数据。

Blob类提供了一系列方法,用于对Blob对象进行读取、写入、复制和比较等操作。

首先,我们需要获取数据库中的Blob对象。

假设有一个名为"image_blob"的列,存储了一张图片的二进制数据,我们可以使用JDBC(Java Database Connectivity)来获取Blob对象。

首先,建立数据库连接,然后执行SQL 查询语句,获取结果集。

接下来,可以使用rs.getBlob("image_blob")方法来获取Blob对象。

一旦获取到Blob对象,我们就可以对其进行各种操作。

首先,可以使用Blob对象的length()方法获取Blob的长度,即二进制数据的字节数。

例如,使用blob.length()可以获取到图片的字节数。

接下来,我们可以使用Blob对象的getBinaryStream()方法获取一个输入流(InputStream),从而读取Blob中的二进制数据。

有了输入流,就可以对Blob数据进行读取和处理。

例如,可以将Blob中的数据写入磁盘文件,或者将其转换成其他格式的数据。

此外,Blob类还提供了一些其他有用的方法,例如setBinaryStream()方法可以用于将Blob数据写入到另一个Blob对象中;getBytes()方法可以将Blob数据读取到字节数组中;truncated()方法可以截取Blob的一部分数据;equals()方法和compareTo()方法可以用于比较两个Blob对象是否相等。

java上传文件通过mybatis存储到数据库的BLOB格式中

java上传文件通过mybatis存储到数据库的BLOB格式中

上传文件通过mybatis存储到数据库的BLOB格式中HTML 页面需要设置一个文件框[html]view plaincopy1.<form enctype="multipart/form-data">2.3.<input type="file"name="file"/>4.5.</form>上传操作方法:[java]view plaincopy1.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.getCurrentRequest());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); //FileCopyUtils 为spring下的一个工具类。

11.if (b == null || b.length == 0) { return0; }12. param.put("FILE", b);//此处所用的参数类型为 byte[]13. }14. }15.16.//////////各种参数放入param你懂得。

blob的java类型 -回复

blob的java类型 -回复

blob的java类型-回复Blob(Binary Large Object)是一种数据类型,用于存储大量二进制数据的容器。

在Java中,Blob类型是一个接口,用于表示数据库中的二进制数据。

它提供了一些方法来操作二进制数据,如读取、写入、更新和删除。

本文将逐步解释Blob的Java类型,旨在帮助读者更好地理解和使用Blob。

第一步:了解Blob的定义和作用Blob是一种数据库类型,可以存储大规模的二进制数据,例如图像、视频、音频和文档等。

与其他数据类型(如字符串或数字)不同,Blob可以容纳任意大小的数据。

Blob通常用于存储那些无法用其他数据类型表示的数据。

第二步:了解Java中的Blob类型在Java中,java.sql.Blob接口表示Blob类型。

这个接口提供了一些用于操作二进制数据的方法。

Blob接口是JDBC(Java Database Connectivity)规范的一部分,旨在提供与数据库的连接和交互。

第三步:Blob的基本操作Blob接口提供了以下常用方法:1. long length():获取Blob对象中的二进制数据的长度。

2. byte[] getBytes(long pos, int length):将Blob对象的一部分数据转换为字节数组,并返回该数组。

pos参数表示要获取的数据的起始位置,length参数表示要获取的数据的长度。

3. InputStream getBinaryStream():获取一个InputStream对象,用于从Blob对象中读取二进制数据。

4. OutputStream setBinaryStream(long pos):获取一个OutputStream对象,用于将二进制数据写入Blob对象中的指定位置。

5. int setBytes(long pos, byte[] bytes):将字节数组写入Blob对象的指定位置。

pos参数表示写入的起始位置,bytes参数表示要写入的字节数组。

mybatis处理CLOBBLOB类型数据

mybatis处理CLOBBLOB类型数据

mybatis处理CLOBBLOB类型数据BLOB和CLOB都是⼤字段类型。

BLOB是按⼆进制来存储的,⽽CLOB是可以直接存储⽂字的。

通常像图⽚、⽂件、⾳乐等信息就⽤BLOB字段来存储,先将⽂件转为⼆进制再存储进去。

⽂章或者是较长的⽂字,就⽤CLOB存储. BLOB和CLOB在不同的数据库中对应的类型也不⼀样:MySQL 中:clob对应text/longtext,blob对应blobOracle中:clob对应clob,blob对应blobMyBatis提供了内建的对CLOB/BLOB类型列的映射处理⽀持。

建表语句:create table user_pics(id number primary key,name varchar2(50) ,pic blob,bio clob);照⽚(pic)可以是PNG,JPG或其他格式的。

简介信息(bio)可以是学⽐较长的⽂字描述。

默认情况下,MyBatis将CLOB类型的列映射到ng.String类型上、⽽把BLOB列映射到byte[]类型上。

public class UserPic{private int id;private String name;private byte[] pic;private String bio;//setters & getters}映射⽂件:<insert id="insertUserPic" parameterType="UserPic"><selectKey keyProperty="id" resultType="int" order="BEFORE">select my_seq.nextval from dual</selectKey>insert into user_pics(id,name, pic,bio)values(#{id},#{name},#{pic},#{bio})</insert><select id="getUserPicById" parameterType="int" resultType="UserPic">select * from user_pics where id=#{id}</select>映射接⼝:public interface PicMapper {int insertUserPic(UserPic userPic);UserPic getUserPicById(int id);}测试⽅法:public void test_insertUserPic(){String name = "tom";String bio = "可以是很长的字符串";byte[] pic = null;try {//读取⽤户头像图⽚File file = new File("src/com/briup/special/1.gif");InputStream is = new FileInputStream(file);pic = new byte[is.available()];is.read(pic);is.close();} catch (Exception e){e.printStackTrace();}//准备好要插⼊到数据库中的数据并封装成对象UserPic userPic = new UserPic(name, pic , bio);SqlSession sqlSession = null;try{sqlSession = MyBatisSqlSessionFactory.openSession();SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);mapper.insertUserPic(userPic);mit();}catch (Exception e) {e.printStackTrace();}}下⾯的getUserPic()⽅法将CLOB类型数据读取到String类型,BLOB类型数据读取成byte[]属性:@Testpublic void test_getUserPicById(){SqlSession sqlSession = null;try {sqlSession = MyBatisSqlSessionFactory.openSession();SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);UserPic userPic = mapper.getUserPicById(59);System.out.println(userPic.getId());System.out.println(userPic.getName());System.out.println(userPic.getBio());System.out.println(userPic.getPic().length);} catch (Exception e) {e.printStackTrace();}}。

java本地文件存到数据库

java本地文件存到数据库

String connectString;ResultSet rs = null;Statement stamt = null;Connection conn = null;BufferedInputStream bis = null;OutputStream out = null;PreparedStatement stamt2 = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");connectString = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";conn = DriverManager.getConnection(connectString,"cqgwy_user","cqgwy_user");conn.setAutoCommit(false); //必须设置不然要报错String sqlupdateString = "update aa01 set ZA9998=empty_blob() where za0100='7f89feac-37cf-40df-81bb-568d7e1bcddf'";stamt2 = conn.prepareStatement(sqlupdateString);stamt2.executeUpdate();String sql = "select ZA9998 from aa01 t wheret.za0100='7f89feac-37cf-40df-81bb-568d7e1bcddf' for update ";stamt2 = conn.prepareStatement(sql);String inert = "update AA01 set ZA9998=? whereZA0100='7f89feac-37cf-40df-81bb-568d7e1bcddf' ";rs = stamt2.executeQuery();while (rs.next()) {BLOB blob = (BLOB) rs.getBlob(1);stamt2 = conn.prepareStatement(inert);stamt2.setBlob(1, blob);stamt2.executeUpdate();int size = (blob).getBufferSize();bis = new BufferedInputStream(newFileInputStream(new File("d:\\\\1.jpg")), size);out = (blob).getBinaryOutputStream();System.out.println(size);byte b[] = new byte[size];int en = 0;while ((en = bis.read(b, 0, size)) != -1) { out.write(b, 0, en);}out.flush();}bis.close(); //在mit();前关闭out.close(); //在mit(); 前关闭mit();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {rs.close();stamt.close();conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}。

Java的blob

Java的blob

Java的blob由于⽆结构的数据往往都是⼤型的,存储量⾮常⼤,⽽LOB(large object)类型主要⽤来⽀持⽆结构的⼤型数据.⽤户可以⽤LOB数据类型来存储⼤型的⽆结构数据,特别是⽂本,图形,视频和⾳频等多媒体数据,系统还提供了随机访问这些LOB类型数据的有效办法.LOB数据类型可以分为以下⼏种:Oracle sun mysql jdk1. BLOB:⼆进制LOB类型,⽤户存放⽆结构的⼆进制数据,最⼤4GB. binary ⼆进制2. CLOB:字符LOB类型,⽤于存放字符数据,最⼤可以存储4GB. char character lob3. NLOB:字符LOB类型,和CLOB相同,⽀持国家字符集.多字符集 GBK4. BFILE:⼆进制⽂件类型,与数据库外的操作系统⽂件相关联,该⽂件存储⼆进制⼤对象.对于BLOB和CLOB数据,表中存储的是指向该LOB数据的定位器,对于BFILE(数据存放在数据库的操作系统⽂件上),表中存储的是指向外部⽂件的定位器.BLOB和CLOB数据类型属于Oracle内部数据类型,存储在数据库的表空间中,在事务中可以使⽤DBMS_LOB包过程/PL/SQL程序或OCI程序修改,可以提交或回滚修改.⽽BFILE数据是只读的.BFILE类型仅提供随机读取数据,事务不能保证该类型的完整性,数据的完整性和可⽤性要在操作系统下维护.DBA要保证⽂件的存在和访问权限.初始化参数SESSION_MAX_OPEN_FILES设定⼀个会话最多可同时打开的⽂件最⼤数.下⾯我们将介绍MySQL数据库对LOB类型数据的存取(读写)操作.package com.guigu.jdbc;import java.sql.*;public class MySQLConnectionUtil {private static String DRIVER="com.mysql.jdbc.Driver";private static String URL="jdbc:mysql://127.0.0.1:3306/lob";private static String USERNAME="root";private static String PASSWORD="123456";public static Connection getConnection(){Connection connection=null;try {Class.forName(DRIVER);connection= DriverManager.getConnection(URL,USERNAME,PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){try {if(resultSet!=null){resultSet.close();}if (preparedStatement!=null){preparedStatement.close();}if (connection!=null){connection.close();}} catch (SQLException e) {e.printStackTrace();}}}。

blob的java类型

blob的java类型

blob的java类型摘要:一、引言二、blob 的概念和作用三、java 中blob 的类型1.byte[]2.InputStream3.OutputStream4.ByteArrayOutputStream四、blob 类型的应用场景五、blob 与其他数据类型的转换六、总结正文:一、引言在Java 中,BLOB(Binary Large OBjects)是一种用于存储二进制数据的类型。

它可以存储大量的数据,如图片、音频、视频等。

本文将详细介绍Java 中BLOB 的类型以及应用场景。

二、BLOB 的概念和作用BLOB 主要用于数据库中存储二进制数据,它是一种特殊的数据类型,用于存储大型数据对象。

在实际应用中,BLOB 常用于存储图片、音频、视频等资源文件,以满足数据的存储和传输需求。

三、Java 中BLOB 的类型Java 中BLOB 主要有以下几种类型:1.byte[]byte[] 类型用于存储二进制数据,可以将BLOB 字段直接存储为字节数组。

这种类型适用于较小的二进制数据存储。

2.InputStreamInputStream 类型用于读取BLOB 数据。

通过InputStream,可以实现BLOB 数据的输入和读取操作。

3.OutputStreamOutputStream 类型用于写入BLOB 数据。

通过OutputStream,可以实现BLOB 数据的输出和写入操作。

4.ByteArrayOutputStreamByteArrayOutputStream 类型用于将BLOB 数据写入字节数组。

这种类型适用于需要将BLOB 数据转换为字节数组进行处理的场景。

四、BLOB 类型的应用场景BLOB 类型的应用场景包括:1.数据库存储:在数据库中,BLOB 类型用于存储图片、音频、视频等二进制数据。

2.文件传输:在文件传输过程中,BLOB 类型可以用于存储和传输二进制数据。

3.数据加密:在数据加密和解密过程中,BLOB 类型可以用于存储加密后的二进制数据。

小峰mybatis(1)处理clob,blob等。。

小峰mybatis(1)处理clob,blob等。。

⼩峰mybatis(1)处理clob,blob等。

⼀、mybatis处理CLOB、BLOB类型数据CLOB:⼤⽂本类型;⼩说啊等⼤⽂本的;对应数据库类型不⼀致,有long等;BLOB:⼆进制的,图⽚;电影、⾳乐等⼆进制的;在mysql中:blob:longblob:存储的东西⽐blob更⼤;longtext:存储⼤⽂本类型的;新建t_studeng表:create table t_student(id int primary key auto_increment,name varchar(20),age int,pic longblob,remark longtext)项⽬结构:1)jdbc.properties:jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test_demoername=rootjdbc.password=123456View Code2)mybatis_config.xml:1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE configuration3PUBLIC "-////DTD Config 3.0//EN"4"/dtd/mybatis-3-config.dtd">5<configuration>6<properties resource="jdbc.properties"/>7<!-- 别名 -->8<typeAliases>9<package name="com.cy.model"/>10</typeAliases>1112<environments default="development">13<environment id="development">14<transactionManager type="JDBC"/>15<dataSource type="POOLED">16<property name="driver" value="${jdbc.driverClassName}"/>17<property name="url" value="${jdbc.url}"/>18<property name="username" value="${ername}"/>19<property name="password" value="${jdbc.password}"/>20</dataSource>21</environment>22<environment id="test">23<transactionManager type="JDBC"/>24<dataSource type="POOLED">25<property name="driver" value="${jdbc.driverClassName}"/>26<property name="url" value="${jdbc.url}"/>27<property name="username" value="${ername}"/>28<property name="password" value="${jdbc.password}"/>29</dataSource>30</environment>31</environments>3233<mappers>34<package name="com.cy.mapper"/>35</mappers>36</configuration>View Code3)Student.java model:1package com.cy.model;23public class Student {4private Integer id;5private String name;6private Integer age;7private byte[] pic;8private String remark;910public Integer getId() {11return id;12 }13public void setId(Integer id) {14this.id = id;15 }16public String getName() {17return name;18 }19public void setName(String name) { = name;21 }22public Integer getAge() {23return age;24 }25public void setAge(Integer age) {26this.age = age;27 }28public byte[] getPic() {29return pic;30 }31public void setPic(byte[] pic) {32this.pic = pic;33 }34public String getRemark() {35return remark;36 }37public void setRemark(String remark) {38this.remark = remark;39 }40 @Override41public String toString() {42return "Student [id=" + id + ", name=" + name + ", age=" + age43 + ", remark=" + remark + "]";44 }45464748 }View Code4)获取sqlSession:SqlSessionFactoryUtil.java:1package com.cy.util;23import java.io.IOException;4import java.io.InputStream;56import org.apache.ibatis.io.Resources;7import org.apache.ibatis.session.SqlSession;8import org.apache.ibatis.session.SqlSessionFactory;9import org.apache.ibatis.session.SqlSessionFactoryBuilder;1011public class SqlSessionFactoryUtil {12private static SqlSessionFactory sqlSessionFactory;1314public static SqlSessionFactory getSqlSessionFactory(){15if(sqlSessionFactory==null){16 InputStream inputStream=null;17try {18 inputStream=Resources.getResourceAsStream("mybatis_config.xml");19 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);20 } catch (IOException e) {21 e.printStackTrace();22 }23 }2425return sqlSessionFactory;26 }2728public static SqlSession openSession(){29return getSqlSessionFactory().openSession();30 }31 }View Code5)测试代码:StudentTest.java: service层:1package com.cy.service;23import java.io.File;4import java.io.FileInputStream;5import java.io.FileOutputStream;6import java.io.InputStream;7import java.io.OutputStream;89import org.apache.ibatis.session.SqlSession;10import org.junit.After;11import org.junit.Before;12import org.junit.Test;1314import com.cy.mapper.StudentMapper;15import com.cy.model.Student;16import com.cy.util.SqlSessionFactoryUtil;1718public class StudentTest {19private SqlSession sqlSession=null;20private StudentMapper studentMapper=null;2122 @Before23public void setUp() throws Exception {24 sqlSession=SqlSessionFactoryUtil.openSession();25 studentMapper=sqlSession.getMapper(StudentMapper.class);26 }2728 @After29public void tearDown() throws Exception {30 sqlSession.close();31 }3233 @Test34public void testInsertStudent(){35 Student student=new Student();36 student.setName("zhangsan");37 student.setAge(14);38 student.setRemark("很长的⽂本...");39byte []pic=null;40try{41 File file=new File("I://shoot.png");42 InputStream inputStream=new FileInputStream(file);43 pic=new byte[inputStream.available()];44 inputStream.read(pic);45 inputStream.close();46 }catch(Exception e){47 e.printStackTrace();48 }49 student.setPic(pic);50 studentMapper.insertStudent(student);51 mit();52 }5354 @Test55public void testGetStudentById(){56 Student student=studentMapper.getStudentById(1);57 System.out.println(student);58byte []pic=student.getPic();59try{60 File file=new File("i://boy.png");61 OutputStream outputStream=new FileOutputStream(file);62 outputStream.write(pic);63 outputStream.close();64 }catch(Exception e){65 e.printStackTrace();66 }67 }6869707172 }执⾏testInsertStudent⽅法后,查看数据库中插⼊情况:执⾏testGetStudentById获取这个记录,将pic保存到I盘 boy.png,已将数据库中的图⽚,以流的形式写⼊到I盘中;6)StudentMapper.java:1package com.cy.mapper;23import com.cy.model.Student;45public interface StudentMapper {67//插⼊8public int insertStudent(Student student);910//根据id获取student11public Student getStudentById(Integer id);1213 }View Code7)StudentMapper.xml mapper映射⽂件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cy.mapper.StudentMapper"><insert id="insertStudent" parameterType="Student">insert into t_student values(null,#{name},#{age},#{pic},#{remark});</insert><select id="getStudentById" parameterType="Integer" resultType="Student"> select * from t_student where id=#{id}</select></mapper>⼆、项⽬中使⽤log4j:在项⽬中加⼊log4j的jar包,以及配置log4j.properties:1)log4j.properties配置⽂件:1 log4j.rootLogger=info,appender1,appender223 log4j.appender.appender1=org.apache.log4j.ConsoleAppender45 log4j.appender.appender2=org.apache.log4j.FileAppender6 log4j.appender.appender2.File=I:/logFile.txt78 yout=org.apache.log4j.TTCCLayout9 yout=org.apache.log4j.TTCCLayout⽽且,发现配置⽂件名必须为log4j.properties;上⾯的输⼊到两个地⽅:console;I盘下⾯的logFile.txt;2)测试代码:StudentTest.java:package com.cy.service;import org.apache.log4j.Logger;import org.junit.Test;public class StudentTest {private static Logger logger = Logger.getLogger(StudentTest.class);@Testpublic void testLogger(){("测试log4j.....");}@Testpublic void testOtherLogger(){("测试other log4j.....");}}运⾏后console输出:这样信息:[main] INFO com.cy.service.StudentTest - 测试other log4j.....查看I盘下⾯logFile.txt:。

深入浅析mybatisoracleBLOB类型字段保存与读取

深入浅析mybatisoracleBLOB类型字段保存与读取

深⼊浅析mybatisoracleBLOB类型字段保存与读取⼀、BLOB字段 BLOB是指⼆进制⼤对象也就是英⽂Binary Large Object的所写,⽽CLOB是指⼤字符对象也就是英⽂Character Large Object的所写。

其中BLOB是⽤来存储⼤量⼆进制数据的;CLOB⽤来存储⼤量⽂本数据。

BLOB通常⽤来保存图⽚、⽂件等⼆进制类型的数据。

⼆、使⽤mybatis操作blob 1、表结构如下:create table BLOB_FIELD(ID VARCHAR2(64 BYTE) not null,TAB_NAME VARCHAR2(64 BYTE) not null,TAB_PKID_VALUE VARCHAR2(64 BYTE) not null,CLOB_COL_NAME VARCHAR2(64 BYTE) not null,CLOB_COL_VALUE CLOB,constraint PK_BLOB_FIELD primary key (ID)); 2、实体代码如下:package com.test.entity;import java.sql.Clob;/*** ⼤字段*/public class BlobField {private String tabName;// 表名private String tabPkidValue;// 主键值private String blobColName;// 列名private byte[] blobColValue;// 列值 clob类型public String getTabName() {return tabName;}public void setTabName(String tabName) {this.tabName = tabName;}public String getTabPkidValue() {return tabPkidValue;}public void setTabPkidValue(String tabPkidValue) {this.tabPkidValue = tabPkidValue;}public String getBlobColName() {return blobColName;}public void setBlobColName(String blobColName) {this.blobColName = blobColName;}public byte[] getBlobColValue() {return blobColValue;}public void setBlobColValue(byte[] blobColValue) {this.blobColValue = blobColValue;}} 3、mybatis sql代码如下:<?xml version="." encoding="UTF-" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper .//EN" "/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><sql id="blobFieldJoins"></sql><select id="get" resultType="blobField">SELECT<include refid="blobFieldColumns" />FROM BLOB_FIELD a<include refid="blobFieldJoins" />WHERE a.ID = #{id}</select><select id="findList" resultType="blobField">SELECT<include refid="blobFieldColumns" />FROM BLOB_FIELD a<include refid="blobFieldJoins" /></select><insert id="insert">INSERT INTO BLOB_FIELD(ID ,TAB_NAME ,TAB_PKID_VALUE ,BLOB_COL_NAME ,BLOB_COL_VALUE) VALUES (#{id},#{tabName},#{tabPkidValue},#{blobColName},#{blobColValue,jdbcType=BLOB})</insert><update id="update">UPDATE BLOB_FIELD SETTAB_NAME = #{tabName},TAB_PKID_VALUE = #{tabPkidValue},BLOB_COL_NAME = #{blobColName},BLOB_COL_VALUE = #{blobColValue}WHERE ID = #{id}</update><delete id="delete">DELETE FROM BLOB_FIELDWHERE ID = #{id}</delete></mapper> 3、controller代码如下: a、保存BLOB字段代码/*** 附件上传** @param testId* 主表Id* @param request* @return* @throws UnsupportedEncodingException*/@RequiresPermissions("exc:exceptioninfo:feedback")@RequestMapping(value = "attachment", method = RequestMethod.POST)@ResponseBodypublic 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) request;// 获得⽂件MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 与前端设置的fileDataName属性值⼀致String filename = multipartFile.getOriginalFilename();// ⽂件名称InputStream is = null;try {//读取⽂件流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);}return result;} b、读取BLOB字段/*** 下载附件** @param attachmentId* @return*/@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, HttpServletRequestrequest, HttpServletResponse response) {ServletOutputStream out = null;try {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", "attachment;fileName=" + URLEncoder.encode(attachmentName, "UTF-"));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字段,并写⼊成输出流。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档