今天碰到一个问题,使用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项目下
 
 
 
 
 
 
 
 

ibatis访问oracle数据库US7ASCII中文乱码问题的更多相关文章

  1. 将现有的sql脚本导入 Oracle 数据库,中文乱码问题

    将现有的sql 脚本导入 Oracle数据库 比如 在windows 系统下,可以写一个 bat 来实现直接导入 如:bat 中的内容如下,logs.log 将会记录执行日志 sqlplus user ...

  2. (ASP.NET)C#连接Oracle数据库示例(中文乱码问题解决)

    接手了一个遗留的ASP.NET系统,数据库用的是Oracle,以前没搞过.NET和Oracle数据库,数据库搞了半天才解决乱码问题,在此做个笔记备忘. 1.下载安装ODAC 1)请去Oracle官网下 ...

  3. oracle 数据库插入中文乱码

    一. 查询数据库编码 select userenv('language') from dual; 查询服务器编码 select * from v$nls_parameters; 推出sql查询系统编码 ...

  4. 向Oracle数据库插入中文乱码解决方法

    解决方法:    第一步:sqlplus下执行:select userenv('language') from dual;//查看oracle字符集     注:如果oracle字符集与后台代码设置的 ...

  5. linux下occi操作oracle数据库,中文乱码的问题

    转载:http://www.linuxidc.com/Linux/2008-02/11238.htm 前几日调通了OCI连接数据库的问题后,用Oracle自带的例子测试了一下,能正常读取数据(都是英文 ...

  6. PL/SQL连接Oracle数据库,中文乱码,显示问号

    问题描述: 登陆PL/SQL,执行SQL语句后,输出的中文标题显示成问号????:条件包含中文,则无数据.         如果不是中文,需要修改注册表值,方法如下: 进入注册表:Win+r,输入re ...

  7. 使用OCCI操作Oracle数据库写入中文乱码

    解决方法如下: oracle::occi::Environment *pOracleOcciEnv = Environment::createEnvironment(oracle::occi::Env ...

  8. C++使用ocilib访问oracle数据库

    引用: http://blog.csdn.net/u011311985/article/details/51221898 测试程序我放到 http://download.csdn.NET/detail ...

  9. 解决在Linux下安装Oracle时的中文乱码问题

    本帖最后由 TsengYia 于 2012-2-22 17:06 编辑 解决在Linux下安装Oracle时的中文乱码问题 操作系统:Red Hat Enterprise Linux 6.1数据库:O ...

随机推荐

  1. [Effective C++ --026]尽可能延后变量定义式的出现时间

    引言 每一次构造和析构都需要成本,因此我们在设计代码的时候,应该尽可能考虑到构造和析构的成本. 第一节 延后实现 考虑有以下的代码: void encrypt(string& s); stri ...

  2. [Effective C++ --014]在资源管理类中小心copying行为

    第一节 <背景> 条款13中讲到“资源取得的时机便是初始化时机”并由此引出“以对象管理资源”的概念.通常情况下使用std中的auto_ptr(智能指针)和tr1::shared_ptr(引 ...

  3. 带缓冲I/O和不带缓冲I/O的区别与联系

    转自:http://blog.csdn.net/lmh12506/article/details/6803847 首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用, ...

  4. 分布式应用处理方式 - Remoting

    分布式应用程序 所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. ...

  5. codereview介绍

    1. 定义: Code review is systematic examination (often known as peer review) of computer source code. I ...

  6. ifndef/define/endif 的作用

    转载自百度百科 ,感谢度娘 1 2 3 #ifdef语句1 //程序2 #endif 可翻译为:如果宏定义了语句1则执行程序2. 作用:我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码 ...

  7. 我的第一篇——nginx+naxsi总结篇1

    今天是我正式在Linux下安装nginx的第一天吧,搜索,查看,安装,这之间肯定是或多或少的遇到了很多的问题,不管是大的还是小的,都应该记录下来,或许以后还会用到,或许会帮到其他人. 首先,先说一下, ...

  8. [未完成]关于java基础数据类型中的一些总结

    java基本数据类型转换图: 有时候也把char型成为字符型,是加上字符型也是一种特殊的整数类型.

  9. 基于ubuntu和windows连接

    对于ubuntu和centos安装软件是不一样的 对于ubuntu是  apt-get install  +软件名字 但是对于centos是 yum install +软件名字 所以ubunu远程连接 ...

  10. hadoop mapreduce 优化

    http://www.cnblogs.com/c840136/archive/2013/03/10/2952887.html http://irwenqiang.iteye.com/blog/1535 ...