一个有关跨平台,Oracle,JDBC的问题
请教大家一个问题,多谢了!
目前有一个应用需要使用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