转自:http://hi.baidu.com/storex/blog/item/666b8f3889d7c92f97ddd89d.html
Spring 框架 执行SQL getJdbcTemplate().query update 用法
2010-04-14 13:56

Spring JdbcDaoSupport 执行SQL

return int: getJdbcTemplate().queryForInt(sql)    select count(*)...
return List:getJdbcTemplate().query(sql, rowMapper)   select ... from ...
return null:getJdbcTemplate().update(sql)     insert into ... values or delete from ...
return null:getJdbcTemplate().update(sql, objects, types) insert into ... values
return List:getJdbcTemplate().query(sql, new Object[] { assetId }, new int[] { Types.INTEGER }, rowMapper)   select * from ... where id=
Object[] objects = new Object[]{user.getId(),user.getName(),user.getPassword()...};
int[] types = new int[]{Type.VARCHAR,Type.VARCHAR,Type.VARCHAR,...}

RowMapper对象
RowMapper的 mapRow() 方法是留给我们去组装实体类用的,返回是这种类的集合List

Public List<User> getUsers() {
String sql = "select * from User";
return getJdbcTemplate().query(sql,new ItemRowMapper());
}

protected class ItemRowMapper implements RowMapper { //这个类也可以定义在方法里如 RowMapper rowMapper = new RowMapper(){}
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
   Item item = new Item();
   item.setId(rs.getInt("id"));
   item.setUserId(rs.getInt("user_id"));
   item.setName(rs.getString("name"));
   item.setEmail(rs.getString("email"));
   return item;
}
}

想象 getJdbcTemplate().query()方法 和 RowMapper类

public List query(String sql, RowMapper rowMapper){
int num = 0;
List<Object> list = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
   conn = getConn();
   pstmt = conn.prepareStatement(sql);
   rs = pstmt.executeQuery();
   num = 0;
   while(rs.next()){num++};
   list = rowMapper.execute(rs, num);
}catch(Exception e){
  
}finall{
   rs.close();
   pstmt.close();
   conn.close();
}
return list;
}
abstract Class RowMapper(){
List<Object> list = null;
public List execute(ResultSet rs, int rowNum){ //rowNum没用到
   while(rs.next){
    list.add(mapRow(rs, rowNum));
   }
   return list;
}
public Object mapRow(ResultSet rs, int RowNum);
}

第二部分:转自:http://peirenlei.javaeye.com/blog/353170

Spring JdbcTemplate 应用

JdbcTemplate中的封装了很多实用的方法。
首先来介绍一下用JdbcTemplate来查询数据的方法。
1.返回指定对象类型的List (query方法)

Java代码
Java代码
public List getProductModle(String value) throws DataAccessException {   
        List resultList = new ArrayList();   
        List args = new ArrayList();   
        String sql = "select F_CPUT_MOD_ID as id ,F_CPUT_MOD_NAME as name from CPUT_MOD_T"+   
            " WHERE F_MARKET_LOCA_ID = ?  order by F_CPUT_MOD_ID";   
        if(StringUtils.isNotEmpty(value)){   
            args.add(value);   
        }   
        resultList = this.getJdbcTemplate().query(sql,args.toArray(),   
                                            new ProductModleRowMapper());   
        return resultList;   
    }   
    /**  
     * @author rockjava  
     * @description 封装产品型号结果集  
     */  
    private   class  ProductModleRowMapper  implements  RowMapper{   
  
        public Object mapRow(final ResultSet rs, final int rowNum) throws SQLException {   
            ProductModleVO vo = new ProductModleVO();   
            vo.setProModleId((String)rs.getString("id"));   
            vo.setProModleName((String)rs.getString("name"));   
            return vo;   
        }   
           
    }

