java oracle中文乱码的解决方法:1、将读到的字符串s,则进行纯手工转码,代码为【new String(s.getByte(A), B)】;2、使用druid对各种数据库驱动做了一层统一的封装,编码转换。
【相关学习推荐:java基础教程】
java oracle中文乱码的解决方法:
转码方法
当Java读Oracle遇到中文乱码时,我们就需要进行转码。转码的方法很多,我接触过的有以下几种。
1、纯手工转码
将读到的字符串s进行转码,如:new String(s.getByte(A), B)
2、Druid
druid是阿里巴巴自己开发的一个驱动,它其实是对各种数据库驱动做了一层统一的封装,添加日志、告警、编码转换等功能。配置方式如下:
<bean id=opensqlDataSource class=org.apache.commons.dbcp.BasicDataSource destroy-method=close> <property name=driverClassName value=com.alibaba.china.jdbc.SimpleDriver /> <property name=url value=jdbc:oracle:thin:@10.20.130.210:1521:dwtest /> <property name=username value=etl /> <property name=password value=etl /> <property name=connectionProperties><value>serverEncoding=ISO-8859-1;clientEncoding=GBK;defaultRowPrefetch=50;bigStringTryClob=true</value></property> </bean>
其中connectionProperties中包含serverEncoding、clientEncoding两个属性。在Java读取到数据后,如果发现serverEncoding、clientEncoding不同,则会自动进行如下编码转换。
new String(s.getByte(serverEncoding), clientEncoding)
3、weblade ibatis callback
它采用了如下注册ibatis callback的方式。
<bean id=sqlMapExecutorDelegate class=com.asc.alibaba.dao.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate> <property name=mappedStatementStrategy ref=mappedStatementStrategy /> <property name=handlerList> <list> <ref bean=stringHandler /> <!-- <ref bean=objectHandler />--> </list> </property> </bean> <bean id=stringHandler class=com.asc.alibaba.dao.ibatis.handler.TypeHandlerAdapter> <property name=javaType value=java.lang.String /> <property name=handlerCallback ref=stringTypeHandlerCallback /> </bean>
使得在默认情况下,程序会把ibatis获取到的String进行如下编码转换:
new String(s.getByte(“ISO-8859-1”), “GBK”)
该二方库引入的方式如下:
<dependency> <groupId>com.alibaba.asc.shared</groupId> <artifactId>weblade.core.ibatisext</artifactId> <version>1.2.0-SNAPSHOT</version> </dependency>
Ibatis callback隐藏了编码转换的过程,但问题是它对项目中所有的数据源生效。使得无法同时透明地支持需要转码和无需转码的数据源。
相关推荐:编程视频课程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。