jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别
//jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List
//JdbcTemplate是spring jdbctemplate通过注解实例化得到的
public int insertEmpMenu(final String EMP_ID_, final List<String> MENU_ID_LIST, Map<String, Object> operator) {
if (MENU_ID_LIST == null || MENU_ID_LIST.size() == 0) {//常见的判断方式
return 0;
}
String sql = "insert into OM_EMPMENU(ID_, EMP_ID_, MENU_ID_) values (?, ?, ?)";
BatchPreparedStatementSetter batch = new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, BaseUtils.getUuid());
ps.setString(2, EMP_ID_);
ps.setString(3, MENU_ID_LIST.get(i));
}
public int getBatchSize() {
return MENU_ID_LIST.size();
}
};
return JdbcTemplate.batchUpdate(sql, batch).length;
}
BigDecimal : Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处 理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用 java.math.BigDecimal。
当从数据库中取出的数是BigDecimal,需要对数据进行BigDecimal造型,然后调用相关方法,取得值,常见方法doubleValue(),intValue()。String类型可以直接造型
Double AVL_AMOUNT_ = ((BigDecimal) matYearPlanSum.get("AMOUNT_")).doubleValue();
(String) matMonthPlan.get("MAT_DESC_")
而如果是自己对取得的数据再进行计算获得新值时,从Map里取就不需要再使用BigDecimal,而是使用自己为其设定的类型
for (Map<String, Object> matYearPlanSum : matYearPlanSumList) {
AVL_AMOUNT_ = ((BigDecimal) matYearPlanSum.get("AMOUNT_")).doubleValue();
matYearPlanSum.put("AVL_AMOUNT_", AVL_AMOUNT_);
for (Map<String, Object> matMonthPlanHis : matDeptMonthPlanSpentBudget) {
if (matYearPlanSum.get("MAT_NO_").equals(matMonthPlanHis.get("MAT_NO_"))) {
if (matYearPlanSum.get("AMOUNT_") != null && matMonthPlanHis.get("SPENT_AMOUNT_") != null) {
AVL_AMOUNT_ = ((BigDecimal) matYearPlanSum.get("AMOUNT_")).doubleValue() - ((BigDecimal) matMonthPlanHis.get("SPENT_AMOUNT_")).doubleValue();
}
matYearPlanSum.put("AVL_AMOUNT_", AVL_AMOUNT_);
break;
}
}
}
for (Map<String, Object> matMonthPlan : matMonthPlanList) {
for (Map<String, Object> matYearPlanSum : matYearPlanSumList) {
if (matMonthPlan.get("MAT_NO_").equals(matYearPlanSum.get("MAT_NO_"))) {
if (matYearPlanSum.get("ENABLE_AMOUNT_") != null && matMonthPlan.get("AMOUNT_") != null) {
ENABLE_AMOUNT_ = ((BigDecimal) matMonthPlan.get("AMOUNT_")).doubleValue();
ENABLE_AMOUNT_ = (Double) matYearPlanSum.get("ENABLE_AMOUNT_") + ENABLE_AMOUNT_;//例如此处的Double
}
matMonthPlan.put("ENABLE_AMOUNT_", ENABLE_AMOUNT_);
break;
}
}
}
常见报错:Caused by: java.sql.SQLException: ORA-00911: 无效字符 是因为拼接的SQL语句后面多了一个分号。使用spring jdbctemplate不需要在SQL语句后加分号
to_date() 作用将字符类型按一定格式转化为日期类型:
具体用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。
如;to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd hh24:mi:ss'') 将得到具体的时间
jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别的更多相关文章
- mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子
mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)mysql字符串拼接cancat实战例子: mysql update set 多个字段相加,如果是数字相加可以直接用+号(注:hund ...
- Mybatis中进行批量更新(updateBatch)
更新多条数据,每条数据都不一样 背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新.(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作 ...
- Codeigniter 在Active Record中限制批量更新数目
今天手头电商项目有个需求是:将订单中的优惠券自动发放给买家,所以要只更新优惠券表中的某几行数据,查了手册和网络都没有解决办法. 一开始用循环和遍历来做都是错的,因为update语句一下就更新掉所有符合 ...
- jdbctemplate中的query(sql,params,mapper)与queryForList(sql,params,class)区别
query(sql,params,mapper):是针对自定义对象类型的查询语句,比如: jdbcTrade.query(sql, params, new AMapper()); queryForLi ...
- 从源码的角度看 React JS 中批量更新 State 的策略(下)
这篇文章我们继续从源码的角度学习 React JS 中的批量更新 State 的策略,供我们继续深入学习研究 React 之用. 前置文章列表 深入理解 React JS 中的 setState 从源 ...
- [转]MySQL批量更新死锁案例分析
文章出处:http://blog.csdn.net/aesop_wubo/article/details/8286215 问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常, ...
- Statement和PreparedStatement批量更新
优势:1.节省传递时间. 2.并发处理. PreparedStatement: 1) addBatch()将一组参数添加到PreparedStatement对象内部. 2) executeBatch( ...
- mysql批量更新、多表更新、多表删除
本文介绍下,mysql中进行批量更新.多表更新.多表删除的一些实例,有需要的朋友可以参考下. 本节主要内容: mysql的批量更新.多表更新.多表删除 一,批量更新: 复制代码代码示例: update ...
- MySQL批量更新死锁案例分析--转载
问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackE ...
随机推荐
- Map接口使用注意事项
1,Map接口对象本身不能直接使用迭代进行输出的.因为map每个位置存放的是一对值. 而iterator每次只能找到一个值.如果一定要迭代输出,可以通过以下步骤.: 但是,Map接口只作为查找使用,输 ...
- 使用codemodel生成Java代码
例子 JCodeModel cm = new JCodeModel(); JDefinedClass dc = cm._class("foo.Bar"); dc.annotate( ...
- c语言函数
听着函数这两个字多多少少都会觉得有点复杂吧.因为一想到函数大多数人都会想到f(x),但其实c语言里面的函数不是那样的,老师教了一个很好的理解方法函数就是个机器人,而这个机器人是你自己做出来的.所有不用 ...
- 判断.net中在windows系统下的字节序
字节序,是指字节在内存中的存储顺序.其又分为大端字节(Big-Endian)序和小端字节序(Little-Endian). 以下摘自百度百科: a) Little-Endian就是低位字节排放在内存的 ...
- redis主从同步
本文是在window环境下的主从同步 1.redis是如何实现主从同步的 redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从) ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- SQL Injection bypass WAF
tips: 利用的注射点: 支持Union 可报错 支持多行执行.可执行系统命令.可HTTP Request等额外有利条件 若非以上类型,则可能需要暴力猜解.猜解时,可能会遇到一些限制.攻击者要做的, ...
- bzoj 1305 dance跳舞
最大流. 首先二分答案,问题转化为x首舞曲是否可行. 考虑建图,对每个人建立三个点,分别表示全体,喜欢和不喜欢. 源点向每个男生全体点连一条容量为x的边. 每个男生整体点向喜欢点连一条容量为正无穷的边 ...
- 【原】常用的javascript设计模式
设计模式太多了,貌似有23种,其实我们在平时的工作中没有必要特意去用什么样的设计模式,或者你在不经意间就已经用了设计模式当中的一种.本文旨在总结平时相对来说用的比较多的设计模式. 什么是设计模式 百度 ...
- Java编程中的美好
java程序员如何写出"优美"代码,动力节点告诉你怎么办: 1.注释尽可能全面 对于方法的注释应该包含详细的入参和结果说明,有异常抛出的情况也要详细叙述:类的注释应该包含类的功能说 ...