<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驅(qū)動面對一個數(shù)值型的返回字段時,在得到指定的字段小數(shù)點(diǎn)右邊的數(shù)值數(shù)量時(Gets the designated column's number of digits to right of the decimal point.這個是原文),居然會返回-127,而oracle本身的cacheRowSet實現(xiàn)不允許這種情況出現(xiàn),于是就會報標(biāo)題所說的異常。

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

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

    package oracle.jdbc.driver;

    public class OracleResultSetMetaData


    目標(biāo)方法:
    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,大功告成!

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

    Feedback

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

    2009-11-11 18:57 by jack
    cacheRowSet不行
    但改用resultSet就可以了...
    不要搞得這么復(fù)雜...
    主站蜘蛛池模板: 毛片免费观看的视频在线| 日韩免费视频观看| 91在线亚洲综合在线| 日韩亚洲精品福利| 久久精品成人免费观看97| 亚洲国产综合专区电影在线 | 欧洲人成在线免费| 亚洲理论精品午夜电影| 99久久久国产精品免费无卡顿| 亚洲av无码成人精品区一本二本 | 亚洲AV无码国产精品色午友在线 | 亚洲性日韩精品一区二区三区| 国产人成网在线播放VA免费| 日产亚洲一区二区三区| 在线观看免费人成视频| 亚洲1区2区3区精华液| 在线观看午夜亚洲一区| 亚洲一级毛片免费看| 亚洲欧美在线x视频| 亚洲午夜久久久久妓女影院| 亚洲毛片免费视频| 高潮毛片无遮挡高清免费视频| 亚洲国产AV无码专区亚洲AV| 91精品视频免费| 国产精品黄页免费高清在线观看| 亚洲AV午夜成人影院老师机影院| 免费看国产精品3a黄的视频| 亚洲国产成人久久综合| 精品亚洲一区二区三区在线播放 | 久久亚洲精品成人| 日韩中文无码有码免费视频| 人人揉揉香蕉大免费不卡| 亚洲精品第一国产综合野| 精品亚洲一区二区三区在线观看 | 毛片免费在线观看网站| 国产日韩AV免费无码一区二区三区| 亚洲最大的黄色网| 亚洲理论电影在线观看| 国产美女无遮挡免费视频网站| 久久久久成人片免费观看蜜芽 | 亚洲中文字幕无码av在线|