<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102

    JDBC中文處理--解答集合

    Posted on 2005-01-12 19:20 海天一鷗 閱讀(314) 評論(0)  編輯  收藏 所屬分類: J2EE

    發信人: sailorc (ZZ), 信區: Java
    標 題: ● ● JDBC中文處理:方法與問題
    發信站: BBS 水木清華站 (Sun May 17 21:34:19 1998)

    ● ● 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
    上也成功。

    主站蜘蛛池模板: 91福利免费视频| 国产亚洲情侣一区二区无码AV| 亚洲日韩国产精品乱| 亚洲色在线无码国产精品不卡| 国产成人无码精品久久久免费| 一个人免费观看www视频在线| 亚洲区小说区图片区QVOD| 亚洲AV无码精品国产成人| 亚州免费一级毛片| 亚洲黄色免费网址| 91福利免费视频| 久久夜色精品国产亚洲AV动态图| 中文字幕的电影免费网站| 自拍偷自拍亚洲精品情侣| 国产免费MV大全视频网站| 亚洲精品在线视频| 中文字幕版免费电影网站| 综合亚洲伊人午夜网| 久久久久女教师免费一区| 亚洲第一网站男人都懂| 免费一级毛suv好看的国产网站| 女人18毛片a级毛片免费| 真正全免费视频a毛片| 国产亚洲日韩在线三区| 亚洲精品免费在线观看| 亚洲香蕉在线观看| 国产最新凸凹视频免费| 一级成人a做片免费| 亚洲爆乳精品无码一区二区三区| 亚洲精品免费在线观看| 亚洲人成电影在线观看网| 国产在线不卡免费播放| 中文字幕版免费电影网站| 456亚洲人成在线播放网站| 又黄又爽一线毛片免费观看| 中文字幕永久免费| 亚洲av纯肉无码精品动漫| 亚洲VA成无码人在线观看天堂| 午夜两性色视频免费网站| 日韩成人免费视频播放| a级在线观看免费|