public List getProductModle(String value) throws DataAccessException {    List resultList = new ArrayList();    List args = new ArrayList();    String sql = "select F_CPUT_MOD_ID as id ,F_CPUT_MOD_NAME as name from CPUT_MOD_T"+     " WHERE F_MARKET_LOCA_ID = ?  order by F_CPUT_MOD_ID";    if(StringUtils.isNotEmpty(value)){     args.add(value);    }    resultList = this.getJdbcTemplate().query(sql,args.toArray(),             new ProductModleRowMapper());    return resultList;   }   /**    * @author rockjava    * @description 封装产品型号结果集    */   private   class  ProductModleRowMapper  implements  RowMapper{      public Object mapRow(final ResultSet rs, final int rowNum) throws SQLException {     ProductModleVO vo = new ProductModleVO();     vo.setProModleId((String)rs.getString("id"));     vo.setProModleName((String)rs.getString("name"));     return vo;    }       }

这里实现了RowMapper类的mapRow方法,用来把查询到的结果集用指定的类来封装,最后返回一个List,List中装着
我们自定的值对象。
2.返回指定类型的结果 (queryForObject方法)

Java代码
public String getCurrentPhase(String arg) throws DataAccessException {   
        String currentPhase = "";   
        String sql="select F_CURR_YEAR from COMPETITION_BASE_T where F_COMPETITION_ID=?";   
        Object[] o ={arg};    
        try {   
            currentPhase = (String)this.getJdbcTemplate().queryForObject(sql,o, String.class);   
        } catch (Exception e) {   
            currentPhase = "";   
            e.printStackTrace();   
        }   
           
        return currentPhase;   
    }

public String getCurrentPhase(String arg) throws DataAccessException {    String currentPhase = "";    String sql="select F_CURR_YEAR from COMPETITION_BASE_T where F_COMPETITION_ID=?";    Object[] o ={arg};     try {     currentPhase = (String)this.getJdbcTemplate().queryForObject(sql,o, String.class);    } catch (Exception e) {     currentPhase = "";     e.printStackTrace();    }        return currentPhase;   }

在这个例子中,用到了queryForObject这个方法,其中第一个参数是要执行的sql,第二个参数是Object数组类型(其中装的是sql脚本用到
的参数),第三个参数就是要制定返回结果的类型(这里我定义的是String类型)
3.查询结果返回Int类型 (queryForInt方法)

Java代码
public boolean doCheckCompete(Map args) throws DataAccessException {   
        ....省略代码   
           
        /**sql脚本用到的参数集合*/  
        Object[] args = new Object[]{   
                companyId,           
                competitionId,       
                marketType,          
                martID,              
                currentPhase         
        };   
        StringBuffer sql = new StringBuffer();   
        sql.append("SELECT   COUNT ( * ) ");   
        sql.append("FROM   BEFOR_ORDER_T t ");   
        sql.append("WHERE   T.F_COMPANY_ID = ? ");   
        sql.append(" and T.F_COMPETITION_ID=? ");   
        sql.append(" and T.F_MARKET_LOCA_ID=? ");   
        sql.append(" and T.F_MARKET_SCOPE_ID=? ");   
        sql.append(" and T.F_CURRENT_PHASE = ? ");   
        int i=0;   
        i = this.getJdbcTemplate().queryForInt(sql.toString(), args);   
        if(i>0){   
            return true;   
        }   
        return false;   
    }

public boolean doCheckCompete(Map args) throws DataAccessException {    ....省略代码        /**sql脚本用到的参数集合*/    Object[] args = new Object[]{      companyId,              competitionId,          marketType,             martID,                 currentPhase          };    StringBuffer sql = new StringBuffer();    sql.append("SELECT   COUNT ( * ) ");    sql.append("FROM   BEFOR_ORDER_T t ");    sql.append("WHERE   T.F_COMPANY_ID = ? ");    sql.append(" and T.F_COMPETITION_ID=? ");    sql.append(" and T.F_MARKET_LOCA_ID=? ");    sql.append(" and T.F_MARKET_SCOPE_ID=? ");    sql.append(" and T.F_CURRENT_PHASE = ? ");    int i=0;    i = this.getJdbcTemplate().queryForInt(sql.toString(), args);    if(i>0){     return true;    }    return false;   }

