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

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

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

    posts - 33, comments - 46, trackbacks - 0, articles - 2
    參考:http://blog.csdn.net/horsefaced/archive/2007/08/16/1746888.aspx

    這個異常源自于oracle驅動面對一個數值型的返回字段時,在得到指定的字段小數點右邊的數值數量時(Gets the designated column's number of digits to right of the decimal point.這個是原文),居然會返回-127,而oracle本身的cacheRowSet實現不允許這種情況出現,于是就會報標題所說的異常。

    對于一般的做法,需要修改很多地方,包括ResultSet的decorate類,還有Spring的SqlRowSetResultSetExtractor

    所謂頭痛醫頭,腳痛醫腳,這里提供一種方法直接從oracle jdbc驅動入手,徹底從源頭上修改掉該問題:
    反編譯ojdbc14.jar(Oracle 9i驅動為例)

    package oracle.jdbc.driver;

    public class OracleResultSetMetaData


    目標方法:
    public int getScale(int paramInt)
        throws SQLException
      {
        int i = getValidColumnIndex(paramInt);
        return this.statement.getDBDescription()[i].scale;
      }

    使用javassist編寫一段代碼:
     public  void crackOracleDriver() {
            ClassPool pool 
    = ClassPool.getDefault();
            
    try {
                pool.insertClassPath(
    "E:\\allproject\\bpmtrans\\lib\\ojdbc14.jar");
                CtClass cc 
    = pool.get("oracle.jdbc.driver.OracleResultSetMetaData");
                System.out.println(cc);
                CtClass[] param 
    = new CtClass[1] ;
                param[
    0]=pool.get("int");
                CtMethod a 
    = cc.getDeclaredMethod("getScale",param);
                System.out.println(a);
                a.setBody(
    "{int i = getValidColumnIndex($1);\n" +
                        
    "    int res=statement.getDBDescription()[i].scale;\n" +
                        
    "return res<0?0:res; }");
                cc.writeFile(
    "c:\\");

            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }

    將生成的class置換原來的class,大功告成!

    這個所謂的精度,一般來說,修改了應該沒有多大問題的

    Feedback

    # re: 修改驅動解決SqlRowSet的Invalid scale size. Cannot be less than zero異常的處理辦法[未登錄]  回復  更多評論   

    2009-11-11 18:57 by jack
    cacheRowSet不行
    但改用resultSet就可以了...
    不要搞得這么復雜...
    主站蜘蛛池模板: 1000部拍拍拍18勿入免费视频软件| 亚洲av乱码一区二区三区按摩| 成人无码区免费A∨直播| 午夜一区二区免费视频| 亚洲国产精品无码久久九九大片 | 成人国产精品免费视频| 亚洲国产精品一区二区三区久久| 久久水蜜桃亚洲AV无码精品| 暖暖免费高清日本中文| 亚洲欧好州第一的日产suv| 曰皮全部过程视频免费国产30分钟 | 国产精品国产午夜免费福利看 | 2020年亚洲天天爽天天噜| 台湾一级毛片永久免费| 久久国产亚洲精品| 成人免费a级毛片无码网站入口 | eeuss影院www天堂免费| 亚洲一区二区三区在线播放| GOGOGO高清免费看韩国| 亚洲AV无码日韩AV无码导航| 全免费a级毛片免费看| 亚洲欧洲国产视频| 波多野结衣久久高清免费| 美女扒开屁股让男人桶爽免费| 亚洲精品tv久久久久| 麻豆精品成人免费国产片| 亚洲图片校园春色| 国产成人啪精品视频免费网| 羞羞视频免费网站在线看| 亚洲日本一区二区| 好爽又高潮了毛片免费下载 | 国产精品亚洲专区无码WEB| 不卡精品国产_亚洲人成在线| 国产无遮挡无码视频免费软件| 亚洲视频小说图片| 国产成人高清精品免费鸭子| 最好免费观看高清在线| 亚洲最大的成人网站| 亚洲综合伊人久久综合| 99久久免费国产精品特黄| 成人午夜影视全部免费看|