`
pluto418
  • 浏览: 169836 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

对Mybatis数据库数据查询乱码处理

    博客分类:
  • J2EE
阅读更多
Java代码
public class StringTypeHandler implements TypeHandler<Object> {
    private static Logger logger = org.slf4j.LoggerFactory.getLogger(StringTypeHandler.class);

    private static String ISO88591_ENCODE = "ISO8859_1";
    private static String UTF8_ENCODE = "UTF-8";
    private static String GBK_ENCODE = "GBK";

    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        try {
            String paramStr = null;
            if (null != parameter) {
                paramStr = (String) parameter;
                if (GBK_ENCODE.equals(getEncode(paramStr))) {
                    if (null != parameter) {
                        ps.setString(i, new String(((String) parameter).getBytes(GBK_ENCODE), ISO88591_ENCODE));
                    }
                }
            }
            else {
                ps.setString(i, (String) parameter);
            }
        } catch (UnsupportedEncodingException e) {
            ps.setString(i, (String) parameter);
            logger.debug("StringTypeHandler encode Exception");
        }
    }

    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        try {
            if (null != rs.getString(columnName)) {
                String columnValue = rs.getString(columnName);
                if (ISO88591_ENCODE.equals(getEncode(columnValue))) {
                    return new String(rs.getString(columnName).getBytes(ISO88591_ENCODE), GBK_ENCODE);
                }
            }
        } catch (UnsupportedEncodingException e) {
            logger.debug("StringTypeHandler encode Exception");
        }
        return rs.getString(columnName);
    }

    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex);
    }

    //返回编码格式
    private String getEncode(String str) {
        String encode = null;
        if (verifyEncode(str, GBK_ENCODE)) {
            encode = GBK_ENCODE;
        } else if (verifyEncode(str, ISO88591_ENCODE)) {
            encode = ISO88591_ENCODE;
        } else if (verifyEncode(str, UTF8_ENCODE)) {
            encode = UTF8_ENCODE;
        } 

        return encode;
    }

    //判断编码格式是否相符
    private boolean verifyEncode(String str, String encode) {
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) {
                return true;
            }
        } catch (UnsupportedEncodingException e) {
            logger.debug("StringTypeHandler encode UnsupportedEncoding");
        }
        return false;
    }



配置文件
   <typeHandlers>
          <typeHandler javaType="String" jdbcType="VARCHAR"    handler="com.betdemo.interceptor.StringTypeHandler" />
   </typeHandlers>
分享到:
评论

相关推荐

    mybatis乱码的解决方法

    3. **结果集映射**:在处理查询结果时,如果实体类中的字段类型与数据库字段的字符集不匹配,也会引发乱码。 4. **日志打印**:MyBatis的日志打印中,如果日志配置的编码与实际数据编码不符,也会造成乱码显示。 5...

    jsq+mybatis+mysql中文乱码解决方案

    JSQ+MyBatis+MySQL 中文乱码解决方案 中文乱码是 JSQ、MyBatis 和 MySQL 集成时常见的问题,解决这个问题需要从多方面入手。本文将从 JSP、MyBatis 和 MySQL 三个方面来解决中文乱码问题。 JSP 中文乱码解决方案 ...

    MyBatis3的使用例子(解决乱码问题)

    4. 处理结果:获取查询结果,如果是单个结果,可以使用ResultMap进行映射。 5. 提交或回滚:在完成所有操作后,记得提交事务(SqlSession.commit())或者在出现异常时回滚(SqlSession.rollback())。 6. 关闭...

    使用mybatis plus时传入中文时出现乱码

    解决此类问题的关键在于确保整个数据处理链路中的字符编码一致,包括前端、服务器端、数据库连接字符串以及数据库本身。 1. **前端编码**:前端通常使用UTF-8编码发送请求,因此,确保前端页面和JavaScript代码的...

    解决springmvc+mybatis+mysql中文乱码问题

    总结来说,解决Java中Spring MVC、MyBatis和MySQL中文乱码问题,需要对整个系统进行全方位的字符编码检查和设置,包括前端、后端、数据库以及代码本身。只要每个环节都按照UTF-8标准配置,中文乱码问题一般就能得到...

    oracle中文乱码的解决方法

    Oracle数据库的字符集设置、操作系统环境变量以及应用程序的配置之间需要保持一致,才能正确地处理和显示中文字符。以下是一些关于如何解决Oracle中文乱码问题的关键知识点: 1. **数据库字符集**: Oracle数据库...

    springBoot-mybatis-redis 整合解决乱码问题.rar

    综上所述,这个压缩包中的项目应该包含了一个完整的Spring Boot应用,其中集成了MyBatis和Redis,并且已经处理了可能出现的乱码问题。对于初学者或开发者来说,这是一个很好的参考实例,可以帮助他们理解如何在实际...

    Mybatis查不到数据查询返回Null问题

    如果你的数据库中的数据是用UTF-8编码的,但在查询过程中没有正确地设置字符编码,那么Mybatis在映射数据到Java对象时可能会因为无法正确解析数据的编码而导致NULL值。 解决这类问题的步骤如下: 1. 检查Mybatis的...

    Mybatis-Generatory自动化生成代码

    这个工具是基于Mybatis框架的,主要用于生成Mapper接口、Mapper XML文件以及对应的Java Bean类,使得在数据库操作相关的编码工作中能够更加便捷。 在Mybatis-Generatory中,主要涉及以下几个核心概念: 1. **逆向...

    mybatis自动生成工具generator

    DAO(Data Access Object)接口则提供了对数据库操作的方法,包括查询、插入、更新和删除等。MBG通过解析数据库表结构,可以自动生成这些类和接口,这样开发者就可以专注于业务逻辑的实现,而不用关心基础的数据访问...

    mybatis-sql生成器

    这个工具基于Java,与MyBatis框架紧密集成,支持XML配置和注解方式,适用于各种数据库环境。 在使用MyBatis-SQL生成器时,首先要理解其核心组件和工作原理。该生成器通过读取配置文件(通常为generatorConfig.xml)...

    mybatis逆向工程,带中文注释

    MyBatis逆向工程是一种强大的工具,它可以帮助开发者快速生成基于数据库表的Java实体类(POJOs)、Mapper接口及XML映射文件,极大地提高了开发效率。在这个名为"mybatis逆向工程,带中文注释"的项目中,我们将探讨...

    myBatis3.2.7增删改查 源码

    3. `乱码处理.txt` 可能是关于如何处理字符编码问题的说明,因为在数据库操作中,正确处理字符编码是至关重要的。 4. `myBatis01` 这个文件名没有明确的扩展名,可能是myBatis的映射文件(Mapper XML文件),或者是...

    mybatis 高级映射实例

    MyBatis是一个强大的Java持久层框架,它允许开发者将SQL语句与Java代码分离,提供了一种灵活的方式来处理数据库操作。在本高级映射实例中,我们将深入探讨如何使用XML方式编写Mapper文件,以及如何利用关联嵌套和...

    Spring+SpringMVC+MyBatis所需jar包(全部)

    - 使用MyBatis进行数据库操作,编写Mapper接口和XML配置文件,定义SQL查询。 - 配置Spring与MyBatis的整合,如SqlSessionFactoryBean和DataSource,使Spring能够管理MyBatis的数据源和SqlSessionFactory。 - 解决...

    MyBatis教程.docx

    MyBatis 是一个流行的持久层框架,它允许开发者将 SQL 查询与 Java 代码直接绑定,提供了一种简单而强大的方式来处理数据库操作。以下是一份详细的 MyBatis 开发环境搭建指南,包括必要的软件版本选择和配置步骤。 ...

    mysql数据库乱码之保存越南文乱码解决方法

    当数据插入到数据库时,如果对应字段的字符集不支持所插入的字符,仍然会出现乱码。这里提到,数据库默认使用GBK字符集,对于越南文来说,这就导致了乱码问题。 解决方案是修改特定字段的字符集和校对规则。校对...

    ibatis乱码解决方法(ibatis独立)

    - 可以自定义MyBatis拦截器,对输入参数进行编码转换,或者在返回结果前进行解码处理。 6. **日志记录**: - 日志输出时,确保日志框架(如Log4j、SLF4J等)的配置文件中指定了正确的字符集,避免在打印SQL语句时...

    基于SpringBoot+Thymeleaf的招聘系统,数据库为MySQL+Druid+MyBatis,搭配Redis内存数据库

    主要涉及技术包含Maven、Spring、SpringBoot、MyBatis、Redis等。 项目前端模板引擎使用Thymeleaf,数据源使用Druid。 使用注意 1、开发工具的选择 本项目使用 Intellij IDEA 2019.3.5 版本开发,若使用 Eclipse/...

    mybatis-demo3-crud.zip

    通过上述步骤,我们可以使用MyBatis方便地进行单表查询,无论是获取全部数据,还是根据条件筛选,MyBatis都能提供高效、灵活的支持。在实际项目中,理解并熟练掌握这些基本操作,对于提升开发效率和代码质量有着至关...

Global site tag (gtag.js) - Google Analytics