最近在项目中第一次使用 struts2,在将文件上传到数据库(oracle9i)中时,出现了一个奇怪的问题,就是当上传的文件比较小时(先这样说,因为没有查阅相关文档也没有测试这个值为多少),可以正常上传到数据库中,但当我上传了一个为300多K的图片是出现如下错误:
不允许的操作: streams type cannot be used in batching
在网上查阅时,有个哥们做出了如下解释:
引用
近日程序的数据库转为oracle 在操作blob类型时报以下错误:不允许的操作: streams type cannot be used in batching。经过查找多方面的资料查证Oracle JDBC不允许流操作以批量方式执行(Oracle CLOB采用流机制作为数据读写方式)。 只需在spring配置文件中更改hibernate jdbc.batch_size为0即可。
- <bean id="oracleSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
-
<property name="dataSource">
-
<ref bean="oracleDataSource"/>
-
</property>
-
<property name="hibernateProperties">
-
<props>
-
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
-
<prop key="connection.provider_class">
- org.hibernate.connection.C3P0ConnectionProvider
-
</prop>
-
<prop key="hibernate.show_sql">true</prop>
-
<prop key="hibernate.cache.use_query_cache">true</prop>
-
<prop key="hibernate.cache.provider_class">
- org.hibernate.cache.EhCacheProvider
-
</prop>
-
<prop key="hibernate.jdbc.batch_size">0</prop>
-
</props>
-
</property>
<bean id="oracleSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="oracleDataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
</props>
</property>
以上引用出处:http://hsyd.iteye.com/blog/320579
我添加后,又出现了新的问题:
org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
很是郁闷,网上查了很多,大多都是在说要先save一个空值,然后update,我试了一下,总感觉在ssh架构中,不太好实现,所以都未能解决问题,估计我的功力还不够,呵呵,但我在网上看到说:
引用
用oracle10G带的jdbcdriver,clob可以直接读写了
所以我就想如果我用oracle10G带的jdbcdriver,是不是也能够直接读写blob类型的呢?我试了一下,欣喜若狂。。。,终于解决了,现分享给为此困惑的同行。
顺便说明一下,我以前用的oracle驱动是class12.jar,我从网上下了10g的驱动,名称为:ojdbc14.jar,现作为附件供大家方便下载。
原文::http://jiangpan.iteye.com/blog/422449
分享到:
相关推荐
Struts用 JDBC Blob字段 保存和读取 Oracle 数据库 好用 试过 有详细注释
相关知识struts2,fileupload等,实现图片上传并生成缩略图。单文件上传,图片展示直接使用jQuery FancyBox,效果不错,值得初学者研究学习。
Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf
实际上,写完多文件上传和下载文章的时候,类似的想法就已经有了,一直没有实际把它整理好,今天也终于把这方面的一些经验分享给...注:本文使用的是单纯的Struts2 + Spring + Hibernate,图片操作并没有使用Servlet。
struts+hibernate+spring+blob 三个框架集成了一下,主要包括利用struts的上传附件功能,并把上传的图片存储到oracle的blob字段。并提供显示。 没做过多的限制,还有很多bug别见怪,功能跑得通!
本案例演示了struts2+Hibernate上传的文件,以blob对象形式保存到数据库中,同时并提供下载样例.
struts2.1 + hibernate3.2 + spring 2.5 实现blob数据上传、下载
Struts2,Hibernate3,Spring2实现oracle存取blob字段(图片等二进制文件) Myeclipse6.0下开发 哈哈,原来2分的,现在免费了!!!!!!!!!!!!!!!!!!!!!!!!给评分哦!!!!!!!!!!!!!!!!
使用hibernate+struts 实现对word ,excel,ppt等文件的上传下载,上传文件之后根据文件名称进行下载.
在Oracle中存取BLOB对象实现文件的上传和下载.txt 在Oracle中存取BLOB对象实现文件的上传和下载.txt
二、Hibernate部分 三、Action部分 四、struts.xml部分
这是用struts+spring+hibernate整合的一个小练习,里面的DAO层都是经过单元测试成功的,数据库用oracle9i,里面有对Blob的操作
快速检测struts命令执行漏洞,可批量。使用方式:https://github.com/Lucifer1993/struts-scan/blob/master/README.md
环境为java,struts2,extjs3.0 js中除了现在用的textfield控件外,还有uploadfild 前者支持IE和火狐 后者IE可以正常取得控件,而火狐不能,这点没有解决,并且在使用上要加入两个JAR包,这些此压缩包里已给出 所以...
2. 在 Action 中将传入的 ActionForm 中的文件字段赋给 VO 值对象,并调用业务代理类的上传方法。 3. 在业务代理类中,调用 DAO 中的上传方法,将大对象上传到数据库中。 在 DAO 中,我们需要使用 ...
环境为java,struts2,extjs3.0 js中除了现在用的textfield控件外,还有uploadfild可以支持extjs中文件的上传,但值得注意的是,form里的fileUpload属性必须为true, 前者支持IE和火狐 后者IE可以正常取得控件,而...
本文介绍了Ajax技术的原理及特点,并对采用STRUTS框架的Web应用中如何使用Ajax技术,通过异步数据交互的方式实现文本框输入渐进提示功能的方法进行了说明
本人参考其他例子总结之后写的一个基于web批量下载图片,包括下载磁盘文件盒数据库中blob类型的
使用struts2的文件上传功能,将图片上传到服务器端的同时,用blob字段保存进数据库,同时也可以将blob字段存储的图片用xstream读取出来显示到页面上。
2、 struts+hibernate保存图片 struts+hibernate整合项目保存图片时候,除了struts的FormFile起主要作用外,hibernate做了什么?其实hibernate所做的事和保存图片没太大的关系,只是把路径保存了 3、 struts保存...