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

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

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

    hpfyeah

    首頁 新隨筆 聯(lián)系 聚合 管理
      3 Posts :: 1 Stories :: 3 Comments :: 0 Trackbacks
    在使用Spring中的NamedParameterJdbcTemplate.queryForRowSet()方法時(shí),拋出了SQLException:Invalid scale size. Cannot be less than zero的異常。

    google之后知道出現(xiàn)這種錯(cuò)誤有兩種情況:

    1是當(dāng)所查詢的列類型為number,而且沒有指定具體的精度時(shí)。處理這個(gè)問題相對來說比較簡單,更改列類型增加精度就可以了;

    2是當(dāng)數(shù)據(jù)庫環(huán)境為oracle而且使用了RowSet時(shí)。具體原因是由于“oracle驅(qū)動(dòng)面對一個(gè)數(shù)值型的返回字段時(shí),在得到指定的字段小數(shù)點(diǎn)右邊的數(shù)值數(shù)量時(shí)(Gets the designated column's number of digits to right of the decimal point.這個(gè)是原文),居然會(huì)返回-127,而oracle本身的cacheRowSet實(shí)現(xiàn)不允許這種情況出現(xiàn),于是就會(huì)報(bào)標(biāo)題所說的異常?!保ㄔ某鲎?a target="_blank">馬面薩滿的靈魂小屋)

    針對問題2的解決辦法就要復(fù)雜的多,需要對ResultSetMetaData中g(shù)etScale()方法的原有的返回結(jié)果加以處理,需要修改的部分如下,其它部分照舊重寫即可。
    ?1?public?class?ResultSetWrapper?implements?ResultSet?{
    ?2?????public?ResultSetWrapper(ResultSet?wrapped)?{
    ?3?????????this.wrapped?=?wrapped;
    ?4?????}
    ?5????
    ?6????public?ResultSetMetaData?getMetaData()?throws?SQLException?{
    ?7?????????//?TODO?Auto-generated?method?stub
    ?8?????????//?return?null;
    ?9?????????return?new?ResultSetMetadataWrapper(this.wrapped.getMetaData());
    10?????}
    11}??
    12??
    13
    14?public?class?ResultSetMetadataWrapper?implements?ResultSetMetaData?{
    15????
    16?????public?int?getScale(int?arg0)?throws?SQLException?{
    17?????????//?TODO?Auto-generated?method?stub
    18?????????//return?0;
    19?????????
    20?????????int?result?=?this.wrapped.getScale(arg0);
    21?????????return?result?<?0??0:?result;
    22?????}
    23?}

    為了在spring中應(yīng)用我們所實(shí)現(xiàn)的ResultSetWrapper和ResultSetMetaDataWrapper,需要重寫spring中的SqlRowSetResultSetExtractor和NamedParameterJdbcTemplate,具體代碼如下
    import?java.sql.ResultSet;
    import?java.sql.SQLException;

    import?javax.sql.rowset.CachedRowSet;

    import?org.springframework.jdbc.core.SqlRowSetResultSetExtractor;
    import?org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet;
    import?org.springframework.jdbc.support.rowset.SqlRowSet;

    public?class?CustomSqlRowSetResultSetExtractor
    ????
    extends
    ??????SqlRowSetResultSetExtractor?{

    ??
    protected?SqlRowSet?createSqlRowSet(ResultSet?rs)?throws?SQLException?{
    ????CachedRowSet?rowSet?
    =?newCachedRowSet();
    ????rowSet.populate(
    new?ResultSetWrapper(rs));
    ????
    return?new?ResultSetWrappingSqlRowSet(rowSet);
    ??}

    }

    import?java.util.Map;
    import javax.sql.DataSource;
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
    import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
    import org.springframework.jdbc.core.namedparam.SqlParameterSource;
    import org.springframework.jdbc.support.rowset.SqlRowSet;

    public?class?CustomNamedParameterJdbcTemplate?extends?NamedParameterJdbcTemplate?{
    ??
    public?CustomNamedParameterJdbcTemplate(DataSource?ds)?{
    ????
    super(ds);
    ??}

    ??
    public?SqlRowSet?queryForRowSet(String?sql,?SqlParameterSource?paramSource)?throws?DataAccessException?{
    ????
    return?(RowSet)?getJdbcOperations().query(getPreparedStatementCreator(sql,?paramSource),?new?CustomSqlRowSetResultSetExtractor());
    ??}

    ??
    public?SqlRowSet?queryForRowSet(String?sql,?Map?paramMap)?throws?DataAccessException?{
    ????
    return?queryForRowSet(sql,?new?MapSqlParameterSource(paramMap));
    ??}
    }

    在需要使用NamedParameterJdbcTemplate的地方使用我們自定義的CustomNamedParameterJdbcTemplate即可。需要說明的是我是在使用spring版本2.0.*、2.5.5時(shí)出現(xiàn)的該錯(cuò)誤?;蛟S它更應(yīng)該和RowSet、oracle驅(qū)動(dòng)的版本有關(guān);)

    posted on 2008-07-19 22:22 hpfyeah 閱讀(3107) 評論(1)  編輯  收藏 所屬分類: j2ee

    Feedback

    # re: 在Spring中處理SqlRowSet的SQLException:Invalid scale size. Cannot be less than zero異常 2009-01-24 23:36 mam
    ah mamah  回復(fù)  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 午夜免费福利片观看| 亚洲综合校园春色| 黄色网页在线免费观看| 亚洲国产综合精品| 131美女爱做免费毛片| 伊人久久综在合线亚洲2019| 亚洲乱码无限2021芒果| 精品国产免费人成电影在线观看| 女人被男人桶得好爽免费视频| 免费观看国产小粉嫩喷水| 亚洲国产美女精品久久久| 国产精品jizz在线观看免费| 亚洲大尺度无码无码专线一区| 国产在线观a免费观看| 国产亚洲一区二区三区在线| 色欲国产麻豆一精品一AV一免费| 国产成人免费网站在线观看| 综合一区自拍亚洲综合图区| 亚洲色婷婷综合开心网| 精品一区二区三区免费观看| 亚洲一区二区在线视频| 两个人的视频高清在线观看免费| 亚洲国产成人久久一区WWW| 国产精品无码永久免费888| 亚洲av永久无码精品网站| 动漫黄网站免费永久在线观看| 亚洲国产成人久久综合碰碰动漫3d| 一级毛片免费播放视频| 亚洲av综合avav中文| 日韩免费a级毛片无码a∨| 亚洲国产精品18久久久久久| 国产亚洲精品看片在线观看| 2019中文字幕免费电影在线播放 | 久久免费观看国产精品88av| 亚洲最新黄色网址| 亚洲福利在线播放| 99re免费99re在线视频手机版| 亚洲精品无码AV人在线播放| 日本免费人成在线网站| 亚洲国产综合人成综合网站00| 99久热只有精品视频免费看|