| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> JAVA文章 >> 数据库 >> 文章正文

[1]

关于JDK1.2的JDBC中文问题的解决        【字体:
关于JDK1.2的JDBC中文问题的解决
作者:佚名    文章来源:不详    点击数:    更新时间:2006-4-16

忙了几天,终于对JDK1.2的JDBC中文问题有了初步的了解,虽然还有问题存在,但我想大家可能都着急了吧?:)所以就把我的初步想法先贴出来,欢迎大家补充. JDK1.2的中文问题主要是由于引入了Unicode引起的(其实在1.1版本中就有了),Unicode的字符由16bit构成,关于Unicode更详细的信息有兴趣者可以到www.unicode.org查阅,在1.0版本中,一个中文是由两个char(8bit)组成的,而1.1以上版本中是由一个char(16bit)组成的.这一点大家可以用System.out.println(s.length())语句来证实,其中s为中文字串. 现在来说说解决办法,首先声明这些结果只是在我的环境里测试通过,如果在各位的环境里有问题,请务必告知.
我的环境是JDK1.2+Win95+Sybase JDBC Driver(PowerJ2.5附带)+Oracle JDBC Driver(Oracle8.0.3附带). 我的第一个体会是用JDBC-ODBC桥接访问数据库中文输入有问题,我还没解决,我用的JDBCODBC Driver是JDK1.2自带的. 第二个体会是用JDBC直接联数据库,这时可能有两种情况: 1,中文输入没问题(Oracle8),即可以在SQL语句中直接写中文,如:
statement.executeUpdate("inser into tablename values("测试",....) 2,中文输入有问题(Sybase11),看错误可知是Unicode转换引起的,解决办法是将Unicode转换为ASCII形式,即一个汉字拆成两个char,用到两个类ByteToCharConverter和CharToByteConverter,在sun.io.*中,可以在JDK homejrelibi18n.jar中找到,没有文档,我也实在网上找到用法的.
在输入时,用ChineseStringToAscii转换为ASCII码字串,查询时用AsciiToChineseString转换为Unicode字串.源代码如下:
public static String AsciiToChineseString(String s) {
char[] orig = s.toCharArray();
byte[] dest = new byte[orig.length];
for (int i=0;i<orig.length;i++)
dest[i] = (byte)(orig[i]&0xFF);
try {
ByteToCharConverter toChar = ByteToCharConverter.getConverter("g
b2312");
return new String(toChar.convertAll(dest));
}
catch (Exception e) {
System.out.println(e);
return s;
}
}

public static String ChineseStringToAscii(String s) {
try {
CharToByteConverter toByte = CharToByteConverter.getConverter("g
b2312");
byte[] orig = toByte.convertAll(s.toCharArray());
char[] dest = new char[orig.length];
for (int i=0;i<orig.length;i++)
dest[i] = (char)(orig[i] & 0xFF);
return new String(dest);
}
catch (Exception e) {
System.out.println(e);
return s;
}
}
主程序片断如下:
try{
Statement stmt;
Class.forName("com.sybase.jdbc.SybDriver");
Connection conn =DriverManager.getConnection ("jdbc:sybase:Tds:202.9
7.228.249:5000/todo","sa","");
stmt = conn.createStatement ();
String s="何海涛";
s=ChineseStringToAscii(s);
stmt.executeUpdate ("insert into russia values(´"+s+"´,1,1,´"+s+
"´)");
}catch(Exception e){
System.out.println(e);
}
在读数据时用String s=AsciiToChineseString(rs.getString(1))
--------------------
因为手头只能对这两种数据库进行测试,所以对别的数据库可能出现的情况不能保证.不过我估计基本是上面这两种情况.另外,用JDK1.2有的公司提供的Driver也升级了,比如Sybase原来的Driver就不好使.原理就是这样,在实际操作中要靠自己摸索了.上面两个方法参考了台湾某BBS的一篇文章. 另外,yzhang不知你要的是什么版本,你可以在jconnect软件安装的目录下找JDBC Driver包,可能的格式是zip或jar,把他拷出来就行了.我的就是从PowerJ中拷出来的 
文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • RESIN/TOMCAT和MYSQL的连接解…

  • 通过JDBC连接oracle数据库的…

  • 一种简单JDBC连接池的实现

  • JDBC接口技术

  • JDBC专题介绍

  • 谈谈JDBC

  • Java访问数据库的速度瓶颈问…

  • JDBC3.0有什么新特性

  • 一个简单的JDBC包装器

  • 对一个简单的JDBC包装器的扩…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |