SSH+MySQL中关于大字段的设置

本文详细介绍了在Spring环境下处理CLOB和BLOB数据类型时,如何启用NativeJdbcExtractor来访问特定于供应商的JDBC方法。包括配置JdbcTemplate或OracleLobHandler,以及在不同数据源环境下选择合适的NativeJdbcExtractor。同时提供了通过简单的配置实现对CLOB对象操作的方法,并解决了配置时可能出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候必要会对数据库clob、 blob数据型进行操作,再加上spring 环境不得不要启用NativeJdbcExtractor 来帮助完成相关工作。

spring 官方文档中注明:

Sometimes you need to access vendor specific JDBC methods that differ from the standard JDBC API. This can be problematic if you are running in an application server or with a DataSource that wraps the ConnectionStatement and ResultSet objects with its own wrapper objects. To gain access to the native objects you can configure yourJdbcTemplate or OracleLobHandler with a NativeJdbcExtractor.

翻译:

有时候,你需要访问特定于供应商的JDBC方法不同于标准JDBC API。这可能会出现问题,如果你正在运行一个应用程序服务器或一个DataSource包装的连接,Statement和ResultSet对象与自己的包装对象。要获得本地对象,你可以配置你JdbcTemplate或OracleLobHandler的一个NativeJdbcExtractor。

The NativeJdbcExtractor comes in a variety of flavors to match your execution environment:

  • SimpleNativeJdbcExtractor

  • C3P0NativeJdbcExtractor

  • CommonsDbcpNativeJdbcExtractor

  • JBossNativeJdbcExtractor

  • WebLogicNativeJdbcExtractor

  • WebSphereNativeJdbcExtractor

  • XAPoolNativeJdbcExtractor

Usually the SimpleNativeJdbcExtractor is sufficient for unwrapping a Connection object in most environments. See the Javadocs for more details.

nativeJdbcExtractor 和 oracleLobHandler Bean 都设置为 lazy-init="true",这是因为nativeJdbcExtractor 需要通过运行期的反射机制获取底层的 JDBC 对象,所以需要避免在 Spring 容器启动时就实例化这两个Bean。


Spring的HibernateTemplate的既有方法完全兼容对CLOB对象的操作,仅仅需要进行简单的配置:

1.保留实体中需要保存为CLOB对象的属性为String,而在hbm映射文件中将其类型修改为org.springframework.orm.hibernate3.support.ClobStringType


2.如果仅仅这样,会抛出异常:No LobHandler found for configuration - lobHandler property must be set on LocalSessionFactoryBean
解决方法:

(1)在spring配置文件中(即beans.xml中)声明一个处理句柄:

<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驱动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值