string中执行sql语句
Spring(JdbcTemplate.class)中的queryForMap()、queryForObject()、queryForLong()、queryForInt()等方法都会去调用
public static Object requiredSingleResult(Collection results) throws IncorrectResultSizeDataAccessException这个方法(DataAccessUtils.class)
,此方法中会判断得到的结果集Collection是否为空,为空就抛出异常EmptyResultDataAccessException
结果程序出错,在程序中catch该异常并处理一下就可以了。
Integer intTest;
  try {
    Map mapTemp = getJdbcTemplate().queryForMap(sSql, oArry );
   intTest= (Integer) mapTemp.get("N_Column");
  } catch (EmptyResultDataAccessException e) {
     intTest=new Integer(0);
  }
或者可以考虑使用queryForList()、queryForRowSet()这些方法,去处理。
List listTest = getJdbcTemplate().queryForList(sSql, oArry );
、、、、、、、、、、、、、、、、、、、、、
转自: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(*)... RowMapper对象 Public List<User> getUsers() { protected class ItemRowMapper implements RowMapper { //这个类也可以定义在方法里如 RowMapper rowMapper = new RowMapper(){} 想象 getJdbcTemplate().query()方法 和 RowMapper类 public List query(String sql, RowMapper rowMapper){  | 
第二部分:转自:http://peirenlei.javaeye.com/blog/353170
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对象返回。
string中执行sql语句的更多相关文章
- EF中执行sql语句,以及事务
		
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
 - [转]在EntityFramework6中执行SQL语句
		
本文转自:http://www.cnblogs.com/wujingtao/p/5412329.html 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有 ...
 - 在EntityFramework6中执行SQL语句
		
在EntityFramework6中执行SQL语句 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有操作.这一节我来介绍一下如何使用在EF6中执行SQL语 ...
 - 在EF中执行SQL语句(转载)
		
在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...
 - 在EntityFramework6中执行SQL语句【转】
		
在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有操作.这一节我来介绍一下如何使用在EF6中执行SQL语句. 你可能要问,我用EF不就为了避免写SQL吗?如 ...
 - nhibernate中执行SQL语句
		
在有些时候,可能需要直接执行SQL语句.存储过程等,但nhibernate并没有提供一种让我们执行SQL语句的方法,不过可以通过一些间接的方法来实现. 下面给出一个在nhibernate中执行SQL语 ...
 - easyui datagrid 禁止选中行    EF的增删改查(转载)   C# 获取用户IP地址(转载)  MVC EF 执行SQL语句(转载)    在EF中执行SQL语句(转载)  EF中使用SQL语句或存储过程  .net MVC使用Session验证用户登录  PowerDesigner 参照完整性约束(转载)
		
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
 - 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'
		
在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法: 1.关闭MySQL数据库 2 ...
 - Shell脚本中执行sql语句操作mysql的5种方法【转】
		
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
 
随机推荐
- nefu阶乘定理
			
Description 小明的爸爸从外面旅游回来给她带来了一个礼物,小明高兴地跑回自己的房间,拆开一看是一个很大棋盘(非常大),小明有所失望.不过没过几天发现了大棋盘的好玩之处.从起点(0,0)走到终 ...
 - 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
			
目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...
 - RS-485收发的零延时转换电路
			
转自:http://www.dzsc.com/data/html/2007-5-28/41097.html RS-485是一种基于差分信号传送的串行通信链路层协议.它解决了RS-232协议传输距离太近 ...
 - .clearfix:after
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - ansible的使用
			
ansible主要分为单条命令和组命令(即配置后缀为名yml的文件,使用ansible-playbook执行)的使用,以下分别对两者进行说明.如不会安装ansible,请参考我的文章 centos7安 ...
 - 阶段2-新手上路\项目-移动物体监控系统\Sprint4-嵌入式web服务器开发\第3课-CGI程序开发
			
实现CGI程序显示一幅图片最核心的功能 把上一节课编写好的led.c程序拷贝过来,并重新命名为image.c 把led的某些部分删除,后如下 那么如何显示一幅图片呢,百度(搜索在html里面去插入图片 ...
 - 使用Paramiko的问题
			
在使用Paramiko远程登录的时候,会报sudo: sorry, you must have a tty to run sudo 切换到root用户,使用visudo命令,然后就会打开一个文本,在文 ...
 - 《鸟哥的Linux私房菜》读书笔记5
			
1.shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了; 2.shell script 其实就是纯文字文件 (ASCII) ,我们可以编辑这个档案, ...
 - 微信小程序自学第三课:文件作用域,模块化
			
一.文件作用域 在 JavaScript 文件中声明的变量和函数只在该文件中有效:不同的文件中可以声明相同名字的变量和函数,不会互相影响. 通过全局函数 getApp() 可以获取全局的应用实例,如果 ...
 - C++开源库(一) ----log4cpp详解
			
我们在写程序的时候通常会希望将一些信息记录下来,方便我们进行日后的一些信息跟踪,错误排查等等.比如:我们在进行数据库操作的时候,我们通常希望知道现在是程序的哪一部分进行了数据库的操作,所以我们会记录下 ...