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语句的几种方法,供大家参考.对于脚本输出的 ...
随机推荐
- 找工作-——网络IO
网络层 主要任务是把网络协议数据单元或分组从源计算机经过适当的路径发送到目的地计算机.从源计算机到目的计算机可能要经过若干个中间节点,这需要在通信子网中进行路由选择. 网络层与数据链路层有很大的差别, ...
- JS 获取json长度
var keleyijson={"plug1":"myslider","plug2":"zonemenu"," ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- GIF助手帮助说明
生成的文件位置? 生成的GIF等文件存储在 /sdcard/gifdir/ 目录下. 为什么分享到微信.Twitter等平台失败? 微信.Twitter等平台对GIF文件大小有限制,微信限制为1MB, ...
- linux命令-tar工具详解
把文件和目录打成一个包 文件打包 [root@wangshaojun ~]# tar -cvf 1.tar 1.txt 123 234 ///-c创建 -v可视化 -f file放最后面1.txt12 ...
- Frequent Pattern 挖掘之二(FP Growth算法)
Frequent Pattern 挖掘之二(FP Growth算法) FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断 ...
- 使用 Node.js 实现简单的 Webhook
距离 Node.js 这个东西出来已经过了好久了,感觉现在的前端如果不会点 Node.js 就有点太落后于时代啦.我接触它是从去年暑假开始的,当时在写一个比较神奇的东西,就顺便接触了一下.虽然网传 n ...
- 23. CTF综合靶机渗透(十六)
靶机说明: VM Name: JIS-CTF : VulnUpload Difficulty: Beginner Description: There are five flags on this m ...
- C# -- 继承规则
例子1--C#继承的常见问题: using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- CentOS7 LVM磁盘扩容
1:创建磁盘分区(注意红色命令部分) [root@hongyin-test- ~]# fdisk /dev/sda Welcome to fdisk (util-linux ). Changes wi ...