严格来说,数据库上的金额这个字段根本就不应该被直接set.

为什么这么说呢,因为在这个操作完成以后,实际上数据库要承载的信息被丢失了,丢失了那一部分呢?丢失了修改前的数值,而且是永久丢失了,再也找不回来了,这里就产生了一个信息上的…《黑洞》,信息永远丢失了。

更加科学的设计,是设计一张基于有效时间的拉链表,每次金额变化的时候,写入一条新纪录,并将产生这次金额变化的原因记录下来备查。

如果再扩展一下,将金额变化的增加和减少分别纪录到两个字段,就构成会计学上的借贷记账法,如果再加上科目记账体系,就是复式记账法。

复式记账法的优点在于记账过程是可逆的,而且可以自动进行稽核处理,确保记账过程是准确的,这个准确性是通过会计学的理论来保证和证明的。

总的来说,涉及金额计算的时候,最理想的是使用复式记账法来记账处理,次之采用借贷记账来处理,再次之采用单边流水账拉链表来处理,最差的就是直接使用sql语句update 金额。

至于是将计算方法放在java里面还是写存储过程,这个已经是很枝节的问题了。

先定存储方案,再来定计算方案,而不是反过来。

------------------补充的分割线-------------

说个自己曾经做过的蠢事。

当年做一个系统,其中一步需要先删除一部分数据,再重新计算。于是就有了delete from aaa 类似这样的脚本,鬼使神差,那天改的程序没有加上where条件,也可能是加班加多了脑子糊涂了,然后就把程序下发下去了,当时是cs的程序,客户端的。然后客户一执行,业务数据表的数据就消失的干干净净了。

这是真实版本的删库了。下一步就该跑路了。

多亏当时的客户比较有经验,知道你们小年轻不靠谱,操作之前自己把数据库做了个备份,发现了问题赶紧反馈了回来,才让我谈过了跑路的宿命。

在此之前我是不理解为啥数据库要设计那么多角色,要设计那么复杂的权限控制的,凭啥不让执行delete命令呢。吃了这次亏以后,如同当头一棒,才明白为啥控制限制数据库用户的权限,不能把啥权限都给他。

数据库的访问权限固然是方便了开发者,但另一方面也把开发者陷入到危险之中,最安全的开发方式就是开发者只调用报文和数据库交互,而不去直接接触数据库本体。物理隔离是最有效的安全控制手段。

这一段说的有点跑题了。

java运行内存计算_java计算金额是放在内存中计算还是在sql中计算好呢?相关推荐

  1. java中的subString与SQL中的subString(作为常识应该记住的)

    java中 "Hello World".substring(6,11); 含义[6,11)    其中两个数字代表索引,索引位置从0开始. SQL中 substring(" ...

  2. java 32位_Java知识点:创建节约内存的JavaBean

    一个Java对象到底有多大? 想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示. Java对象结构 一个Java对象在Heap的表示,可以分为三部分: Object Heade ...

  3. java sqlserver 二进制_Java将图片资源以二进制的形式保存到Sqlserver数据库中

    如何使用Java语言将图片资源以二进制的形式保存的数据库中 在sqlserver中创建表 use MyDb1 go create table SaveImg( id varchar(10) prima ...

  4. 计算贷款的每月支付额。程序要求用户输入贷款的年利率、总金额 和年数,程序计算每月支付金额,并将结果显示输出。计算贷款的月支付额公式如下:(Java课本练习题 题目要求 )

    2.7 package booksTest;import java.util.Scanner;public class p34_2_7 {public static void main(String[ ...

  5. java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘

    问题背景&思路 如果需要计算100的阶乘,那应该怎么做? 方法1: for循环(默认,单线程) 方法2: 多线程,MapReduce思想 main线程开启多个子任务(个数=CPU核心数),放到 ...

  6. java 时间戳最大值_Java中在时间戳计算的过程中遇到的数据溢出问题解决

    背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...

  7. java 求商_Java程序计算商和余数

    Java程序计算商和余数 在该程序中,您将学习从Java中给定的被除数和除数计算商和余数. 示例:计算商和余数 public class QuotientRemainder { public stat ...

  8. java 线性计算器_java版科学计算器,支持表达式计算

    <java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...

  9. java算小数_Java 小数精确计算问题

    Java 小数精确计算问题 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是0.9,而是一连串的小数.问题在于1.1 这个 ...

最新文章

  1. GinWin命令控制台执行指令
  2. 使用jquery图表插件jqplot之折线图
  3. phpcms 后台设置 posid 推荐位(支持多选) - 教程篇
  4. Java集合框架之四大接口、常用实现类,java基础面试笔试题
  5. 绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版
  6. 卡分区 shell脚本_分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息
  7. java去除网页中的广告和导航等信息_**css+html纯css怎样去除导航子菜单中的默认背景?**...
  8. 【Flink】(04)Apache Flink 漫谈系列 —— 实时计算 Flink 与 Alibaba Cloud Realtime Compute 剖析
  9. MacOS - MacBook - 推荐工具收集
  10. bmvc哪个出版社出版_在出版饮食上
  11. 密西根州立大学计算机排名,密歇根州立大学MSU(Michigan State University)计算机科学Computer Science专业排名第91位(2021年THE世界大学商科排名)...
  12. 基于VC++的WEB浏览器的实现
  13. RS232和TTL电平
  14. Heading/Pitch/Roll与Omega/Phi/Kappa简单介绍
  15. 在线使用的时间管理工具
  16. java俄罗斯方块七中图形类_shell脚本俄罗斯方块--代码真正详解
  17. 为什么论文降重没有效果?
  18. CocosCreator 2.4.1版本 打包微信抖音小游戏CDN配置问题
  19. 基于人脸面部检测的口罩识别系统
  20. python数据拟合固定参数_固定某些参数的双峰高斯分布拟合

热门文章

  1. Python指定位置插入元素
  2. Premiere教程3
  3. 赤壁游戏服务器获取玩家角色信息失败,《赤壁三国》关服停运公告
  4. Proxy代理的作用
  5. iPad mini 2设计转变无边框
  6. eureka配置账号密码才能访问
  7. android 倒计时跳过,倒计时器跳过一些毫秒
  8. 程序猿,前路之路茫茫然 行业发展趋势
  9. 【Handler】IdleHandler
  10. 利用机器学习识别细碎图斑实战(1):前言