JDK1.2关于JDBC中文问题的解决方案

解决|问题|中文

发信人: hht (Duke), 信区: Java
标  题: JDK1.2关于JDBC中文问题的解决方案&Re yzhang
发信站: 网易虚拟社区 (Mon Jan 11 13:29:43 1999), 转信

忙了几天,终于对JDK1.2的JDBC中文问题有了初步的了解,虽然还有问题存在,但我
想大家可能都着急了吧?:)所以就把我的初步想法先贴出来,欢迎大家补充.
JDK1.2的中文问题主要是由于引入了Unicode引起的(其实在1.1版本中就有了),U
nicode的字符由16bit构成,关于Unicode更详细的信息有兴趣者可以到www.unico
de.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 D
river(Oracle8.0.3附带).
我的第一个体会是用JDBC-ODBC桥接访问数据库中文输入有问题,我还没解决,我用
的JDBCODBC Driver是JDK1.2自带的.
第二个体会是用JDBC直接联数据库,这时可能有两种情况:
1,中文输入没问题(Oracle8),即可以在SQL语句中直接写中文,如:
statement.executeUpdate("inser into tablename values("测试",....)
2,中文输入有问题(Sybase11),看错误可知是Unicode转换引起的,解决办法是将U
nicode转换为ASCII形式,即一个汉字拆成两个char,用到两个类ByteToCharConve
rter和CharToByteConverter,在sun.io.*中,可以在JDK home\jre\lib\i18n.jar
中找到,没有文档,我也实在网上找到用法的.
在输入时,用ChineseStringToAscii转换为ASCII码字串,查询时用AsciiToChines
eString转换为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中拷出
来的

时间: 2024-09-08 09:33:23

JDK1.2关于JDBC中文问题的解决方案的相关文章

Get中文乱码问题解决方案

 传参的时候遇到Get中文乱码,IE浏览器Get中文乱码问题,该怎么解决呢?下面为大家详细介绍下具体的解决方案 Get中文乱码问题解决方案:    修改Tomcat根目录下conf / server.xml文件,代码如下:  复制代码 代码如下: <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443&quo

Mysql在debian系统中不能插入中文的终极解决方案_Mysql

在debian环境下,彻底解决mysql无法插入和显示中文的问题 Linux下Mysql插入中文显示乱码解决方案 mysql -uroot -p 回车输入密码 进入mysql查看状态如下: 默认的是客户端和服务器都用了latin1,所以会乱码. 解决方案: mysql>user mydb; mysql>alter database mydb  character set utf8;! 上文提到了用临时方法更改数据库的字符集设置,显示中文,但是后来发现在有的系统下并不能成功. 比如我用的debi

asp.net url传递中文乱码的解决方案

asp教程.net url传递中文乱码的解决方案 1.设置web.config文件. <system.web> ...... <globalization requestencoding="gb2312" responseencoding="gb2312" culture="zh-cn" fileencoding="gb2312" /> ...... </system.web> 2.传递中文

MySql 中文乱码排查解决方案

阅读目录 1.避免创建数据库及表出现中文乱码和查看编码方法 2.避免导入数据有中文乱码的问题 3.解决网页中乱码的问题 MySQL会出现中文乱码的原因不外乎下列几点: server本身设定问题,例如还停留在latin1 table的语系设定问题(包含character与collation) 客户端程式(例如php)的连线语系设定问题 回到顶部 1.避免创建数据库及表出现中文乱码和查看编码方法 a.创建数据库的时候 CREATE DATABASE `test` CHARACTER SET 'utf

JSP显示中文问题的解决方案

js|解决|问题|显示|中文 这两天在win98下装apache1.3.9加jserv和gnujsp1.0,jdk1.2.2,jsdk2.0   发现中文无法正常显示.要么乱码,要么出错.   经网友提醒,总结了以下几条方法.   1:修改区域设置:在控制面版中选择区域设置,设为英语(美国)?nbsp;     然后重起.一切就都正常.   2:在jsp页中加入一条语句:     <%@ page contentType="text/html;charset=gb2312" %&

Git跨平台中文乱码临时解决方案

Git 是一个非常优秀的分布式版本控制系统,最初为Linux Kernel版本管理进行量身定做.优点是,和其他版本控制系统相比,稳定,速度快,跨平台,易学易用,无需要花费成本.更多优点请点击阅读:http://whygitisbetterthanx.com/ 缺点也有点明显,那就是由于该版本控制系统专门为Linux 内核定制,没有开发其他平台的版本,因此,在其他平台上使用的都是Git的移植版本.在Windows上使用Git,通常是msysGit 和 TortoiseGit 进行组合使用.在Win

GIT中文乱码问题解决方案

GIT常见问题集锦 GIT中文乱码问题解决 方案 进入git安装目录,改一下配置就可以基本解决: 1.etc\gitconfig: [gui] encoding = utf-8 [i18n] commitencoding = utf-8 [svn] pathnameencoding = utf-8 说明:打开 Git 环境中的中文支持.pathnameencoding设置了文件路径的中文支持. 2.etc\git-completion.bash: alias ls='ls --show-cont

python 中文乱码问题解决方案

      最近在项目中部署结巴分词的时候遇到了乱码情况,明明是中文,确显示不出来或者显示乱码.解决方案如下. 利用isinstance 来判断是否已经编码,s是出问题的字符串.unicode是没编码 isinstance(s, unicode):  用print 打印,如果结果是true说明没编码.如果是false说明编码了,但是编的码不对 print isinstance(s,unicode) 如果没编码,加入编码 s.encode('UTF-8') 如果编码了,编错了,就先解码再编 s.d

JSP显示中文问题的解决方案_JSP编程

这两天在win98下装apache1.3.9加jserv和gnujsp1.0,jdk1.2.2,jsdk2.0   发现中文无法正常显示.要么乱码,要么出错.   经网友提醒,总结了以下几条方法.   1:修改区域设置:在控制面版中选择区域设置,设为英语(美国)?nbsp;     然后重起.一切就都正常.   2:在jsp页中加入一条语句:     <%@ page contentType="text/html;charset=gb2312" %> ?     琷sp显示