mysql数据库字段类型longblob,字符集gbk,hibernate映射blob,上传成功率跟文件大小类型是否中文无关,ssh框架,这2行是从页面取得上传文件并保存
gonggao.setFj(Hibernate.createBlob(fileForm.getFileContent()
     .getFileData()));
   zwglDAO.saveOrUpdate(gonggao);
以下是上传文件失败所报的异常,很郁闷org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: Could not execute JDBC batch update; bad SQL grammar [update zlsqws.hainan_gonggao set bt=?, nr=?, sj=?, cjdw=?, cjr=?, fj=?, fjwjm=?, cjrId=? where id=?]; nested exception is java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?*?.?2?ì\0\0\0\0\0\0\0\0?ì\0\0\0\0\0\0\0\0\0\0\0\0?&?????????' at line 1
java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?*?.?2?ì\0\0\0\0\0\0\0\0?ì\0\0\0\0\0\0\0\0\0\0\0\0?&?????????' at line 1
 at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269)
 at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:955)
 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:585)
 at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
 at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
 at $java.sql.Statement$$EnhancerByProxool$$562d711d.executeBatch()
 at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
 at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
 at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500) 

解决方案 »

  1.   

    1.你可以先尝就单纯上传文件啊!!看看能不能成功!如果成功的话,再这样试啊...
    2.其它上传文件通常不会上传到数据库里面去,这样会拖怕数据库的性能,所以我建议上传到本地硬盘上,你如果想在页面上显示,你可以通过一个<img src="images/...">这个的字符串来引用数据库里面的字符串,就可以显示啊!!!!
      

  2.   

    txt文本文件都可以上传,word文件.doc试了几个上传全失败,excel文件.xls有的可以上传,有的不可以。用户上传一般只会是这三种,或者只有word和excel。
      

  3.   

    感谢楼上回复
    <property name="fj" type="binary" >
    <column name="fj" />
    </property>
    private byte[] fj;
    解决
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    新问题
    byte[] buf = gonggao.getFj();
    fos = new FileOutputStream("d:\\xxx\\" + gonggao.getFjwjm(), true);
    fos.write(buf);
    fos.flush();
    fos.close();保存完文件后弹出一个ie对话框,“无法打开该internet站点,请求站点不可用或找不到”云云,如何把这个提示去了
      

  4.   

    这个好像跟url无关吧,为了测试方便直接下载到本地,并且能够成功下载,下载成功后才弹出这么个提示,还要做一个让用户选择下载路径的功能,后话。让我纳闷的是流已关闭为什么还出这么个提示,或许跟浏览器有关。
      

  5.   

    汗!!你应该把文件上传到项目的一个上传的文件目录中去啊,然后保存文件目录的地址,在页面中就可以显示了。要不我给你一个上传的demo???