mybatis操作MySQL数据库Blob类型报错。。

BroQi 2014-08-04 11:02:13
用Mybatis去数据库中读取Blob类型数据 结果转成字符串的时候报了这个错误,


这个B类型是哪里来的。
java.lang.ClassCastException: [B cannot be cast to java.sql.Blob
at com.tpear.CloudFront.util.StringUtil.mysqlBlob2str(StringUtil.java:248)
at com.tpear.CloudFront.service.cloudhealth.impl.KnowledgeServiceImpl.findById(KnowledgeServiceImpl.java:27)
at com.tpear.CloudFront.action.KnowledgeAction.findById(KnowledgeAction.java:52)
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 com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.tpear.CloudFront.interceptor.IsLoginInterceptor.intercept(IsLoginInterceptor.java:61)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:619)
贴一点Mybatis配置的代码和转换的代码。。。
<resultMap type="knowledge"  id="knowledgeMap">
<id column="id" property="ID" />
<result column="title" property="title" />
<result column="createTime" property="createTime" />
<result column="creator" property="creator" />
<result column="summary" property="summary" />
<result column="thumbnail" property="thumbnail" />
<result column="content" property="content" jdbcType="BLOB"/>
</resultMap>
<select id="getList" resultType="com.tpear.CloudFront.domain.cloudhealth.Knowledge">
SELECT * FROM knowledge
</select>
<select id="findById" resultMap="knowledgeMap">
SELECT * FROM knowledge WHERE id=#{ID}
</select>



public static String mysqlBlob2str(Object o) {
if (o == null)
return null;
System.out.println(o);
Blob b = (Blob) o;
try {
InputStream in = b.getBinaryStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();

byte[] data = new byte[4096];
int count = -1;

while((count = in.read(data,0,4096)) != -1)
out.write(data, 0, count);

data = null;
String result = new String(out.toByteArray(),"utf-8");
return result;
} catch (Exception e) {
return null;
}
}



求大神帮帮忙啊。。
...全文
4270 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
巫婆的猫 2016-04-24
  • 打赏
  • 举报
回复
返回值是byte[],通过inputstream转成string即可
S117 2014-08-04
  • 打赏
  • 举报
回复
blob的类型处理器为 B lobTypeHandle,你需要在blob类型上指定typeHandler, <result column="content" property="content" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>
致知Fighting 2014-08-04
  • 打赏
  • 举报
回复
引用 3 楼 BroQi 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 转型失败了,ibatis取出来的不是java.sql.Blob,你强制转型就错了
我就是很郁闷为什么我拿出来的不是一个Blob类型。。而是一个B类型? [/quote] 拿出来的过程是mybatis控制的,转成什么类型也是框架决定的
BroQi 2014-08-04
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
转型失败了,ibatis取出来的不是java.sql.Blob,你强制转型就错了
我就是很郁闷为什么我拿出来的不是一个Blob类型。。而是一个B类型?
tony4geek 2014-08-04
  • 打赏
  • 举报
回复
类型转换出错了 。。
致知Fighting 2014-08-04
  • 打赏
  • 举报
回复
转型失败了,ibatis取出来的不是java.sql.Blob,你强制转型就错了
Intboy 2014-08-04
  • 打赏
  • 举报
回复
写个单独的handler处理 http://blog.csdn.net/fengspg/article/details/38368649
a137655624 2014-08-04
  • 打赏
  • 举报
回复

 public String convertBlobToString(Blob blob){
  
  String result = "";
  try {
   ByteArrayInputStream msgContent =(ByteArrayInputStream) blob.getBinaryStream();
   byte[] byte_data = new byte[msgContent.available()];
   msgContent.read(byte_data, 0,byte_data.length);
   result = new String(byte_data);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return result;
 }
a137655624 2014-08-04
  • 打赏
  • 举报
回复
从数据库中读取Blob类型数据后,要转换成String类型,即转换成InputStream,再从InputStream转成byte[],再到String即可
BroQi 2014-08-04
  • 打赏
  • 举报
回复
引用 5 楼 longtian1213 的回复:
blob的类型处理器为 B lobTypeHandle,你需要在blob类型上指定typeHandler, <result column="content" property="content" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>
我之前有试过,但还是不行 。。
BroQi 2014-08-04
  • 打赏
  • 举报
回复
引用 4 楼 ygycomon 的回复:
[quote=引用 3 楼 BroQi 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 转型失败了,ibatis取出来的不是java.sql.Blob,你强制转型就错了
我就是很郁闷为什么我拿出来的不是一个Blob类型。。而是一个B类型? [/quote] 拿出来的过程是mybatis控制的,转成什么类型也是框架决定的[/quote] 那我应该怎么去控制呢?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