zoukankan      html  css  js  c++  java
  • jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别

     1 //jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List
     2 
     3 //JdbcTemplate是spring jdbctemplate通过注解实例化得到的
     4 
     5 public int insertEmpMenu(final String EMP_ID_, final List<String> MENU_ID_LIST, Map<String, Object> operator) {
     6         if (MENU_ID_LIST == null || MENU_ID_LIST.size() == 0) {//常见的判断方式
     7             return 0;
     8         }
     9 
    10         String sql = "insert into OM_EMPMENU(ID_, EMP_ID_, MENU_ID_) values (?, ?, ?)";
    11         BatchPreparedStatementSetter batch = new BatchPreparedStatementSetter() {
    12             public void setValues(PreparedStatement ps, int i) throws SQLException {
    13                 ps.setString(1, BaseUtils.getUuid());
    14                 ps.setString(2, EMP_ID_);
    15                 ps.setString(3, MENU_ID_LIST.get(i));
    16             }
    17 
    18             public int getBatchSize() {
    19                 return MENU_ID_LIST.size();
    20             }
    21         };
    22         return JdbcTemplate.batchUpdate(sql, batch).length;
    23     }

    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,而是使用自己为其设定的类型

     1 for (Map<String, Object> matYearPlanSum : matYearPlanSumList) {
     2                 AVL_AMOUNT_ = ((BigDecimal) matYearPlanSum.get("AMOUNT_")).doubleValue();
     3                 matYearPlanSum.put("AVL_AMOUNT_", AVL_AMOUNT_);
     4                 for (Map<String, Object> matMonthPlanHis : matDeptMonthPlanSpentBudget) {
     5                     if (matYearPlanSum.get("MAT_NO_").equals(matMonthPlanHis.get("MAT_NO_"))) {
     6                         if (matYearPlanSum.get("AMOUNT_") != null && matMonthPlanHis.get("SPENT_AMOUNT_") != null) {
     7                             AVL_AMOUNT_ = ((BigDecimal) matYearPlanSum.get("AMOUNT_")).doubleValue() - ((BigDecimal) matMonthPlanHis.get("SPENT_AMOUNT_")).doubleValue();
     8                         }
     9                         matYearPlanSum.put("AVL_AMOUNT_", AVL_AMOUNT_);
    10                         break;
    11                     }
    12                 }
    13             }
    14 for (Map<String, Object> matMonthPlan : matMonthPlanList) {
    15                 for (Map<String, Object> matYearPlanSum : matYearPlanSumList) {
    16                     if (matMonthPlan.get("MAT_NO_").equals(matYearPlanSum.get("MAT_NO_"))) {
    17                         if (matYearPlanSum.get("ENABLE_AMOUNT_") != null && matMonthPlan.get("AMOUNT_") != null) {
    18                             ENABLE_AMOUNT_ = ((BigDecimal) matMonthPlan.get("AMOUNT_")).doubleValue();
    19                             ENABLE_AMOUNT_ = (Double) matYearPlanSum.get("ENABLE_AMOUNT_") + ENABLE_AMOUNT_;//例如此处的Double
    20                         }
    21                         matMonthPlan.put("ENABLE_AMOUNT_", ENABLE_AMOUNT_);
    22                         break;
    23                     }
    24                 }
    25             }

    常见报错: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'') 将得到具体的时间

  • 相关阅读:
    动画电影分享
    Nginx 学习
    震惊!一步激活idea,亲测有效-2020-7-9
    根据oracle判断语句结果,进行循环语句
    Oracle11g的exp导出空表提示EXP-00011: 不存在
    查询某个用户下各个表的数据量
    Oracle批量修改表字段类型(存储过程)
    PLS-00201: identifier 'SYS.DBMS_EXPORT_EXTENSION' must be declared
    Oracle AWR报告生成和大概分析
    oracle如何给原有的用户变更表空间
  • 原文地址:https://www.cnblogs.com/shinelover/p/5860209.html
Copyright © 2011-2022 走看看