`
huangyuanmu
  • 浏览: 286653 次
  • 性别: Icon_minigender_1
  • 来自: 龙城
社区版块
存档分类
最新评论

jdbc操作非中文字符集oracle数据库导致的中文字符读写乱码的解决方案

阅读更多

oracle数据库向来是一个麻烦的数据库,要不它的DBA怎么就那么值钱呢,呵呵。

中文的乱码问题也是一个比较头疼的问题,在odbc的连接中,可以通过设置客户端的字符集(修改注册表)来解决中

文问题。而通过jdbc 的thin方式来连接数据库,就没那么容易了。如果数据库使用的是非中文字符集,往往在处理中

文问题的时候就很头疼。之所以头疼,是因为oracle的驱动没有提供字符集的设置参数,所以在实际使用过程中,程

序系统和数据库系统中字符集不一致的时候,就会带来乱码问题。

通常的做法有两种:

第一种是在程序中,针对中文字符做显式的字符集转换。这种方式是颇不得已而为之的方法,相信大家遇到过很多次

了。

第二种是hack oracle的驱动程序,在底层直接解决,通过给url加字符集参数,然后在驱动底层进行解析,在涉及

String类型操作的地方,在源字符集和目的字符集做相应转换。这中做法,虽然一劳永逸,但是需要比较深的功力。

另外,反编译别人的代码再做修改,也许不太好吧。不过话又说回来,oracle无情,也不要别怪人无义,^_^。mysql

、sybase、sql server的驱动都提供了字符集的设置参数,为什么单单oracle没有呢?

所以,对一、二两种办法做个折中,应该是比较好的方案。具体的办法可以如下:

针对oracle驱动调用,做一个代理,需要对ResultSet、Statement、PreparedStatement等接口,在有字符串操作方法的地方,对字符集进行转换。另外,sql中有中文字符,也是需要处理的。

这样,既不要每次都写程序转换,解决一劳永逸的问题,还不影响原有的oracle驱动程序。

 

第二种已经实现,如果有需要的tx,请留下mail。

分享到:
评论
8 楼 pjq_xiaopu 2015-03-18  
急需啊,pjq_xiaopu@163.com,谢谢。
7 楼 353790060 2015-03-05  
### Cause: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.0.152:1521:orcl?characterEncoding=iso8859-1

你好,用了你的包后出现了异常,请问要怎么解决呢
6 楼 huangyuanmu 2011-07-06  
下载链接:http://huangyuanmu.iteye.com/blog/1117181
5 楼 huangyuanmu 2011-07-06  
这个包依赖于oracle的驱动ojdbc14,使用方法参照如下:
db.jdbc.drive=cn.x.db.oracle.driver.wrapper.CommonDriver
db.jdbc.url=jdbc:oracle:thin:@192.168.0.21:1521:dbName?characterEncoding=iso8859-1
4 楼 huangyuanmu 2011-07-06  
不好意思,没能及时发到留言的各位兄弟的邮箱,我还是直接放在这里吧,有需要的尽管下载。
3 楼 guang867 2011-07-06  
还有吗。兄弟给我个 guang867@yeah.net 感谢
2 楼 dongbox 2011-04-01  
我也想要来试试,能发给我吗?dongbox@21cn.com,谢谢啦。
1 楼 jjyyis 2011-01-10  
给发个试试吧
jjyyis@qq.com

通过代码转换太费劲了。
如果有简单的使用和配置的例子就更更好了,多谢!!!

相关推荐

Global site tag (gtag.js) - Google Analytics