<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
       ::  ::  :: 聯系 :: 聚合  :: 管理

    JDBC更新長VARCHAR2字段

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

    JDBC更新長VARCHAR2字段

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

    如果用pstmt.setString(index, value)更新一個字段; value是1000個日文字符 那么我們回得到出錯信息:
    java.sql.SQLException: データ?サイズがこの型の最大サイズを超えています。: 3000
    出錯信息表示oracle認為你輸入了3000長度的字符。
    經過幾次實驗可以發現pstmt.setString(index, value)只能更新長度<=2000的字段。
    (原因不明 和oracle7時VARCHAR2字段最長為2000有關?)
    長度的計算方法:(英文字母和數字的數量+日文字符的數量*3)<=2000
    比如“123パラメータ”的長度是18
       
    更新較長的varchar2字段時應該用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() 的使用比較復雜, Oracle網站上還介紹了一種解決辦法:用兩個參數對應一個字段
    比如emp表中有一個字段memo
    insert into emp(memo) values (?||?);
    只要保證給每個參數賦的值不超過限制長度即可.

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

    主站蜘蛛池模板: 亚洲一区二区中文| 久久亚洲色一区二区三区| 久久精品国产亚洲77777| 国产免费伦精品一区二区三区| 一级毛片直播亚洲| 免费一级毛suv好看的国产网站 | 一本岛高清v不卡免费一三区| 亚洲成熟xxxxx电影| 免费视频一区二区| 亚洲成色999久久网站| 精品国产污污免费网站aⅴ| 亚洲高清在线mv| 最近最新MV在线观看免费高清| 亚洲jjzzjjzz在线观看| 很黄很色很刺激的视频免费| 亚洲精品福利你懂| 久久久久久99av无码免费网站 | 亚洲精品网站在线观看你懂的| 99蜜桃在线观看免费视频网站| 久久亚洲日韩精品一区二区三区| 亚洲人成免费电影| 亚洲性无码AV中文字幕| 亚洲av高清在线观看一区二区| eeuss在线兵区免费观看| 亚洲色大网站WWW永久网站| 啦啦啦中文在线观看电视剧免费版| 亚洲熟妇AV日韩熟妇在线| 国产区卡一卡二卡三乱码免费 | 日本三级在线观看免费| 亚洲春色另类小说| 国产高清视频在线免费观看| 久青草国产免费观看| 亚洲AV无码成人网站久久精品大| AV无码免费永久在线观看| 免费在线观看亚洲| 婷婷亚洲久悠悠色悠在线播放| 曰批视频免费30分钟成人| 免费一级毛suv好看的国产网站| 久久久国产精品亚洲一区| 永久久久免费浮力影院| 亚洲免费人成在线视频观看 |