麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JDK1.2關(guān)于JDBC中文問(wèn)題的解決方案

2019-11-18 14:04:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  忙了幾天,終于對(duì)JDK1.2的JDBC中文問(wèn)題有了初步的了解,雖然還有問(wèn)題存在,但我
想大家可能都著急了吧?:)所以就把我的初步想法先貼出來(lái),歡迎大家補(bǔ)充.
JDK1.2的中文問(wèn)題主要是由于引入了Unicode引起的(其實(shí)在1.1版本中就有了),U
nicode的字符由16bit構(gòu)成,關(guān)于Unicode更具體的信息有愛(ài)好者可以到www.unico
de.org查閱,在1.0版本中,一個(gè)中文是由兩個(gè)char(8bit)組成的,而1.1以上版本中
是由一個(gè)char(16bit)組成的.這一點(diǎn)大家可以用System.out.PRintln(s.length(
))語(yǔ)句來(lái)證實(shí),其中s為中文字串.
現(xiàn)在來(lái)說(shuō)說(shuō)解決辦法,首先聲明這些結(jié)果只是在我的環(huán)境里測(cè)試通過(guò),假如在各位
的環(huán)境里有問(wèn)題,請(qǐng)務(wù)必告知.
我的環(huán)境是JDK1.2+Win95+Sybase JDBC Driver(PowerJ2.5附帶)+Oracle JDBC D
river(Oracle8.0.3附帶).
我的第一個(gè)體會(huì)是用JDBC-ODBC橋接訪問(wèn)數(shù)據(jù)庫(kù)中文輸入有問(wèn)題,我還沒(méi)解決,我用
的JDBCODBC Driver是JDK1.2自帶的.
第二個(gè)體會(huì)是用JDBC直接聯(lián)數(shù)據(jù)庫(kù),這時(shí)可能有兩種情況:
1,中文輸入沒(méi)問(wèn)題(Oracle8),即可以在SQL語(yǔ)句中直接寫(xiě)中文,如:
statement.executeUpdate("inser into tablename values("測(cè)試",....)
2,中文輸入有問(wèn)題(Sybase11),看錯(cuò)誤可知是Unicode轉(zhuǎn)換引起的,解決辦法是將U
nicode轉(zhuǎn)換為ASCII形式,即一個(gè)漢字拆成兩個(gè)char,用到兩個(gè)類(lèi)ByteToCharConve
rter和CharToByteConverter,在sun.io.*中,可以在JDK homejrelibi18n.jar
中找到,沒(méi)有文檔,我也實(shí)在網(wǎng)上找到用法的.
在輸入時(shí),用ChineseStringToAscii轉(zhuǎn)換為ASCII碼字串,查詢時(shí)用AsciiToChines
eString轉(zhuǎn)換為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);
}
在讀數(shù)據(jù)時(shí)用String s=AsciiToChineseString(rs.getString(1))
--------------------
因?yàn)槭诸^只能對(duì)這兩種數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,所以對(duì)別的數(shù)據(jù)庫(kù)可能出現(xiàn)的情況不能保
證.不過(guò)我估計(jì)基本是上面這兩種情況.另外,用JDK1.2有的公司提供的Driver也升
級(jí)了,比如Sybase原來(lái)的Driver就不好使.原理就是這樣,在實(shí)際操作中要靠自己摸
索了.上面兩個(gè)方法參考了臺(tái)灣某BBS的一篇文章.
另外,yzhang不知你要的是什么版本,你可以在jconnect軟件安裝的目錄下找JDBC
Driver包,可能的格式是zip或jar,把他拷出來(lái)就行了.我的就是從PowerJ中拷出
來(lái)的

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色就色 综合偷拍区91网 | 国产亲子伦在线观看 | 成年人在线视频免费 | 黄色片视频免费观看 | 国产一区二区三区视频免费 | 欧美成年人视频在线观看 | 一本色道久久综合亚洲精品图片 | 91性视频 | 91精品国产91久久久久久丝袜 | 中国毛片在线观看 | 一区二区三区欧美在线观看 | 91在线免费观看 | 日韩一级免费毛片 | 粉嫩粉嫩一区二区三区在线播放 | 懂色粉嫩av久婷啪 | 一本色道精品久久一区二区三区 | 国产一区在线视频观看 | 欧美jizzhd极品欧美 | 狠狠干五月天 | 国产合集91合集久久日 | 国产1区2区在线 | 久久99国产伦子精品免费 | 成人不卡一区二区 | 午夜在线视频一区二区三区 | 韩国一级免费视频 | 99在线在线视频免费视频观看 | 久久精品日产第一区二区三区 | 国产日本在线 | jizzjizz中国人少妇中文 | 国产精品自拍片 | 久久草在线视频国产 | 国产日韩大片 | 网站激情 | 鲁人人人鲁人人鲁精品 | 日本在线视频一区二区三区 | 黄色大片在线观看 | 亚洲精品午夜电影 | 国产一级αv片免费观看 | 91精品国产91久久久 | 羞羞色院91精品网站 | 免费看欧美一级特黄a毛片 九色com |