巴中电信流量套餐资费资费29元套餐国内流量有多少

spirng 对clob blob数据的处理
spirng 对clob blob数据的处理
.在Hibernate中文件列对应的类型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什么时候用BlobBYteArrayType什么时候用ClobStringType?一般如果要处理的对象是数据库字段类型是blob时(主要是图片,二进制对象等),映射文件设置为:org.springframework.orm.hibernate3.support.BlobByteArrayType 数据库字段是clob(大文本对象)类型时,要将java的属性的类型定为String,映射文件设置为: org.springframework.orm.hibernate3.support.ClobStringType。
4.如果在spring上要使用Struts中自带的上传功能必须在spring的配置文件中加以声明.否者将会出现?簀ava.lang.IllegalStateException: No LobHandler found forconfiguration - lobHandler propertymust be set on LocalSessionFactoryBean异常。配置如下:
(1).声明一个处理句柄:&&& <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />(2).在sessionFactory中注入lobHandler:&&& <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">&&&&&&&&&&& <property name="lobHandler" ref="lobHandler"/>&&& </bean>
提示: 指定lobHandler时,对于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,则可以使用OracleLobHandler。因为Oracle9i处理lob的方式和不太一样,所以这里要用spring提供的SimpleNativeJdbcExtractor.处理Oracle9i lob类型的特殊声明:
<bean id="nativeJdbcExtractor" lazy-init="true"&&& class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true"&&&& class="org.springframework.jdbc.support.lob.OracleLobHandler">&&&&&&&&& <property name="nativeJdbcExtractor">&&&&&&&&&&&&& <ref bean="nativeJdbcExtractor"/>&&&&&&&&& </property></bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">&& <!-- 为处理Blob类型字段的句柄声明 --><property name="lobHandler">&&& <ref local="lobHandler" /></property></bean>
同时还应该使用对应的JDBC驱动。
Clob字段定义:<property name="属性名" column="列名" type="org.springframework.orm.hibernate.support.ClobStringType"length="1048"/>这里的length是指字节,最大可以到2G.该字段在java对象中声明为String类型。
&&&&&  如果使用的是mysql数据库其默认的上传文件大小只有1047552字节:如果上传的文件大于1047552字节则会出现异常org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by settingthe max_allowed_packet' variable.根据提示可以修改mysql数据库的max_allowed_packet属性大小。打开my.ini文件中找到# SERVER SECTION后在port=3306下面加上max_allowed_packet=?M 修改完后重启mysql服务即可成功上传。
发表评论:
TA的最新馆藏[转]&[转]&spring下lob数据处理 - windforce - ITeye技术网站
做了个简单的通告管理,在本机测试时数据量比较小。最开始用的时varchar2到2000,之后用hibernate中的text类型,对应数据库中的Clob类型。当数据量小于4000时,可以直接使用setObject()插入数据库。当数据量大于4000时。报错:socket write error。
查找了一些资料,说当数据量超过4000时,应该使用流方式操作。看到头昏昏,烦都烦死了......
最后发现Spring封装了对lob数据的操作,可以直接使用jdbcTemple操作lob数据。
当使用MySql、MSSQL、Oracle 10g时,使用DefaultLobHandler;使用Oracle 9i时使用OracleLobHandler。
示例代码:【转值javaWorld】
final File binaryFile = new File("c:\\workspace\\wish.jpg" );
final File txtFile = new File("c:\\workspace\\test.txt" );
final InputStream is = new
FileInputStream(binaryFile);
final Reader reader = new
FileReader(txtFile);
JdbcTemplate jdbcTemplate = new
JdbcTemplate(dataSource);
final LobHandler lobHandler = new
DefaultLobHandler();
jdbcTemplate.execute("INSERT INTO test (txt, image) VALUES(?, ?)" ,
AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void
setValues(PreparedStatement pstmt, LobCreator lobCreator)
SQLException, DataAccessException {
lobCreator.setClobAsCharacterStream(pstmt, 1, reader, (int ) txtFile.length());
lobCreator.setBlobAsBinaryStream(pstmt, 2, is, (int ) binaryFile.length());
reader.close();
is.close();
读取代码:
final Writer writer = new FileWriter("c:\\workspace\\test_bak.txt" );
final OutputStream os = new FileOutputStream(new File("c:\\workspace\\wish_bak.jpg" ));
jdbcTemplate.query("SELECT txt,image FROM test WHERE id = ?" ,
new Object[] {new Integer(1 )},
AbstractLobStreamingResultSetExtractor() {
protected void streamData(ResultSet rs) throws
SQLException, IOException, DataAccessException {
FileCopyUtils.copy(lobHandler.getClobAsCharacterStream(rs, 1 ), writer);
FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 2 ), os);
writer.close();
os.close();
备注1:OracleLobHandler要求注入CommonsDbcpNativeJdbcExtractor,否则报错:要求使用OracleConnection,不可以使用Dbcp连接池。
& bean id = " lobHandler "
class = " org.springframework.jdbc.support.lob.OracleLobHandler " &
& property name = " nativeJdbcExtractor " &
class = " org.springframework.jdbc.monsDbcpNativeJdbcExtractor " /&
property &
备注2:Oracle驱动版本很多,要求使用正确的驱动。当驱动版本错误时,报错:无法释放LobHandler;无法关闭Writer;无法从套接字读取更多的信息。执行插入操作,但是Clob类型数据为空。
浏览: 58484 次
来自: 广州
从下面的地址可以下载到一份打包好的jotmhttp://mar ...
请问博主该如何拦截呢?目前也正遇到这种问题,无法使用事务。。
是rt.jar么?
现整理一下格式再发呀,免得误导人
能给一份1.5下面打包的jar包,wangzhongjie20 ...Could not create Oracle LOB解决方法!
------解决方法--------------------------------------------------------eFailureException: Could not create Oracle LOB; nested exception is : null
at oracle.jdbc.driver.OracleConnection.unwrapCompletely(OracleConnection.java:5090) at oracle.jdbc.driver.OracleConnection.physicalConnectionWithin(OracleConnection.java:5141) at oracle.sql.BLOB.createTemporary(BLOB.java:776) 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:324) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:378) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:328) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.setBlobAsBinaryStream(OracleLobHandler.java:238) at com.norteksoft.dms.dao.impl.DocumentStorageDAOJDBC$3.setValues(DocumentStorageDAOJDBC.java:80) at org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback.doInPreparedStatement(AbstractLobCreatingPreparedStatementCallback.java:71) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:460) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:489) at com.norteksoft.dms.dao.impl.DocumentStorageDAOJDBC.saveFileData(DocumentStorageDAOJDBC.java:79) at com.norteksoft.dms.service.impl.DmsBasicServiceImpl.saveExperienceDocument(DmsBasicServiceImpl.java:116) 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:324) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174) at $Proxy108.saveExperienceDocument(Unknown Source) at com.norteksoft.dms.web.actions.manage.ContentInputAction.execute(ContentInputAction.java:87) at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at com.norteksoft.util.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:41) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6356) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) Cookies: JSESSIONID=[HcB1KAf8fpFo1Drn3xl9m1aLd61RL11zpKOgQur7tsI3iVTpX63P!-] ermermerm=[]
如异常没有得到解决,请继续查看以下解决方法:
暂无相关解决方法。
热点异常解决方法
最新异常解决方法
随机异常解决方法转-关于OracleLobCreator needs to work on [oracle.jdbc.OracleConnection]的问题一些经验总结 - npsajax - ITeye技术网站
关于OracleLobCreator needs to work on [oracle.jdbc.OracleConnection]的问题一些经验总结
这篇文章写个那些曾经和我遇到一样的问题的朋友们:
背景描述如下:
使用Spring+hibernate+Struts(可选)作为项目架构,DB中某个字段使用了Blob或Clob字段,对应的Entity中欲使用String或byte[]类型与lob类型字段对应(对String的增删修查操作方便多了,而且可以使用hibernate的二级缓存)。
关于lob类型字段如何配置,请查看如下文章:
问题描述如下:
org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [oracle.jdbc.OracleConnection$$EnhancerByProxool$$a32a8b3c]: specify a corresponding NativeJdbcE nested exception is java.lang.ClassCastException: oracle.jdbc.OracleConnection$$EnhancerByProxool$$a32a8b3c cannot be cast to oracle.jdbc.driver.OracleConnection
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:357)
解决方案如下:
1.必选按提到的书写代码
2.选择合适的lob处理句柄,即根据数据库选择正确的lobHandler,关于lobHandler的描述请看下面的说明
3.选择合适的nativeJdbcExtractor,即对应DataSource的jdbc连接器,关于nativeJdbcExtractor的描述请看后面的说明
4.如果上述还没解决问题,如果你是用的oracle9i的数据库,可以尝试使用oracle10g驱动试试如果是别的版本的数据库,尝试使用高版本的数据库驱动试试在我的项目中,就是使用了oracle10g的驱动才得以解决问题。
关于lobHandler的一些描述:Spring的api中指出了DefaultLobHandler这个句柄是适用于oracle10g的,而oracle9i应该使用OracleLobHandler。DefaultLobHandler:Default implementation of the LobHandler interface. Invokes the direct accessor methods that java.sql.ResultSet and java.sql.PreparedStatement offer.
This LobHandler should work for any JDBC driver that is JDBC compliant in terms of the spec's suggestions regarding simple BLOB and CLOB handling. This does not apply to Oracle 9i, and only to a limited degree to Oracle 10g! As a consequence, use OracleLobHandler for accessing Oracle BLOBs/CLOBs.
OracleLobHandler:Default implementation of the LobHandler interface. Invokes the direct accessor methods that java.sql.ResultSet and java.sql.PreparedStatement offer.LobHandler implementation for Oracle databases. Uses proprietary API to create oracle.sql.BLOB and oracle.sql.CLOB instances, as necessary when working with Oracle's JDBC driver. Note that this LobHandler requires Oracle JDBC driver 9i or higher!
While most databases are able to work with DefaultLobHandler, Oracle just accepts Blob/Clob instances created via its own proprietary BLOB/CLOB API, and additionally doesn't accept large streams for PreparedStatement's corresponding setter methods. Therefore, you need to use a strategy like this LobHandler implementation.
Needs to work on a native JDBC Connection, to be able to cast it to oracle.jdbc.OracleConnection. If you pass in Connections from a connection pool (the usual case in a J2EE environment), you need to set an appropriate NativeJdbcExtractor to allow for automatical retrieval of the underlying native JDBC Connection. LobHandler and NativeJdbcExtractor are separate concerns, therefore they are represented by separate strategy interfaces.
Coded via reflection to avoid dependencies on Oracle classes. Even reads in Oracle constants via reflection because of different Oracle drivers (classes12, ojdbc14) having different constant values! As this LobHandler initializes Oracle classes on instantiation, do not define this as eager-initializing singleton if you do not want to depend on the Oracle JAR being in the class path: use "lazy-init=true" to avoid this issue.
关于nativeJdbcExtractor的一些描述:
当您在 Web 应用服务器或 Spring 中配置数据源时,从数据源中返回的数据连接对象是本地 JDBC 对象(如 DB2Connection、OracleConnection)的代理类,这是因为数据源需要改变数据连接一些原有的行为以便对其进行控制:如调用 Connection#close() 方法时,将数据连接返回到连接池中而非将其真的关闭。
在访问 LOB 数据时,根据数据库厂商的不同,可能需要使用被代理前的本地 JDBC 对象(如 DB2Connection 或 DB2ResultSet)特有的 API。为了从数据源中获取本地 JDBC 对象, Spring 定义了 org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor 接口并提供了相应的实现类。NativeJdbcExtractor 定义了从数据源中抽取本地 JDBC 对象的若干方法:
Connection getNativeConnection(Connection con)
获取本地 Connection 对象
Connection getNativeConnectionFromStatement(Statement stmt)
获取本地 Statement 对象
PreparedStatement getNativePreparedStatement(PreparedStatement ps)
获取本地 PreparedStatement 对象
ResultSet getNativeResultSet(ResultSet rs)
获取本地 ResultSet 对象
CallableStatement getNativeCallableStatement(CallableStatement cs)
获取本地 CallableStatement 对象
有些简单的数据源仅对 Connection 对象进行代理,这时可以直接使用 SimpleNativeJdbcExtractor 实现类。但有些数据源(如 Jakarta Commons DBCP)会对所有的 JDBC 对象进行代理,这时,就需要根据具体的情况选择适合的抽取器实现类了。下表列出了不同数据源本地 JDBC 对象抽取器的实现类:
数据源类型
WebSphere 4 及以上版本的数据源
org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor
WebLogic 6.1+ 及以上版本的数据源
org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor
JBoss 3.2.4 及以上版本的数据源
org.springframework.jdbc.support.nativejdbc.JBossNativeJdbcExtractor
C3P0 数据源
org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor
DBCP 数据源
org.springframework.jdbc.monsDbcpNativeJdbcExtractor
ObjectWeb 的 XAPool 数据源
org.springframework.jdbc.support.nativejdbc.XAPoolNativeJdbcExtractor
摘自网上的一段话:从网上找的,我没怎么看明白,看样子是在说类加载器的相关问题。Comment by Juergen Hoeller [02/Oct/05 04:41 PM] This is likely to be caused by a class loader issue: that is, the Oracle JDBC driver classes being available from multiple class loaders. Spring's OracleLobHandler used a locally loaded OracleConnection class to check whether the given Connection handle is actually an Oracle JDBC connection. That might fail if the locally loaded OracleConnection class is not the same as the one used at the server level. Consequently, we've relaxed that check to accept any kind of Connection handle. If a ClassCastException arises within the Oracle driver's BLOB/CLOB handling (a sign of a non-OracleConnection passed in), we throw an expressive exception that indicates to specify a correct NativeJdbcExtractor. Essentially, it's a post-invocation check rather than a pre-invocation check now, which should avoid any potential class loader issues. This change should be available in Monday night's nightly Spring snapshot. Please give it a try and let us know whether it works for you! Juergen
一些参考文章:1.2.3.4.我曾经遇到的问题-5.
浏览: 315087 次
来自: 苏州
感谢楼主的无私奉献
,RoundRectTextbox 楼主真好
请问这个textbox是用来文件编辑的吗?在图中好像是labe ...

我要回帖

更多关于 电信套餐外流量资费 的文章

 

随机推荐