mybatis查询mysql blob字段_mybatis+spring+mySql 处理Blob字段(报错:data too long for column 'descrip')...

在Spring+Mybatis+MySQL环境下,尝试插入包含BLOB字段的记录时遇到‘Data too long for column 'descrip'’错误。问题源于图片数据长度超过了BLOB字段的容量限制。当前代码直接将MultipartFile的字节内容放入Map中,导致数据溢出。解决方案可能包括调整数据库中BLOB字段的类型或限制上传文件大小。
摘要由CSDN通过智能技术生成

通过Spring+Mybatis+Mysql搭建了一个框架,在向MYSQl插入图片信息时,将其保存为BLOB类型到数据库。

前台JAVA代码如下:

@RequestMapping("/zdfz")

public ModelAndView zdfz(HttpServletRequest request,HttpServletResponse response){

ModelAndView mav = new ModelAndView("test");

//封装前台的字段到Map

HashMap map = new HashMap();

map.put("id", UUID.randomUUID().toString());

map.put("name", request.getParameter("name"));

map.put("age", request.getParameter("age"));

map.put("sex", request.getParameter("sex"));

//

MultipartHttpServletRequest msRequest = (MultipartHttpServletRequest) request;

MultipartFile mfile = msRequest.getFile("tp");

try {

//封装图片到Map

map.put("descrip",mfile.getBytes());

} catch (IOException e) {

e.printStackTrace();

}

int count = ts.insertFZ(map);

return null;

}

Mybatis的XML文件(descrip就是图片文件字段,数据类型为BLOB):

insert into user

(

id,name,age,

sex,descrip

)

value

(

#{id},#{name},#{age},

#{sex},#{descrip,jdbcType=BLOB}

)

报错如下:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'descrip' at row 1

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:995)

at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)

at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:45)

at $Proxy13.execute(Unknown Source)

at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:22)

at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51)

at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29)

at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:88)

at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:121)

at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:110)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:338)

at $Proxy6.insert(Unknown Source)

at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:231)

at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:59)

at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)

at $Proxy7.insertFZ(Unknown Source)

at com.yk.test.service.impl.TestServiceImpl.insertFZ(TestServiceImpl.java:28)

at com.yk.test.controller.TestController.zdfz(TestController.java:73)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Thread.java:619)

说明:如果不添加这个BLOB字段,就可以正常的插入。

插入的时候并没有将相关的字段封装成一个JavaBean,而是封装成一个Map插入的。

经过在网上搜索相关的资料,也没有解决,希望各位帮忙。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值