package com.abacus.farex.cmdproc.dao.impl.sqlmap.typehandler; import java.lang.reflect.Proxy; import java.sql.PreparedStatement; import java.sql.SQLException; import net.java.dev.reusablecomponents.lang.Enum; import oracle.jdbc.driver.OraclePreparedStatement; import com.ibatis.common.jdbc.logging.PreparedStatementLogProxy; import com.ibatis.common.logging.Log; import com.ibatis.common.logging.LogFactory; import com.ibatis.sqlmap.client.extensions.ParameterSetter; import com.ibatis.sqlmap.client.extensions.ResultGetter; import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback; public class CharStringTypeHandlerCallback implements TypeHandlerCallback { //using PreparedStatementLogProxy logger. private static final Log log = LogFactory.getLog(PreparedStatement.class); /** * {@inheritDoc} */ public Object getResult(ResultGetter getter) throws SQLException { String result = getter.getString(); if(result!=null) return result.trim(); else return null; } /** * {@link OraclePreparedStatement#setFixedCHAR(int, String)} {@inheritDoc} */ @SuppressWarnings("deprecation") public void setParameter(ParameterSetter setter, Object parameter) throws SQLException { String str = null; if(parameter instanceof Enum){ str=((Enum)parameter).toString(); }else{ str=(String) parameter; } //System.out.println("=================="+setter.getPreparedStatement().getClass().getName()); OraclePreparedStatement oracleState=null; weblogic.jdbc.vendor.oracle.OraclePreparedStatement wlOracleState=null; try { if(setter.getPreparedStatement() instanceof OraclePreparedStatement){ oracleState = (OraclePreparedStatement) setter.getPreparedStatement(); }else if(setter.getPreparedStatement() instanceof org.apache.commons.dbcp.DelegatingStatement){ //ibatis sqlmap sql debug disable with dbcp connection pool oracleState = (OraclePreparedStatement) ((org.apache.commons.dbcp.DelegatingStatement)setter. getPreparedStatement()).getDelegate(); }else if(setter.getPreparedStatement() instanceof weblogic.jdbc.vendor.oracle.OraclePreparedStatement){ //ibatis sqlmap sql debug disable with jndi connection pool wlOracleState = (weblogic.jdbc.vendor.oracle.OraclePreparedStatement)setter.getPreparedStatement(); } else{ //ibatis sqlmap sql debug enable with dbcp connection pool PreparedStatement ps=((PreparedStatementLogProxy)Proxy.getInvocationHandler( setter.getPreparedStatement())).getPreparedStatement(); if(ps instanceof org.apache.commons.dbcp.DelegatingStatement){ oracleState = (OraclePreparedStatement) ((org.apache.commons.dbcp.DelegatingStatement)ps).getDelegate(); } else if(ps instanceof weblogic.jdbc.vendor.oracle.OraclePreparedStatement){ //ibatis sqlmap sql debug disable with jndi connection pool wlOracleState = (weblogic.jdbc.vendor.oracle.OraclePreparedStatement)ps; } } //To log parameters. if (log.isDebugEnabled()) setter.getPreparedStatement().setString(setter.getParameterIndex(),str); System.out.println("---------------------- weblogic.jdbc.vendor.oracle.OraclePreparedStatement@"+wlOracleState); if(null!=wlOracleState){ System.out.println("---------------------- Use weblogic.jdbc.vendor.oracle.OraclePreparedStatement@"+wlOracleState); wlOracleState.setFixedCHAR(setter.getParameterIndex(), str); }else if(null!=oracleState) { System.out.println("---------------------- Use org.apache.commons.dbcp.DelegatingStatement ----------------------"); oracleState.setFixedCHAR(setter.getParameterIndex(), str); }else{ System.out.println("---------------------- Use default ----------------------"); setter.getPreparedStatement().setString(setter.getParameterIndex(), str); } } catch (Exception e) { e.printStackTrace(); } } /** * {@inheritDoc} */ public Object valueOf(String s) { return s; } }