<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就可以了...
    不要搞得這么復雜...
    主站蜘蛛池模板: 今天免费中文字幕视频| 亚洲欧美日韩一区二区三区| 一级女性全黄久久生活片免费 | 亚洲AV无码一区二区一二区| 成人影片麻豆国产影片免费观看| 亚洲精品在线免费观看| 日本高清在线免费| 亚洲最大福利视频| 成年女人18级毛片毛片免费观看| 亚洲熟妇无码AV| 免费毛片网站在线观看| 黄网站色视频免费看无下截| 亚洲国产成人久久综合碰| 一级一看免费完整版毛片| 亚洲国产三级在线观看| 99精品视频在线视频免费观看| 亚洲视频精品在线观看| 无码一区二区三区免费视频| 亚洲AV综合永久无码精品天堂| www.91亚洲| 免费黄网站在线看| 亚洲一区二区三区无码国产| 日韩免费高清视频| 一级**爱片免费视频| 亚洲精品无码久久久久久久| 日韩中文字幕免费| 99在线视频免费观看| 亚洲精品视频观看| 国产成人免费手机在线观看视频 | 亚洲电影一区二区三区| 成年黄网站色大免费全看| 亚洲av永久无码精品网址| 亚洲综合色自拍一区| 91免费国产自产地址入| 国产精品亚洲综合天堂夜夜| 亚洲精品无码永久在线观看你懂的 | 日韩在线观看免费| 中文字幕亚洲精品资源网| 国产免费AV片无码永久免费| 日本免费人成网ww555在线| 亚洲偷偷自拍高清|