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

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

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

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創造

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

    幾個使用JDBC Template常用的工具類

    第一:IntegerRowMapper

    代碼:

    public class IntegerRowMapper implements RowMapper {

          public Object mapRow(ResultSet rs, int index) throws SQLException {

                Integer c = new Integer(0);

                c = rs.getInt(1);

                return c;

          }

    }

    用途:

    SQL只是取數量時,可以采用這個類減少一些代碼,示例如下:

    StringBuilder sb=new StringBuilder();

    sb.append("    SELECT");

    sb.append("        count(*)");

    sb.append("    FROM");

    sb.append("        tb_contract");

    sb.append("    WHERE");

    sb.append("        contract_id='"+id+"' ");

    String sql=sb.toString();

     

    List<?> ls = this.getJdbcTemplate().query(sql, (new IntegerRowMapper()));

    Integer i = (Integer) ls.get(0);

     

    第二:StringRowMapper

    代碼:

    public class StringRowMapper implements RowMapper {

          public Object mapRow(ResultSet rs, int index) throws SQLException {

                String c=new String(rs.getString(1));

            return c;

          }

    }

    用途:當SQL語句只返回一個字符串類型的定值時,采用這個類能減少部分代碼,示例如下:

    StringBuilder sb=new StringBuilder();

    sb.append("    select");

    sb.append("         user_name as name");

    sb.append("    from");

    sb.append("        TB_SYS_USER");

    sb.append("    where");

    sb.append("         user_id='"+userId+"'");

    String sql=sb.toString();

     

    List<?> ls = this.getJdbcTemplate().query(sql, (new StringRowMapper()));

    String usrName=(String)ls.get(0);

     

    第三:RecordCounter

    代碼:

    public class RecordCounter{

          private String sql;

         

          private JdbcTemplate jdbcTemplate;

         

          /**

           * 構造函數

           * @param sql

           * @param jdbcTemplate

           */

          public RecordCounter(String sql,JdbcTemplate jdbcTemplate){

                this.sql=sql;

                this.jdbcTemplate=jdbcTemplate;

          }

         

          /**

           * 得到SQL語句查詢到的記錄數,對外的關鍵語句

           * @author: 何楊(heyanghy@cn.ibm.com

           * @date : Apr 23, 2011

           * @time : 11:09:35 AM

           * @return

           */

          public int getCount() throws Exception{

                StringBuilder sb=new StringBuilder();

                sb.append("    select ");

                sb.append("        count(*) as recordCount ");

                sb.append("    from ("+sql+") t ");

                String sql=sb.toString();

               

                class MyRowMapper implements RowMapper {

                      public Object mapRow(ResultSet rs, int index) throws SQLException {

                            Integer c = new Integer(0);

     

                            c=rs.getInt("recordCount");

     

                            return c;

                      }

                }

     

                List<?> ls = jdbcTemplate.query(sql, (new MyRowMapper()));

                Integer i=(Integer)ls.get(0);

               

                return i.intValue();

          }

    }

    用途:分頁時常需要得到SQL語句查詢得到的總記錄數,采用這個類可以減少部分代碼。

    示例:略

     

    第四:MapRowMapper

    代碼:

    public class MapRowMapper implements RowMapper {

          public Object mapRow(ResultSet rs, int index) throws SQLException {

                List<Map<String,String>> ls=new ArrayList<Map<String,String>>();

           

            int n=rs.getMetaData().getColumnCount();

           

            for(int i=1;i<=n;i++){

                try{

                      Map<String,String> map=new HashMap<String,String>();

                      map.put(rs.getMetaData().getColumnName(i).toLowerCase(), rs.getString(i));

                     

                      ls.add(map);

                }

                catch(Exception ex){

                      continue;

                }

            }

           

            return ls;

          }

    }

    用途:一般來說,當查詢只會返回一條記錄時,如按ID得到一條記錄,會使用這個Mapping器。得到的對象可以用來給對象賦值。示例如下:

    StringBuilder sb=new StringBuilder();

    sb.append("    select");

    sb.append("        *");

    sb.append("    from");

    sb.append("        TB_CONTRACT ");

    sb.append("    where");

    sb.append("        contract_id='"+id+"'");

    String sql=sb.toString();

     

    List<?> ls = this.getJdbcTemplate().query(sql, (new MapRowMapper()));

     

    Map<String,String> map = new HashMap<String,String>();

     

    List<?> ls2=(List<?>)ls.get(0);

     

    for(Object obj:ls2){

          Map<String,String> mapTemp=(Map<String,String>)obj;

         

          map.putAll(mapTemp);

    }

    第五:NameValueRowMapper

    代碼:

    public class NameValueRowMapper implements RowMapper {

          public Object mapRow(ResultSet rs, int index) throws SQLException {

                List<NameValue> ls=new ArrayList<NameValue>();

           

            int n=rs.getMetaData().getColumnCount();

           

            for(int i=1;i<=n;i++){

                NameValue nv=new NameValue(rs.getMetaData().getColumnName(i).toLowerCase(),rs.getString(i));

                ls.add(nv);

            }

           

            return ls;

          }

    }

     

    public class NameValue extends BaseDomainObj{

          private String name;

          private String value;

         

          /**

           * 無參數構造函數

           */

          public NameValue(){

               

          }

         

          /**

           * 雙參數構造函數

           * @param name

           * @param value

           */

          public NameValue(String name,String value){

                this.name=name;

                this.value=value;

          }

         

          public String getName() {

                return name;

          }

          public void setName(String name) {

                this.name = name;

          }

          public String getValue() {

                return value;

          }

          public void setValue(String value) {

                this.value = value;

          }

         

          public String asXML() {

                StringBuilder sb=new StringBuilder();

               

                sb.append("<"+name+">");

                sb.append(StringUtils.isBlank(value)?"-":value);

                sb.append("</"+name+">");

               

                return sb.toString();

          }

    }

     

    public class NameValueList extends BaseDomainObj{

          // 內含NameValue的鏈表

          private List<?> list;

         

          /**

           * 無參數構造函數

           */

          public NameValueList(){

               

          }

         

          /**

           * 帶參數構造函數

           * @param list

           */

          public NameValueList(List<?> list){

                this.list=list;

          }

         

          @SuppressWarnings("unchecked")

          public String asXML() {

                StringBuilder sb=new StringBuilder();

               

               

                for(Object obj:list){

                      List<NameValue> ls=(List<NameValue>)obj;

                     

                      sb.append("<node>");

                      for(NameValue nv:ls){

                            sb.append(nv.asXML());

                      }

                      sb.append("</node>");

                }

               

               

                return sb.toString();

          }

     

          public void setList(List<?> list) {

                this.list = list;

          }

     

          public List<?> getList() {

                return list;

          }

    }

    說明:將一行記錄轉化成一個包含鍵值對的鏈表,在NameValueList的幫助下能方便的把從數據庫得到的行集轉化為一段XML

    StringBuilder sb=new StringBuilder();

    sb.append("    SELECT ");

    sb.append("        *");

    sb.append("    FROM tb_contract ");

    sb.append("    WHERE contract_id='"+id+"'");

    String sql=sb.toString();

     

    List<?> ls=this.getJdbcTemplate().query(sql,new NameValueRowMapper());

     

    NameValueList list=new NameValueList(ls);

     

    String xml=list.asXML();

     

     

     

     

     

    posted on 2011-06-01 18:17 何楊 閱讀(545) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品无码专区| 无码国产精品一区二区免费式芒果| 免费在线观看理论片| 三年片免费观看大全国语| 亚洲色图综合网站| 俄罗斯极品美女毛片免费播放| 国产真人无码作爱免费视频| 亚洲av无码一区二区三区观看| 午夜国产羞羞视频免费网站| 久久大香伊焦在人线免费 | 色天使色婷婷在线影院亚洲| 亚洲乱码中文字幕综合| 97人妻无码一区二区精品免费| 色爽黄1000部免费软件下载| 777亚洲精品乱码久久久久久| 国产一级一片免费播放i| 一级毛片成人免费看免费不卡 | 2019中文字幕免费电影在线播放| 亚洲AV无码一区二区大桥未久| 亚洲爆乳无码一区二区三区| 国产大片线上免费看| 91视频免费网址| 精品国产污污免费网站入口在线| 亚洲一级特黄特黄的大片| 久久久久久亚洲av成人无码国产| 国产免费无遮挡精品视频| 四虎最新永久免费视频| 视频免费在线观看| 男女超爽视频免费播放| 亚洲伊人久久大香线蕉结合| 亚洲AV无码乱码在线观看裸奔| 国产成人免费A在线视频| 亚洲成人免费在线观看| 99在线视频免费观看| 无人视频免费观看免费视频 | 免费观看又污又黄在线观看| 一区二区亚洲精品精华液| 亚洲精品乱码久久久久久下载| 亚洲精品国产字幕久久不卡 | 亚洲国产日韩综合久久精品| 亚洲永久永久永久永久永久精品|