当前位置: 首页 > 图灵资讯 > 技术篇> JDBC中文处理

JDBC中文处理

来源:图灵教育
时间:2024-02-28 17:17:44
我们正在做JAVA应用,不可避免地要处理中文。经过艰苦的探索,我们取得了一些进展,找到了一些解决方案,但我们仍然面临着无法解决的问题。在这里整理一下,希望对大家有所帮助,同时请大家帮忙考虑一下我们的问题。Email: [email protected]背景:JDK 1.15VCafe 2.0JPadProSERVER:NT IISSybase System 10 JDBC: JconnectCLIENT:Browser: Netscape 4.04 + PatchPWin95 & Pwin98 存储Beta3CLASS文件 SERVER,BROWSER 运行APPLET,APPLET只起调入FRAME类主程序的作用。界面包括Text field, Text Area,List, Choice 等。界面包括Text field, Text Area,List, Choice 等等。一、用JDBC执行SELECT语句从SERVER取数据(中文)后,用APPEND方法将数据添加到TEXT AREA(TA),不能正确显示。但是当添加到LIST中时,大多数汉字都可以正确显示。处理:按“按”数据处理:ISO-8859-1格式转换为字节数组,然后根据系统缺少编码格式(default character encoding)在TA和LIST中正确显示STRING。程序段如下:dbstr2 = results.getString(1); After read result from Database server, Convert the result string.dbbyte1 = dbstr2.getBytes("iso-8859-1");dbstr1 = new String(dbbyte1);//。
从中文到DB的处理方法与上述方法相反。首先,根据DEFAULTT写SQL语句 CHARACTER ENCODING转换为字节数组,然后按ISO-8859-1转换为STRING,然后发送执行,中文信息可以正确写入DB。sqlstmt = tf_input.getText();// // Before send statement to Database server, Convert sql statement.dbbyte1 = sqlstmt.getBytes();sqlstmt = new String(dbbyte1,"iso-8859-1");// _stmt = _con.createStatement();_stmt.executeUpdate(sqlstmt);。。。。。。。问题:当地客户机上有CLASSES,CLASSES指向JDK。ZIP(称为A情况)可以正确运行。但如果客户机只有Browser,没有JDK和CLASSPATH(称为B情况),汉字就无法正确转换。
我们的分析:
1。测试后,在A的情况下,在程序运行过程中,系统的default characterencoding = "GBK" or "GB2312".在B的情况下,当程序启动时,Browser 的JAVA 以下信息出现在CONSOLE中:can't find resource for sun.awt.windows.awtLocalization_zh_CN然后是系统的default characterencoding = "8859-1".
2,如果在转换字符串时不使用default character encoding,相反,直接采用“但直接采用”GBK或者“GB2312”,在A的情况下仍然可以正常,在B的情况下,系统出现错误:UnsupportedEncodingException。
3.在本地客户机上,我把JDK的CLASES放在另一个目录中,ZIP解压后,CLASPATH只包括这个目录。然后在运行测试程序的同时,逐步删除目录中的CLASS文件,最终发现在1000多个CLASS文件中,只有一个是不可或缺的,该文件是:sun.io.CharToByteDoubleByte.class我把文件复制到SERVER端和其他类别放在一起,IMPORT在程序开始时仍然不正常。
4.在A的情况下,如果在CLASPTH中去除sunn.io.CharToByteDoubleByte.class,当程序运行时,测量default character encoding为“8859-1” 或GB2312。5.分析BROWSER程序NETSCAPE目录下的文件/program/java/classes/java40.jar, 发现不包括sunn.io.CharToByteDoubleByte.class,不知道是需要升级还是有其他解决办法?