这里用的是queryForInt方法返回int类型。
4.查询结果返回Map类型 (queryForMap方法)

Java代码
String sql = "select T.F_COMPETE_ORDER_STATE ,T.F_GENERATED_ORDERS " +   
        "from COMPETITION_BASE_T t " +   
        "where T.F_COMPETITION_ID = ?";   
  
Map state = (Map)this.getJdbcTemplate().queryForMap(sql,new Object[]{args});   
  
String compete_order_state = state.get("F_COMPETE_ORDER_STATE").toString();   
  
String generated_orders = state.get("F_GENERATED_ORDERS").toString();

String sql = "select T.F_COMPETE_ORDER_STATE ,T.F_GENERATED_ORDERS " +    "from COMPETITION_BASE_T t " +    "where T.F_COMPETITION_ID = ?";    Map state = (Map)this.getJdbcTemplate().queryForMap(sql,new Object[]{args});    String compete_order_state = state.get("F_COMPETE_ORDER_STATE").toString();    String generated_orders = state.get("F_GENERATED_ORDERS").toString();

返回后的map中的键值对应的是select语句中的字段名字。
5.查询结果集直接返回list (queryForList方法)

Java代码 List list = new ArrayList();   
String sql="select T.F_OFF_PERIOD,T.F_PROBABILITY from ORDER_OFF_PERIOD_T t "+   
    "where T.F_COMPETITION_ID=?";   
Object[] args ={arg};    
try {   
    list = this.getJdbcTemplate().queryForList(sql, args);   
} catch (Exception e) {   
    e.printStackTrace();   
}   
...代码省略   
  
String a = (String)(((Map) list.get(0)).get("F_PROBABILITY"));   
String b = (String)(((Map) list.get(1)).get("F_PROBABILITY"));   
String c = (String)(((Map) list.get(2)).get("F_PROBABILITY"));

List list = new ArrayList();  String sql="select T.F_OFF_PERIOD,T.F_PROBABILITY from ORDER_OFF_PERIOD_T t "+   "where T.F_COMPETITION_ID=?";  Object[] args ={arg};   try {   list = this.getJdbcTemplate().queryForList(sql, args);  } catch (Exception e) {   e.printStackTrace();  }  ...代码省略    String a = (String)(((Map) list.get(0)).get("F_PROBABILITY"));  String b = (String)(((Map) list.get(1)).get("F_PROBABILITY"));  String c = (String)(((Map) list.get(2)).get("F_PROBABILITY"));

返回的List中装载的是Map对象,没个map对象中的键值对应sql脚本的字段名字。

上一篇中介绍了JdbcTemplate 的一些常用的查询方法,在这篇里将介绍用JdbcTemplate做更新数据操作

和调用存储过程。

1. JdbcTemplate 更新数据

Java代码
public boolean switchStartOrderMeeting(String argument, String flag)   
            throws DataAccessException {   
        boolean result = false;   
        String sql =    
            sql = "update COMPETITION_BASE_T t set T.F_COMPETE_ORDER_STATE = '0'"+   
            " where T.F_COMPETITION_ID = ?";   
        int i = 0;   
        //返回所影响的行数   
        i = this.getJdbcTemplate().update(sql, new Object[] { argument });   
        if (i > 0) {   
            result = true;   
        }   
        return result;   
    }

