標籤:
今天碰到一個問題,使用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項目下
來自為知筆記(Wiz)
ibatis訪問oracle資料庫US7ASCII中文亂碼問題