繼承AbstractListHandler實現自己的 MapListHandler方法

來源:互聯網
上載者:User

好久沒來更新部落格了,最近一直在忙乎一些亂七八糟的東西.鬱悶,郵政那個從去年做到了現在,一直在催,而我這邊又抽不出手,就算抽出空,但靜不下心,看到就煩.

之前一直在使用 Apache DbUtils 包,1.4版本新增的非同步查詢還不錯,現 在就說說它提供的MapListHandler類,它預設是交給 BasicRowProcessor類的 toMap處理,可toMap方法執行,然後返回一個Map,問題就出在這個toMap方法裡面,它裡面是這樣寫的:

result.put(rsmd.getColumnName(i), rs.getObject(i)); //這裡直接用getObject取出值.

在表中有欄位是Number(10,2)類型的,它的值是xx.00,由於使用getObject()直接取出值,小數點後面的值就給抹去了,可老大說要顯示它後面的二個小數值._ _,沒找到,就自己繼承AbstractListHandler實現了一個類。

/***自訂的類*/public class MyMapListHandler extends AbstractListHandler<map> {    private static ConvertToMap convert;    //數字格式化    private static java.text.DecimalFormat   df   =new   java.text.DecimalFormat("0.00");      public MyMapListHandler() {        if (CheckUtil.CheckNull(convert)) {            convert = new ConvertToMap();        }    }    @Override    protected Map handleRow(ResultSet rs) throws SQLException {        return convert.toMap(rs);    }    private class ConvertToMap extends BasicRowProcessor {        @Override        public Map toMap(ResultSet rs) throws SQLException {            Map result = new HashMap();            ResultSetMetaData rsmd = rs.getMetaData();            int cols = rsmd.getColumnCount();            for (int i = 1; i <= cols; i++) {                result.put(rsmd.getColumnName(i), getTypeValue(rsmd, rs, i));            }            return result;        }    }   //在這個方法中格式化數字    private Object getTypeValue(ResultSetMetaData rsmd, ResultSet rs, int index)            throws SQLException {        Object result = null;        int type = rsmd.getColumnType(index);//得到欄位類型        switch (type) {        case Types.NUMERIC:        case Types.FLOAT:        case Types.DOUBLE:        case Types.INTEGER:            int scale=rsmd.getScale(index);//如果有小數點,則格式化,否則取它的整數            if(scale>0){                result=df.format(rs.getDouble(index));            }else{                result=rs.getInt(index);            }            break;        default:            result = rs.getObject(index);            break;        }        return result;    }}
在調用處:private static AsyncQueryRunner query=new AsyncQueryRunner(Executors.newCachedThreadPool());   data =query.query(getConnnnects(), sql,new MyMapListHandler() ,obj).get(MyUtils.getIntFromStr(pro.getValue("qt")),TimeUnit.SECONDS);    new MyMapListHandler()就OK了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.