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

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

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

    posts - 56, comments - 54, trackbacks - 0, articles - 4
       ::  ::  :: 聯(lián)系 :: 聚合  :: 管理

    JDBC更新長VARCHAR2字段

    Posted on 2005-11-13 00:01 Terry的Blog 閱讀(1767) 評論(0)  編輯  收藏 所屬分類: oracle

    JDBC更新長VARCHAR2字段

    oracle8開始VARCHAR2字段最大長度達到了4000.但是我們并不能簡單的用jdbc輸入這么大的字符串。
    讓我們看看以下的情況:
    數(shù)據(jù)庫參數(shù) NLS Database Parameters:
    NLS_CHARACTERSET                          JA16SJIS
    NLS_NCHAR_CHARACTERSET         AL16UTF16

    如果用pstmt.setString(index, value)更新一個字段; value是1000個日文字符 那么我們回得到出錯信息:
    java.sql.SQLException: データ?サイズがこの型の最大サイズを超えています。: 3000
    出錯信息表示oracle認(rèn)為你輸入了3000長度的字符。
    經(jīng)過幾次實驗可以發(fā)現(xiàn)pstmt.setString(index, value)只能更新長度<=2000的字段。
    (原因不明 和oracle7時VARCHAR2字段最長為2000有關(guān)?)
    長度的計算方法:(英文字母和數(shù)字的數(shù)量+日文字符的數(shù)量*3)<=2000
    比如“123パラメータ”的長度是18
       
    更新較長的varchar2字段時應(yīng)該用pstmt.setCharacterStream(...)
    且一次只能更新一個長varchar2字段。

        private void updateChar(Connection conn,int index) throws SQLException{
          
            String SQL = " UPDATE KMD_DOWNLOADRRK_T SET OUTPUTQUERY = ? " +
                        " WHERE RRKCD = ?";
            PreparedStatement pstmt = null;
            try{
                pstmt=conn.prepareStatement(SQL);
                //パラメータのセット
                String query = "length must <= 2000";
                StringReader read = new StringReader(query);
                pstmt.setCharacterStream(1,read,query.length());
                pstmt.setString(2, "001");
                pstmt.executeUpdate();
            }finally{
                if(pstmt != null) pstmt.close();
            }
        }

    setCharacterStream() 的使用比較復(fù)雜, Oracle網(wǎng)站上還介紹了一種解決辦法:用兩個參數(shù)對應(yīng)一個字段
    比如emp表中有一個字段memo
    insert into emp(memo) values (?||?);
    只要保證給每個參數(shù)賦的值不超過限制長度即可.

    題外話:
    2000對于oracle PL/SQL中的VARCHAR2變量來說是比較特殊的是數(shù)字。
    定義一個小于2000的VARCHAR2變量,那么oracle就把它放在棧內(nèi)存 如果大于2000就放在堆內(nèi)存。

    主站蜘蛛池模板: 日韩亚洲变态另类中文| 毛片免费在线观看网址| 国产gv天堂亚洲国产gv刚刚碰| 亚洲精品成a人在线观看☆| 久草视频免费在线| 色噜噜亚洲男人的天堂| 一二三四影视在线看片免费| 亚洲成人免费网址| 成年女人喷潮毛片免费播放| 亚洲日韩精品无码AV海量| 成人免费看吃奶视频网站| 亚洲人成色77777在线观看| 日日夜夜精品免费视频| 国产免费一区二区三区| 亚洲国产美女精品久久| 免费国产作爱视频网站| 亚洲国产欧美日韩精品一区二区三区 | 小说区亚洲自拍另类| 免费一区二区视频| 两个人的视频www免费| 亚洲欧洲国产精品你懂的| 无码人妻精品中文字幕免费东京热| 一本色道久久88—综合亚洲精品 | 一级特黄录像免费播放肥| 亚洲va在线va天堂va不卡下载| 久久精品无码专区免费东京热| 亚洲人成网站看在线播放| 免费a级黄色毛片| 永久免费A∨片在线观看| 亚洲AV成人无码天堂| 免费一级大黄特色大片| 在线看片免费人成视频福利| 亚洲日韩乱码中文无码蜜桃臀| 日本人护士免费xxxx视频| 一出一进一爽一粗一大视频免费的| 亚洲第一福利视频| 免费被黄网站在观看| 免费看搞黄视频网站| 亚洲国产精品网站在线播放 | 欧洲人免费视频网站在线| 亚洲乱码一二三四区国产|