public boolean switchStartOrderMeeting(String argument, String flag)     throws DataAccessException {    boolean result = false;    String sql =      sql = "update COMPETITION_BASE_T t set T.F_COMPETE_ORDER_STATE = '0'"+     " where T.F_COMPETITION_ID = ?";    int i = 0;    //返回所影响的行数    i = this.getJdbcTemplate().update(sql, new Object[] { argument });    if (i > 0) {     result = true;    }    return result;   }

这个方法很简单,update方法只要传入sql脚本和脚本参数(Object数组类型)。

2. JdbcTemplate 调用存储过程

Java代码 /**代码片段*/  
//5个输入参数,3个输出参数   
String sql = "{call GENERATEORDERS_P(?,?,?,?,?,?,?,?)}";   
                               
final String company_id = result.get("F_COMPANY_ID").toString();           // 公司ID   
final String competition_id = result.get("F_COMPETITION_ID").toString();   // 比赛ID   
final String current_phase = result.get("F_CURRENT_PHASE").toString();     // 当前周期   
final String market_scope_id = result.get("F_MARKET_SCOPE_ID").toString(); // 市场ID   
final String market_loca_id = result.get("F_MARKET_LOCA_ID").toString();   // 产品类型ID   
  
Map mapR = (Map) getJdbcTemplate().execute(sql,new CallableStatementCallback() {   
            public Object doInCallableStatement(CallableStatement cs)throws SQLException,DataAccessException {   
                cs.setString(1, current_phase);    // 输入参数   
                cs.setString(2, competition_id);   // 输入参数   
                cs.setString(3, market_scope_id);  // 输入参数   
                cs.setString(4, market_loca_id);   // 输入参数   
                cs.setString(5, company_id);       // 输入参数   
                cs.registerOutParameter(6,Types.VARCHAR);//输出参数   
                cs.registerOutParameter(7,Types.VARCHAR);//输出参数   
                cs.registerOutParameter(8,Types.VARCHAR);//输出参数   
                cs.execute();   
                Map map = new HashMap();   
                map.put("RESULT", cs.getString(6));       // 订单数量   
                map.put("F_PRICE", cs.getString(7));      // 订单价格   
                map.put("F_CPUT_MOD_ID", cs.getString(8));// 产品型号ID   
                return map;   
            }   
        });

/**代码片段*/  //5个输入参数,3个输出参数  String sql = "{call GENERATEORDERS_P(?,?,?,?,?,?,?,?)}";           final String company_id = result.get("F_COMPANY_ID").toString();           // 公司ID  final String competition_id = result.get("F_COMPETITION_ID").toString();   // 比赛ID  final String current_phase = result.get("F_CURRENT_PHASE").toString();     // 当前周期  final String market_scope_id = result.get("F_MARKET_SCOPE_ID").toString(); // 市场ID  final String market_loca_id = result.get("F_MARKET_LOCA_ID").toString();   // 产品类型ID    Map mapR = (Map) getJdbcTemplate().execute(sql,new CallableStatementCallback() {     public Object doInCallableStatement(CallableStatement cs)throws SQLException,DataAccessException {      cs.setString(1, current_phase);    // 输入参数      cs.setString(2, competition_id);   // 输入参数      cs.setString(3, market_scope_id);  // 输入参数      cs.setString(4, market_loca_id);   // 输入参数      cs.setString(5, company_id);       // 输入参数      cs.registerOutParameter(6,Types.VARCHAR);//输出参数      cs.registerOutParameter(7,Types.VARCHAR);//输出参数      cs.registerOutParameter(8,Types.VARCHAR);//输出参数      cs.execute();      Map map = new HashMap();      map.put("RESULT", cs.getString(6));       // 订单数量      map.put("F_PRICE", cs.getString(7));      // 订单价格      map.put("F_CPUT_MOD_ID", cs.getString(8));// 产品型号ID      return map;     }    });

execute方法返回的是一个Object对象,在这里我封装了一个Map对象返回。

转载于:https://blog.51cto.com/cyxinda/1226068

Spring 框架 执行SQL getJdbcTemplate().query update 用法相关推荐

  1. laravel 输出最后执行sql 附:whereIn用法

    在sql语句执行前 DB::enableQueryLog(); sql sql sql sql sql dd(DB::getQueryLog()); DB::enableQueryLog(); $da ...

  2. SQL中的 update用法+示例

    update用于更新表中内容 语法: 1.修改单表 update 表名 set 列名 = 新值,..... where 筛选条件: 2.修改多表 update 表1 inner|left|right ...

  3. MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)

    第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...

  4. Spring框架学习day_03:对于读取文件方式的补充/关于spring框架知识点的学习方式

    1. 通过Environment读取.properties配置文件 假设在src/main/resources下存在jdbc.properties文件,并且,在该文件中存在若干条配置信息,如果需要读取 ...

  5. .Net执行SQL/存储过程之易用轻量工具

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. 由于该工具近来被广东省数个公司2B项目采用,且表现稳定,得到良好验证 ...

  6. cmd执行服务器sql文件命令行,Dos命令提示符下 - 用sqlcmd执行*.sql语句

    Dos命令提示符下 - 用sqlcmd执行*.sql语句 1)在Dos命令下执行sqlcmd命令(当然事先需要将sqlcmd增加到环境变量中去), 2)下面白色部分替换为服务器名或计算机名即可 sql ...

  7. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

  8. 在Spring框架中使用SQL存储过程

    Spring框架也支持对SQL存储过程的调用,SQL存储过程是一组预先定义好的SQL语句,并存储到数据库管理系统中,外部程序可以直接调用执行.本课主要讨论在Spring框架中应用程序如何调用MySQL ...

  9. php 获取最后执行的sql,如何获取ThinkPHP框架最后一次执行SQL语句及变量调试

    这篇文章主要介绍了ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作,结合实例形式分析了thinkPHP获取最后一次执行SQL语句的getLastSql()及fetchSql()函数以及 ...

  10. mysql query语句_使用mysql_query()函数执行SQL语句

    mysql_query()函数 PHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句. 对于没有数据返回结果集的 SQL ,如 UPDATE.DE ...

