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

          真正的快樂來源于創造

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

          公告


          常用鏈接

          留言簿(3)

          最新隨筆

          積分與排名

          • 積分 - 394262
          • 排名 - 145

          最新評論

          閱讀排行榜

          幾個使用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 何楊 閱讀(549) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 开化县| 玉屏| 大英县| 北辰区| 金华市| 榆中县| 聂拉木县| 高阳县| 木兰县| 西青区| 罗定市| 德惠市| 陇南市| 宜兴市| 东兰县| 定结县| 扬州市| 团风县| 平遥县| 延寿县| 北流市| 南阳市| 广东省| 米脂县| 钦州市| 诸城市| 沅陵县| 鹤壁市| 广州市| 泉州市| 巴林左旗| 庆元县| 沂水县| 临漳县| 福海县| 咸宁市| 巴林左旗| 普宁市| 阿克| 霞浦县| 碌曲县|