一、问题描述:

1、oracle数据库中的数据是以US7ASCII编码集保存的,用程序读取时中文出现乱码现象。

2、系统中设置的NLS_LANG变量对程序数据库操作没有影响,只对plsql dev和navicat这些客户端有用。

二、问题分析:

1、程序默认使用的编码是系统的默认编码,但开发工具使用的编码集可能与系统不同,JDBC使用的编码与代码字符集一致,如下的GBK就是开发工具的编码。成功。

三、解决办法:

1、对单个字段使用String的方法在转码后构造一个新字段。

newString(filed.getBytes("ISO-8859-1"),"GBK")

2、使用指定字符集对所有字符进行解码。输入LIST对象、解码集和编码集。

/**

*对数据库返回数据进行集体解码

* @param obj

* @param origCode

* @param desCode

* @return

*/

public List decodeObj(Object obj,StringorigCode,String desCode){

if(obj instanceof List){

List objList= (List) obj;

for(ObjecttempObj:objList){

PropertyDescriptor[] properties =PropertyUtils.getPropertyDescriptors(tempObj.getClass());

for(int i=0;i<properties.length;i++){

String name = properties[i].getName();

if("class".equals(name)){

continue;

}

try {

Class classType =PropertyUtils.getPropertyType(tempObj, name);

if(classType.equals(String.class) //对所有string类型进行转码

&&PropertyUtils.isReadable(tempObj, name)

&&PropertyUtils.isWriteable(tempObj, name)){

Object value =PropertyUtils.getSimpleProperty(tempObj, name);

if(value!=null){

try {

PropertyUtils.setProperty(tempObj,name, new String(((String)value).getBytes(origCode),desCode));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

} catch (IllegalAccessException | InvocationTargetException

| NoSuchMethodException e) {

//根据对象反射,不会出现错误

}

}

}

}

return (List) obj;

3、使用指定字符集对所有输入字符集进行编码,顺序和编码相反。

/**

*对数据库的条件参数进行编码。

* @param map

* @param origCode

* @param desCode

* @return

*/

public Map<String, Object>encode(Map<String, Object> map,String origCode,String desCode){

if(map.size()>0){

for(Stringkey:map.keySet()){

Object value= map.get(key);

if(valueinstanceof String){

if(value!=null){

try {

map.put(key, newString(((String)value).getBytes(origCode),desCode));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

}

}

return map;

}

4、LIST输出的时候调用decodeObj,条件输入的时就汉字就调用encode.

5、PropertyUtils来至org.apache.commons.beanutils.PropertyUtils;

java解决对US7ASCII编码的ORACLE数据库数据解码相关推荐

  1. C# 操作American_America.US7ASCII编码的Oracle数据库出现乱码的问题。

    最近一个项目,需要连接Oracle数据库, 使用Oracle.ManagedDataAccess库连接,出现中文乱码, 排查发现,Oracle服务端是采用American_America.US7ASC ...

  2. C#访问US7ASCII编码的oracle数据库

    前段时间node中调用oracle数据库乱码,oracle数据库是用的US7ASCII编码的,而node-oracledb模块调用oracle数据库时始终使用了AL32UTF8字符集,导致不管怎么设置 ...

  3. Java案例:利用JDBC连接Oracle数据库

    Java案例:利用JDBC连接Oracle数据库 一.准备工作 1.启动SQL Developer,设置java.exe路径 2.在Oracle SQL Developer里,新建数据库连接 连接名: ...

  4. Oracle数据库数据查询语句示例(包含大部分常用语句)

    Oracle数据库数据查询语句示例(包含大部分常用语句) 目标 本文用到的关系模式 语句示例 1.在创建的s,p,j和spj表中完成以下查询 (1)查询零件重量在10-20之间(包括10和20)的零件 ...

  5. oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明:  1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL  2.如果熟悉命令,建议用exp/i ...

  6. cmd imp导入dmp文件_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤...

    正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...

  7. oracle临时表经常被锁_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤

    正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...

  8. 误删除 Oracle 数据库数据的恢复方法

    学习数据库时,我们只是以学习的态度,考虑如何使用数据库命令语句,并未想过工作中,如果误操作一下,都可能导致无可挽回的损失. 今天主要以oracle数据库为例,介绍关于表中数据删除的解决办法.(不考虑全 ...

  9. Oracle 数据库数据排名函数:rank() 和dense_rank() 。

    Oracle 数据库数据排名函数:  rank() 和dense_rank() . --------------------------------------------间断排名(也称强制排名)   ...

最新文章

  1. linux shell数学计算器,技术|使用 GNU bc 在 Linux Shell 中进行数学运算
  2. 在Visual Studio设置隐藏cmd,GTK程序有效
  3. 计算机无法显示移动硬盘,移动硬盘在我的电脑中不显示了 怎么处理?
  4. SqlServer 2014还原数据库时提示:无法在已有的上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
  5. 综合缴费系统|综合缴费|话费充值
  6. arm926ej_EJB超时策略:它们如何提供帮助?
  7. maven 对于java的要求_如何在Maven中表达对Java EE功能的依赖以过渡到Java 9?
  8. python中numpy matplotlib绘图教程_利用numpy+matplotlib绘图的基本操作教程
  9. ArcGIS 拓扑验证与编辑共享要素
  10. 火狐浏览器设置url编码_URL编码与解码
  11. magisk安装失败_俄罗斯官改MIUI MiRoom安装刷入教程
  12. C#中如何调出工具箱
  13. Strust2 success sucess
  14. OpenGL学习二十九:模板缓冲区与模板测试
  15. 云计算,经济危机下爆发
  16. Express WEB 应用开发框架-姜威-专题视频课程
  17. 写给大数据初级开发者或准备转行大数据的人
  18. 地图大量数据查询与渲染——bug及解决方案
  19. 你知道吗?CAD电子目录≠产品CAD库
  20. SAP 教程之 04 在 SAP 中创建 IDoc 类型 [WE30]

热门文章

  1. 正态分布-python建模
  2. 怎么用dd命令测试U盘读写速度
  3. vue服务端渲染 MySQL_Vue 服务端渲染(SSR)
  4. rm 输入/输出错误
  5. awx文件解析_9awx.com
  6. [转]关闭Google安全搜索,实现无限制搜索
  7. python将电视剧按收视率进行排序_怎么用编程语言分析电影收视率_编程语言_python_python教程_课课家...
  8. HTML+CSS抗疫期末大作业:抗疫网站设计——新冠抗疫(4页) 学生DW网页设计作业成品 web课程设计网页规划与设计...
  9. 学术-物理-维空间:零维空间
  10. JDBC四:操作Blob类型字段