`
huangyuanmu
  • 浏览: 289840 次
  • 性别: 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

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

相关推荐

    Java中文乱码浅析及解决方案

    综上所述,解决Java中文乱码问题的关键在于确保整个程序的编码一致性,包括源代码、编译器、运行环境、文件读写、网络传输以及数据库操作等环节。通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保...

    Java解决WE8DEC字符集乱码问题

    总结来说,解决Java中的WE8DEC字符集乱码问题涉及多个层面,从文件读写、数据库交互到Web请求和数据交换,都需要正确设置和处理字符编码。理解这些环节并应用适当的编码策略,是确保程序正确处理各种字符集的关键。

    oracle-java.rar_oracle

    "oracle中文乱码.doc"可能包含了更详细的步骤和案例分析,包括如何查询数据库字符集、修改数据库字符集、调整JDBC连接配置等。而"www.pudn.com.txt"可能是从论坛或其他资源网站收集的相关技术讨论或解决方案。 总的...

    ibatis乱码解决方法(ibatis独立)

    本文将详细讨论如何解决Ibatis中的乱码问题,特别是涉及到GBK和ISO_8859_1编码格式时的解决方案。 首先,我们需要了解乱码产生的原因。乱码通常是因为字符编码不一致导致的。在Java和数据库之间进行数据交互时,...

    classes14.jar

    在Java 1.4时代,Oracle数据库的某些特定字符集可能无法被标准的JDBC驱动完全支持,这可能导致在执行SQL语句、读写数据时出现乱码或错误。在这种情况下,"classes14.jar"就发挥了关键作用。它提供了对更多Oracle特定...

    深入剖析Java 编程中的中文问题及建议最优解决方法

    3. 数据库操作的乱码:与数据库交互时,如MySQL或Oracle,需要确保数据库连接的字符集设置与Java应用程序保持一致。这通常在数据库连接URL、JDBC驱动配置或数据库服务器配置中完成。 4. 字符串编码与解码:使用`...

    Java语言的中文处理问题完整解决方案

    Java采用Unicode字符集,它包含了几乎所有的汉字,保证了对中文字符的支持。但在实际应用中,不同的系统、文件或网络传输可能使用不同的字符编码,如GBK、GB2312、UTF-8等,这就可能导致中文乱码问题。 二、输入...

    Java字符转换[参照].pdf

    连接MySQL时,可以在连接字符串中设置`useUnicode=true&characterEncoding=gb2312`来指定字符集。 总的来说,Java中的字符编码转换涉及多个层次,包括JVM设置、编译过程、文件读写、XML处理、字符串操作以及数据库...

    专题之Java字符转换.pdf

    对于MySQL,连接字符串可以设置`useUnicode=true&characterEncoding=gb2312`来指定字符集。 总之,Java字符编码转换是一个复杂且需要细心处理的问题,开发者需充分理解各种编码方式和Java的相关API,以确保数据的...

    java 中文 技术 txt

    5. **JDBC与数据库**:当与数据库交互,特别是中文数据时,确保数据库连接URL、SQL语句以及数据库表的编码设置与Java程序一致。 6. **正则表达式**:在使用正则表达式处理中文字符时,需使用`\u`转义序列,如`...

    数据库术语-UTF_8

    在创建数据库表时,设置正确的字符集(如`CHARACTER SET utf8`)和校对集(如`COLLATE utf8_general_ci`)至关重要,它们决定了数据库如何存储和比较文本数据。 Java作为跨平台的编程语言,内置了对UTF-8的支持。...

    weblogic10配置

    4. **数据库连接配置**:如果涉及到数据库操作,确保数据库连接URL中包含字符集参数,例如`jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8`。 除了上述方法,还需要注意WebLogic服务器...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...

    eai 开发工作总结

    为解决乱码问题,开发者需要确保在IDE、数据库、文件读写以及网络通信等环节统一使用正确的字符集,例如UTF-8。 7. **Eclipse配置与优化**: - **Eclipse Problem选项**: 这是指Eclipse的错误和警告提示设置,可以...

    jsp 教程

    - **5.8.1 连接Oracle数据库**:使用特定于Oracle的JDBC驱动来连接Oracle数据库。 - **5.8.2 连接MySql数据库**:使用MySQL的JDBC驱动来连接MySQL数据库。 - **5.9 查询Excel电子表格** - 通过JDBC-ODBC桥接器...

    JSP教程——必看.pdf

    - **3.1.2 处理汉字信息**:解决中文乱码问题,通常需要设置正确的编码。 - **3.1.3 常用方法举例**:例如使用`getHeader()`获取HTTP头部信息。 - **3.1.4 用户注册**:通过`request`对象收集用户的注册信息。 -...

Global site tag (gtag.js) - Google Analytics