目前,大部分的JDBC驱动程序并不是针对中文系统来设计的(中文数据大都采用ISO-8859-1编码方式),所以在数据读写过程中往往需要字符编码的转化。
如果系统运行在中文操作系统平台下,则:
1) 中文字符的读入,可以采用如下的代码:
strChinese= new String(String(rs.getObject(j).toString().getBytes("ISO-8859-1"));
对于Win2000平台下,采用Weblogic 6.0所提供的JDBC驱动来读入中文代码可如下来编写(例子中进行了字符运算):
Driver myDriver = (Driver) Class.forName("weblogic.jdbc.mssqlserver4.Driver").newInstance();
conn = myDriver.connect("jdbc:weblogic:mssqlserver4", props);
conn.setCatalog("labmanager");
Statement st = conn.createStatement();
file://execute a query
String testStr;
String testTempStr = new String() ;
testStr = new String(testTempStr.getBytes("ISO-8859-1"));//编码转化
DatabaseMetaData DBMetaData =conn.getMetaData();
ResultSet rs = DBMetaData.getTables(null, null,null,new String[]{"TABLE"} );
while (rs.next()){
for(int j=1; j<=rs.getMetaData().getColumnCount(); j++){
testStr = testStr +String(rs.getObject(j).toString().getBytes("ISO-8859-1"));
}
}
2) 中文的输出。中文的输出与读入正好是个逆过程。我们需要将字符的系统缺省编码转化为JDBC支持的ISO-8859-1编码。代码可以如下编写:
tempBytes=strInput.getText().getBytes();
SQLstr=new String(tempBytes,”ISO-8859-1”);
需要注意的是,不同的JDBC驱动对相同的数据库的支持并不同,而同一类JDBC驱动对不同的数据库的支持也不相同,也就是说我们的字符转化代码在JDBC驱动改变的时候必须作必要的测试才能确定其是否工作正常,不然我们反而会变成了画蛇添足。例如对于i-net 的Una 2000 Driver Version 2.03 for MS SQL Server,我们根本就不需要做任何的编码转化就可以实现中文的正常操作。但是,由于很多的JDBC的驱动并没有明确的给出其对中文字符的支持情况,所以建议在使用JDBC时都作一下测试。
结论
事实上,