hibernate3.0 org.hibernate.engine.jdbc.JdbcSupportLoader

/*** Eclipse Class Decompiler plugin, copyright (c) 2012 Chao Chen (cnfree2000@hotmail.com) ***/
package org.hibernate.engine.jdbc;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JdbcSupportLoader {
	private static final Logger log = LoggerFactory
			.getLogger(JdbcSupportLoader.class);

	private static final Class[] NO_ARG_SIG = new Class[0];
	private static final Object[] NO_ARGS = new Object[0];

	public static JdbcSupport loadJdbcSupport(Connection jdbcConnection) {
		return new JdbcSupportImpl(useContextualLobCreation(jdbcConnection));
	}

	private static boolean useContextualLobCreation(Connection jdbcConnection)
  {
    if (jdbcConnection == null) {
      log.info("Disabling contextual LOB creation as connection was null");
      return false;
    }
    Method createClobMethod;
    try
    {
      DatabaseMetaData meta = jdbcConnection.getMetaData();

      if (meta.getJDBCMajorVersion() < 4) {
        log.info("Disabling contextual LOB creation as JDBC driver reported JDBC version [" + meta.getJDBCMajorVersion() + "] less than 4");

        return false;
      }

    }
    catch (SQLException connectionClass)
    {
      Class connectionClass = Connection.class;
      createClobMethod = connectionClass.getMethod("createClob", NO_ARG_SIG);
      if (!(createClobMethod.getDeclaringClass().equals(Connection.class)));
    }
    catch (NoSuchMethodException ignore)
    {
      try
      {
        Object clob = createClobMethod.invoke(jdbcConnection, NO_ARGS);
        try {
          Method freeMethod = clob.getClass().getMethod("free", NO_ARG_SIG);
          freeMethod.invoke(clob, NO_ARGS);
        }
        catch (Throwable ignore) {
          log.trace("Unable to free CLOB created to test createClob() implementation : " + ignore);
        }
        return true;
      }
      catch (Throwable t) {
        log.info("Disabling contextual LOB creation as createClob() method threw error : " + t);

        break label203:

        ignore = 
          ignore; }
    }
    label203: return false;
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值