JDBC中文处理

我们在做一个JAVA的应用,不可避免地要处理中文。经过
艰苦的探索,目前有一些进展,找到了一些解决方法,但仍然
面临着无法解决的问题。在此作一整理,希望对大家有所帮助,
同时请各位高手帮忙考虑我们的问题。
Email: sailor@mailserv.stu.edu.cn

背景:
JDK 1.15
VCafe 2.0
JPadPro
SERVER:
NT IIS
Sybase System 10
JDBC: Jconnect
CLIENT:
Browser: Netscape 4.04 + Patch
PWin95 & Pwin98 Beta3

CLASS文件存放在 SERVER,由BROWSER 运行APPLET,APPLET只
起调入FRAME类主程序的作用。界面包括Text field, Text Area,
List, Choice 等。

一,取中文
用JDBC执行SELECT语句从SERVER取数据(中文)后,将数据
用APPEND方法加到TEXT AREA(TA),不能正确显示。但加到
LIST中时,则大部分汉字可正确显示。

处理:将数据按“ISO-8859-1”格式转为字节数组,再按系统
缺省编码格式(default character encoding)转为STRING,即可在TA和LIST中正确显示。
程序段如下:

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
处理方式与以上相逆,先将SQL语句按DEFAULT 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);
。。。。。。

问题:
以上方法当本地客户机上存在CLASSPATH指向JDK的CLASSES。ZIP
时(称为A情况),可正确运行。
但如果客户机只有Browser,没有JDK和CLASSPATH时
(称为B情况),则汉字无法正确转换。

我们的分析:
1,
经过测试,在A情况下,程序运行时系统的default character
encoding = "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的CLASSES。ZIP解压后,放在另一个
目录中,CLASSPATH只包含该目录。然后逐步删除目录中的CLASS
文件,一边运行测试程序,最后发现在一千多个CLASS文件中,
只有一个是不可缺少的,该文件是:
sun.io.CharToByteDoubleByte.class
我将该文件拷到SERVER端和其它的类放在一起,并在程序的开头
IMPORT它,仍然在B情况下无法正常。

4,
在A情况下,如果在CLASSPTH中去掉
sun.io.CharToByteDoubleByte.class,则程序运行时,
测得default character encoding为“8859-1”,否则为
GBK 或GB2312。

5,
分析BROWSER程序NETSCAPE目录下的文件
/program/java/classes/java40.jar, 发现其中没有包括
sun.io.CharToByteDoubleByte.class,
不知这是需要升级,还是有其它方法可以解决?

盼望各位高手指导!Email: sailor@mailserv.stu.edu.cn

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: DHCP159_158.STU]

发信人: barebell (小心), 信区: Java
标 题: Re: ● ● JDBC中文处理:方法与问题
发信站: BBS 水木清华站 (Tue May 19 22:38:19 1998) WWW-POST

现在我们取得的一点小小进展,在转换字符串时不采用default character
encoding,而是直接采用“GBK”或“GB2312”,在情况A和B底下,从DB取数据
都没有问题,但是写中文到DB也采用“GBK”或“GB2312”时,情况B仍是出错的。

发信人: mah (chip), 信区: Java
标 题: 通过jdbc driver获取数据库中文信息揭密
发信站: BBS 水木清华站 (Tue Aug 11 20:42:16 1998) WWW-POST

当我们使用老外公司开发的jdbc第四类driver获取数据库中文信息时,常会出现乱码现象
,如????D.
解决办法1:
使用interface ResultSet的方法getBytes()得到一byte[],然后由此byte[]数组产生一
新的
String,可获得正确的汉字,但此方法有一定的局限性,在某些driver上可以实现,如
weblogic公司
开发的fastforward产品。另此种方法不规范,根据sun jdbc的标准varchar和var推荐用
getString()
方法来获取。
解决办法2:
使用interface ResultSet的方法getString(),这时我们得到的String一定是乱码,如何
解决,
String temp = result.getString (s);
if (temp != null) {
byte[] b = temp.getBytes ("8859_1");
temp = new String (b);
此时的temp一定是正确的中文,,,,,,此种方法我在sybase公司开发的jconnect4上
实验成功,在fastforward
上也成功。

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: sqljdbc4 是 Java 连接 SQL Server 数据库的全新驱动包。它是由微软公司提供的一个用于连接 SQL Server 数据库的 JDBC 驱动程序。CSND 则是 CSDN(中国最大的 IT 技术社区)上关于 sqljdbc4 的一个专题页面。 sqljdbc4 这个驱动包主要用于在 Java 应用程序中连接和操作 SQL Server 数据库。它提供了一组丰富的 API,开发人员可以通过这些 API 来实现与数据库的交互。使用 sqljdbc4,开发人员可以通过 Java 代码来连接数据库、执行 SQL 语句、获取查询结果等操作。 CSND 上的 sqljdbc4 专题页面则为开发人员提供了一系列与 sqljdbc4 相关的技术文章、教程、文档和示例代码。这些资源可以帮助开发人员快速入门 sqljdbc4,了解如何使用它来连接和操作 SQL Server 数据库。 在 CSND 的 sqljdbc4 专题页面上,开发人员可以找到一些介绍 sqljdbc4 的基础知识的文章,例如如何下载和安装 sqljdbc4,如何配置和初始化 JDBC 连接等。同时,还可以学习如何使用 sqljdbc4 执行增删改查等操作,以及如何处理事务、异常和性能优化等方面的内容。 总之,sqljdbc4 是连接 SQL Server 数据库的 JDBC 驱动程序,而 CSND 则是一个技术社区平台,提供了关于 sqljdbc4 的丰富的技术资源和帮助文档,方便开发人员学习和使用 sqljdbc4 进行数据库开发。 ### 回答2: sqljdbc4是一个用于连接Java应用程序和SQL Server数据库的驱动程序。csdn是一个中文IT技术社区,其中包含了大量的技术博客、论坛和资源分享等内容。 SQL Server是一种关系型数据库管理系统,它允许用户存储、操作和检索数据。而Java是一种面向对象的编程语言,常用于开发Web应用和企业级应用。 sqljdbc4是连接Java应用程序和SQL Server数据库的驱动程序之一。通过该驱动程序,Java开发人员可以使用Java代码连接到SQL Server数据库,并执行各种数据库操作,如插入、更新、删除、查询等。 csdn作为一个IT技术社区,提供了大量的技术资源和知识分享。在csdn上,开发人员可以找到各种与sqljdbc4相关的教程、代码示例和问题解答等。通过参与csdn的讨论和交流,开发人员可以更好地了解如何使用sqljdbc4驱动程序来连接到SQL Server数据库,并解决在开发过程中遇到的问题。 总的来说,sqljdbc4和csdn都是与连接Java应用程序和SQL Server数据库相关的资源。sqljdbc4提供了连接和操作SQL Server数据库的驱动程序,而csdn为开发人员提供了技术资源和知识分享平台,帮助开发人员更好地了解和使用sqljdbc4驱动程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxyxl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值