最新文章

  1. Android Stadio 所有的窗口都没有了
  2. 牛客网 牛客练习赛13 A.幸运数字Ⅰ
  3. Excel催化剂插件功能修复与更新汇总篇之十
  4. 四色原型图进行业务建模的思考
  5. 网页与 alert() 一样用于弹框却比之多了一个取消选项的方法 confirm()
  6. springboot运行在eclipse报异常的问题
  7. python3.6网络爬虫_python3.6网络爬虫
  8. frame页面跳转和信息提示页面
  9. Theine for Mac(电脑休眠工具)
  10. MemTest和Memtest86+使用教程
  11. 2021美团笔试题(第十套)个人解答
  12. 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
  13. MGV2000_CW、JL、JZ、KA/KX、CNTV,零配置_S905L-B_全套固件(可救砖)
  14. 正确使用RecyclerView分割线
  15. 山寨机java游戏下载_Q版水浒-山寨英雄
  16. 织梦后台登录出现500错误解决方案
  17. 运动世界校园破解刷跑步数据
  18. 使用Python批量将PDF转换成图片
  19. F 分布的定义和概率密度函数
  20. php初学者,php技术支持,php学习网站

热门文章

  1. 绝地求生服务器维护6.28,绝地求生6月28号更新完怎么进不去 绝地求生更新维护到几点6.28...
  2. FRR BGP协议分析12 -- ZEBRA路由的处理1
  3. Linux内核的netpoll框架与netconsole
  4. Uboot系统初始化为何要初始化堆栈?为何C语言的函数调用要用到堆栈,而汇编却不需要初始化堆栈?
  5. 深入解读Linux进程调度系列——数据结构解析
  6. 常用头文件和一些简单的函数
  7. Rotate Array
  8. 哈夫曼树的生成详解(C++)
  9. CodeforcesRound#498 (Div.3)E题Military Problem
  10. linux vim 手册,Vim 参考手册