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项目下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
2011-04-22 webgrid 添加行是不允许相同