行式填报表轻松搞定流水号

简介: 多用户填报主键重复,常会造成数据丢失,为避开这个问题我们长依赖于数据库的主键自增,那么,怎样可以做到不依赖数据库实现流水号自增呢,去乾学院看个究竟:<a href="http://c.raqsoft.

在各式各样的报表业务需求中,有这样一类,不仅要对数据进行统计呈现,还要基于这些数据做增、删、改的操作并与数据库进行交互。这种情况下,无论从数据库统一管理还是数据合法性角度考虑,都难免需要进行诸如自动计算、校验、跨表取数之类的计算。今天,小编就带领大家 get 其中的一个新姿势:自动计算特殊用法之“流水号”。
场景举栗如下:
实际项目应用中,当多用户并发填报时我们常常会遇到主键重复的问题,造成的结果便是前一个用户填报的内容,会被另一个用户给覆盖掉,从而造成数据丢失。如果由开发人员通过编程来解决这个问题,一般都是比较麻烦的事情。而如果交由数据库去处理,就变得简单多了,因为不管多少个用户,对数据库来说只是一个更新数据库的命令队列,数据库本身会对主键的问题进行判断。这也就是大多数数据库能够提供字段自动增长功能的原因。
不过选对了报表工具,我们也可以不依赖数据库就轻松生成流水号,避免因为主键重复造成数据丢失。下面我们就以润乾报表为例,看一下具体的做法:
方法一:序号格
报表设计界面如下图所示:
1

其中,
数据处理部分选择【多源 SQL】然后【使用向导生成脚本】,“数据来源”设置如下:
2

“数据去向”指定编号字段作为主键,如下图所示:
3

保存对象的旧数据,提取前两步设置的对象名供报表取数回填使用。
4

报表设计方面
第 2 行标题名均与数据库字段名称一致;
A3 单元格,设置字段名称为 employee. 编号;
I3 单元格,表达式为 =H3*1.2, 实现自动计算;
A3-I4 单元格类型为数值格。
要求新增行时,编号自动增长,最终效果如下图所示
5

重点来了,实现方法只需选中 A3 单元格,勾选右侧属性【类型】–【序号格】即可。
6

【注】此方法采用数据全查询且按照间隔为 1 的递增规则,也就是在当前值的基础上进行递增计算,然后把每一次计算出的新值作为当前值。
方法二:UUID 算法
首先,在报表展现的 jsp(如:previewInput.jsp) 页面中定义 js 方法如下:

function newUUID() 
{ 
        var uuid = ""; 
        for (var i = 1; i <= 16; i++){ 
         var n = Math.floor(Math.random()*16.0).toString(16); 
         uuid +=   n; 
      } 
    var len = uuid.length; 
    return uuid;    
} 

然后,修改方法一中的报表,不要勾选【序号格】,然后将【缺省值表达式】设置为 newUUID(),调用自定义的 UUID 算法。如下图
7

最终页面上新增行展现效果如下,生成 16 位的字符串。
8

【注】此方法将按照一定规则随机产生主键,由数字、字符串等组成的 16 位字符串。
通过以上 2 种方法,我们在报表端就可以轻轻松松搞定主键自增长,永久避免因主键冲突导致数据丢失的事情。
最最后,我们来回顾一下其中的技术要点:

  1. 生成间隔为 1 的连续递增数值做主键:
    【技能】报表设计区域右侧属性栏–类型–序号格 勾选即可。
  2. 生成由数字,字母组成的 16 位随机字符串做主键:
    【技能】巧妙运用 UUID 方法 +【缺省值表达式】。

作者:IBelieve
链接:http://c.raqsoft.com.cn/article/1542937624221?r=IBelieve
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
SQL 大数据 HIVE
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
快速学习电商项目之交易订单明细流水表 SQL 实现(上)
854 0
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
|
9月前
|
关系型数据库 MySQL Python
MySql查询出两张表中不同的数据
MySql查询出两张表中不同的数据
98 0
|
SQL 存储 JSON
XssFilter使用记录
xss意思是跨域网站攻击,这里不探讨xss的起源,单纯记录下xss在项目中的实际应用,xss防止javascrpts脚本注入类似于sql注入,项目中使用到了xssfilter所以记录在此
104 0
宜搭,删除入库表如何更新库存底表,把删除入库表的数量加回底表库存中
删除入库表如何更新库存底表,把删除入库表的数量加回底表库存中
|
SQL 大数据 开发者
电商项目之交易订单明细流水表 SQL 实现(下)|学习笔记
快速学习电商项目之交易订单明细流水表 SQL 实现(下)
858 0
电商项目之交易订单明细流水表 SQL 实现(下)|学习笔记
|
数据处理 数据库
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
1428 0
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
|
BI 数据处理
脚本填报表的条件查询
在上一篇《脚本模式下的填报表制作》中,我们详细讲述了如何使用脚本进行数据处理、制作填报表,今天我们盘道一下脚本模式下如何实现条件查询。 一、需求描述 然后再进行增删改操作。例如,先过滤出所关心城市的客户信息,然后再对查询结果进行更新操作。
|
SQL 关系型数据库 测试技术
关系数据库如何快速查询表的记录数
在数据库中,很多人员习惯使用SELECT COUNT(*)、SELECT COUNT(1)、SELECT COUNT(COL)来查询一个表有多少记录,对于小表,这种SQL的开销倒不是很大,但是对于大表,这种查询表记录数的做法就是一个非常消耗资源了,而且效率很差。
2501 0
|
BI 数据库
填报脚本之轻松搞定复杂表的数据入库
润乾报表,数据校验,脚本校验,集算器
1172 0
|
BI 数据库 关系型数据库
行式填报之主键设置
填报,行式填报,主键设置
1150 0