一个有关跨平台,Oracle,JDBC的问题

rainmanzhu 2001-09-21 11:10:24

请教大家一个问题,多谢了!

目前有一个应用需要使用jdbc驱动oracle数据库,数据库服务机和客户机均运行在windows上,但oracle安装时候选择的
NLS_LANG=AMERICAN_AMERICA.US7ASCII,里面的数据包含大量中文,而客户机没有安装任何oracle组件,只有oracle jdbc
driver,操作系统是中文windows 2000。
写了一个最简单的程序测试:

import java.sql.*;

import oracle.jdbc.driver.*;
import oracle.jdbc.pool.*;
import oracle.jdbc.pool.OracleDataSource;

public class DBTest {
public static void main(String[] args) throws Exception {
String url = "jdbc:oracle:thin:@192.168.0.111:1521:Test";
// String url = "jdbc:oracle:oci8:@";

Connection con=null;
Statement stmt;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");

} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
OracleConnectionPoolDataSource ocpds;
try {

ocpds = new OracleConnectionPoolDataSource();
ocpds.setURL(url);
ocpds.setUser("scott");
ocpds.setPassword("tiger");

con = ocpds.getConnection();

// con = DriverManager.getConnection(url,"scott", "tiger");
con.setAutoCommit(true);

stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM scott.emp");
while(rs.next()) {
System.err.println(rs.getString("job") + " = " + new String(rs.getString("job").getBytes("ISO-8859-1")));
System.err.println();
}

} catch(SQLException ex) {
System.err.println("-----SQLException-----");
System.err.println("SQLState: " + ex.getSQLState());
System.err.println("Message: " + ex.getMessage());
System.err.println("Vendor: " + ex.getErrorCode());
ex.printStackTrace();
} finally {
con.close();
}
}

发现rs.getString("job")全是乱码,必须按 new String(rs.getString("job").getBytes("ISO-8859-1"))来读取才行!

我不希望程序里出现这么多getBytes,请问大家是否遇到过相同问题或是能提供解决方法

我找了几个方法来解决都不行:
1。找oracle jdbc文档,看看能否通过设置jdbc url来使得jdbc自己来转换charset,但我没找到能解决问题的文档。只有
oracle documents里的一篇“JDBC and NLS”有点相关。
2。安装新的NNLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK的oracle数据库,但倒库的时候失败了!如果用exp/imp,中文数据全部都变成了乱码;如果倒出insert语句,日期
型字段又有am/pm (中文oracle要求用上午/下午)



--
 ("`-''-/").___..--''"`-._
  `6_ 6 )  `-. (   ).`-.__.`) 
  (_Y_.)' ._  ) `._ `. ``-..-' 
  `--'_..-_/ /--'_.' ,'      
(ll).-'' (((!.' ((!.-' 我是雨人

Rainman zhu
rainmanzhu@yahoo.com
http://club.china.alibaba.com


---------------------------------------------------------------------
To unsubscribe, e-mail: alibaba-rnd-unsubscribe@mail.alibaba-inc.com
For additional commands, e-mail: alibaba-rnd-help@mail.alibaba-inc.com

...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
redstarstar 2001-09-23
  • 打赏
  • 举报
回复
在classpath下加入oracle_home下jdbc\lib\nls_charset12.zip试试!
rainmanzhu 2001-09-22
  • 打赏
  • 举报
回复
干吗哈哈?
hxflx 2001-09-22
  • 打赏
  • 举报
回复
把oracle的字符集改了怎么样?
NLS_LANG=AMERICAN_AMERICA.US7ASCII-》 ZHS16CGB231280
wanderinrain 2001-09-22
  • 打赏
  • 举报
回复
我的情况补充:我的WEBLOGIC在UNIX下。我在WINDOWS客户端试验用JDBC直连数据库没此问题。
wanderinrain 2001-09-22
  • 打赏
  • 举报
回复
我现在也遇到类似的问题不知如何解决。
我的情况是在WIN2000下的ORACLE8i,用Weblogic5.1的servlet程序中用JDBC读取,结果凡是中文字段的东西传到浏览器都成了乱码。
你是否用new String(rs.getString("job").getBytes("ISO-8859-1"))可正确得到?
oracle的有关文档我也看了,但没太弄明白它提到有一个zip类包中有一些支持语言转换的,但不知如何使用。
你若弄清楚可否帮助我? email:tangpengmail@163.net
wilddragon 2001-09-22
  • 打赏
  • 举报
回复
哈哈

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