public int getUploadFile(Reportfile reportfile) {//上传文件
  // TODO Auto-generated method stub
  Session session=super.getSession();
  Transaction transaction=session.beginTransaction();
  Reportfile rf=new Reportfile();
  rf.setFilename(reportfile.getFilename());
  rf.setFilesize(reportfile.getFilesize());
  rf.setMyfile(null);
  session.save(rf);
  session.flush();
  session.refresh(rf, LockMode.UPGRADE);
   InputStream inputStream;
   try {
    inputStream = reportfile.getMyfile().getBinaryStream();
    ByteArrayOutputStream by = new ByteArrayOutputStream(reportfile.getFilesize());
    byte[] bf=new byte[102400];
    while ((inputStream.read(bf))!=-1) {
     by.write(bf);
    }
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
//  ot.write(myfile);
//  super.getHibernateTemplate().save(reportfile);
  transaction.commit();
  session.flush();
        session.close();
  return reportfile.getId();
 }
在session.refresh(rf, LockMode.UPGRADE);之后的那部分代码应该怎么写呢,
我这样子会报错,传过来的那个对象里reportfile.getMyfile()为Blob类型
如何将这个Blob分段插进去,急 哪位大哥知道告我下,谢谢

解决方案 »

  1.   

    try掉了
    不报错
    就是没插进去
      

  2.   

    public int getUploadFile(Reportfile reportfile) {//上传文件
    // TODO Auto-generated method stub
    Session session=super.getSession();
    Transaction transaction=session.beginTransaction();
    Blob b = reportfile.getMyfile();
    byte[]bb=new byte[1];
    bb[0]=1;
    reportfile.setMyfile(Hibernate.createBlob(bb));
    session.save(reportfile);
    session.flush();
    session.refresh(reportfile, LockMode.UPGRADE);
    InputStream inputStream;
    try {
    inputStream = b.getBinaryStream();
    ByteArrayOutputStream by = new ByteArrayOutputStream(reportfile.getFilesize());
    byte[] bf=new byte[102400];
    while ((inputStream.read(bf))!=-1) {
    by.write(bf);
    }
    } catch (Exception e) {
    //  TODO Auto-generated catch block
    e.printStackTrace();
    }

    // ot.write(myfile);
    // super.getHibernateTemplate().save(reportfile);
    transaction.commit();
    session.flush();
            session.close();
    return reportfile.getId();
    我改了下代码终于报错了
    Hibernate: insert into Banck_DB.dbo.reportfile (filename, filesize, myfile) values (?, ?, ?) select scope_identity()
    Hibernate: select reportfile0_.id as id47_0_, reportfile0_.filename as filename47_0_, reportfile0_.filesize as filesize47_0_, reportfile0_.myfile as myfile47_0_ from Banck_DB.dbo.reportfile reportfile0_ with (updlock, rowlock) where reportfile0_.id=?
    2010-10-13 19:46:38,631 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported data conversion.
      

  3.   

    SQLServer 2000 Driver for JDBC Unsupported data conversion.
    说的是SQL2000 不支持数据类型的转换BLOB 是 ORACLE 里的大容量的数据格式吧
    可报错是说SQL2000 可 SQL2000数据格式并没有BLOB这个格式
      

  4.   

    将上面更改的代码用jtds方式连接sql2000
    可以传小文件,大文件的时候
    ByteArrayOutputStream by = new ByteArrayOutputStream(reportfile.getFilesize());
    这句转换将报错
    Struts Problem Report
    Struts has detected an unhandled exception: Messages: Java heap space 
     
    File: java/io/ByteArrayOutputStream.java 
    Line number: 60 
    --------------------------------------------------------------------------------Stacktraces
    java.lang.reflect.InvocationTargetException 
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
        com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
        org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
        org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
        org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
        org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
        org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
        java.lang.Thread.run(Thread.java:619)
        
    java.lang.OutOfMemoryError: Java heap space 
        java.io.ByteArrayOutputStream.(ByteArrayOutputStream.java:60)
        com.qhkj.bank.dao.hibernate.ReportDaoHibernate.getUploadFile(ReportDaoHibernate.java:155)
        com.qhkj.bank.manager.impl.ReportManagerImpl.getUploadFile(ReportManagerImpl.java:49)
        com.qhkj.bank.web.actions.UploadMyfile.getUploadFile(UploadMyfile.java:140)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
        com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
        org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
      

  5.   

    java.lang.OutOfMemoryError: Java heap space
    这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
    http://dev.firnow.com/course/3_program/java/javajs/200861/118523.html请看 如何设置 HEAP
      

  6.   

    上传文件的大小也要控制 一般不大于2M
    BOLB存入数据库网上 资料很多 你可以查查
      

  7.   

    再次修改代码
    传37MB没有问题了
    再大又报错了
    与连接方式没有太大关系
    public int getUploadFile(Reportfile reportfile) {//上传文件
    // TODO Auto-generated method stub
    Session session=super.getSession();
    Transaction transaction=session.beginTransaction();
    Blob b = reportfile.getMyfile();
    byte[]bb=new byte[1];
    bb[0]=1;
    reportfile.setMyfile(Hibernate.createBlob(bb));
    session.save(reportfile);
    session.flush();
    session.refresh(reportfile, LockMode.UPGRADE);
    InputStream inputStream;
    try {
    inputStream = b.getBinaryStream();

    byte[] bf=new byte[10240];
    int n;
    while ((n=inputStream.read(bf))!=-1) {
    ByteArrayOutputStream by = new ByteArrayOutputStream(n);
    by.write(bf,0,n);
    by.flush();
    by.close();
    }
    bf=null;
    } catch (Exception e) {
    //  TODO Auto-generated catch block
    e.printStackTrace();
    }

    // ot.write(myfile);
    // super.getHibernateTemplate().save(reportfile);
    transaction.commit();
    // session.flush();
    //        session.close();
    return reportfile.getId();
    }
      

  8.   

    对了,我用另外一种方式
    就是不用Blob类型
    直接在用byte[]
    然后借助Blob类型转换流
    也可以
    但是也只能传37左右
    我试试65MB的就不行还有就是网上的那个修改Xmn -Xms -Xmx
    我在环境变量配置
    但是不起作用
    还有时候在tomacat理配置
    但是我在里面没有找到catalina.bt文件
    我的是win7 64位系统
      

  9.   

    网上的基本都是oracle的
    有几个是用proc写的
    我sql不怎么行,那个function都没有用过
      

  10.   

    http://wangqiaowqo.javaeye.com/blog/457912
    此处写得明白些,更改的确有用,
    但是新问题
    丫滴,我是直接存数据库的
    远程不行,看样子还得经过一次服务器