• ibatis访问oracle数据库US7ASCII中文乱码问题


    今天碰到一个问题,使用ibatis框架访问编码为US7ASCII的oracle数据中文乱码,

    找了很久终于有了解决方案
    首先 SqlMap-Config.xml按如下配置
    <sqlMapConfig>
        <!--<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。 -->
        <settings lazyLoadingEnabled="true" useStatementNamespaces="true" />
        <typeAlias type="com.jerry.spring.util.EncodingStringTypeHandlerCallback" alias="ENCODE"/>  
         <typeHandler callback="ENCODE" javaType="java.lang.String"/> 
        <sqlMap resource="com/jerry/spring/model/User_SqlMap.xml" />
        <sqlMap resource="com/jerry/spring/model/TimeRecord_SqlMap.xml" />
    </sqlMapConfig> 
    EncodingStringTypeHandlerCallback
     
    EncodingStringTypeHandlerCallback类继承TypeHandlerCallback接口
    import java.sql.SQLException;
     
    import com.ibatis.sqlmap.client.extensions.ParameterSetter;
    import com.ibatis.sqlmap.client.extensions.ResultGetter;
    import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
     
    public class EncodingStringTypeHandlerCallback implements TypeHandlerCallback
    {
       // boolean flag = InitParam.getDbEncoding("DbEncoding");
     
        boolean flag = true;
        public Object getResult(ResultGetter arg0) throws SQLException {
            //西文字符集转换
            if(flag){
                return StringUtil.ISOtoGBK(arg0.getString());
            }
            return arg0.getString();
         }
     
         public void setParameter(ParameterSetter setter, Object arg1) throws SQLException {
            if(arg1 instanceof String)
            {
              //西文字符集转换
                if(flag){
                    setter.setString(StringUtil.GBKtoISO((String)arg1));
                }
                else{
                    setter.setString((String)arg1);
                }
            }
         }
         public Object valueOf(String arg0) {
             //西文字符集转换
             if(flag){
                 return StringUtil.ISOtoGBK(arg0);
             }
            return arg0;
         }
    }  
     
    StringUtil 
    public class StringUtil {
        public static String ISOtoGBK(String s) { 
            if (s == null || (s.trim()).equals(""))
                return s;
            try {    
                s = new String(s.getBytes("ISO8859-1"), "GB2312");    
            } catch (Exception e) {    
            }    
            return s;    
        }  
        
        public static String GBKtoISO(String s) {   
            if (s == null || (s.trim()).equals(""))
                return s;
            try {    
                s = new String(s.getBytes("GBK"), "iso-8859-1");    
            } catch (Exception e) {    
            }    
            return s;    
        }  
    }
     
    至此中文乱码问题顺利解决
    欢饮关注个人开源代码
    https://github.com/zuifengke/windy
    代码在MedQCWebApp项目下
     
     
     
     
     
     
     
     





  • 相关阅读:
    2021.9.15 单一职责原则
    2021.9.21 Hive元数据
    2021.9.22 抽象工厂方法模式(人与肤色)
    2021.9.25 Hive安装
    1021每日博客
    1027每日博客
    1018每日博客
    1028每日博客
    1026每日博客
    1025每日博客
  • 原文地址:https://www.cnblogs.com/zuifengke/p/4a768c62237169ea832e1741492110ec.html
Copyright © 2020-2023  润新知