数据库自增长ID填报

编辑
文档创建者:文档助手1 (67727 )     浏览次数:10006次     编辑次数:16次     最近更新:monvzhilei 于 2017-09-16     

目录:

1. 描述编辑

数据库自增长ID填报是指在FineReport模板中进行数据填报的时候,不需要设置ID数据列,在往数据库中插入数据的时候,数据库的主键ID会自动增长。
在填报中,数据批量处理时,使用流水号来作为自增长型主键进行数据更新,可是当用户同时进行并发填报,即多人同时对一张报表进行填报,一个用户填报提交后,另外一个用户没有与服务器进行同步,默认会出现一个流水号,与数据库中刚提交的内容冲突。下面我们以Sql Server数据库为例,讲述数据库自增长ID填报实现报表的自动编号功能。

2. Sql Server数据库编辑

在Sql Server数据库中,提供了标识,可以通过设置标识、标识种子和标识增量来实现Sql Server主键的自增长。
2.1 自动编号设置
假设在SQL Server数据库中存在下面一张数据表,我们需要将其id列实现自增长,就可以在列属性中设置是标识,修改标识增量和标识种子,如下图:

222

2.2 模板制作
1)新建数据连接
新建一个数据连接,连接至该数据库,新建数据连接的方法详细请参照数据连接
2)模板设置
新建一张模板,添加数据集SELECT * FROM dbo.[KHK]
在模板设计主体页面第一行分别添加两个文本控件和一个插入行的按钮控件,并在第三行中将数据列拖曳至对应单元格中,如下图:

222

注:由于ID自增长不需要自己输入,因此只需要填报KH字段,B2单元格需要设置为纵向扩展,第二行的两个控件分别是,文本控件和按钮控件,按钮控件是插入行控件。
3)填报属性设置
点击模板>报表填报属性,增加一个内置SQL,如下图:

222

注:为数据表中的字段绑定报表单元格。
2.3 自增长ID使用
点击填报预览,在web端进行数据填报,如下图:

222

在KH标题下面的控件中插入2条数据,点击提交按钮,将数据提交入库,刷新页面,可以看到下面蓝色区域部分多了2条数据,即刚刚填报数据的数据,并且ID列也进行了自增长。

222

3. Oracle数据库编辑

3.1 自增长的实现
在Oracle数据库中,提供了序列的功能,可以通过Oracle的序列及触发器,实现主键的自增长。
 
 
1)创建序号
-- Create sequence create sequence SEQ_T_RECV minvalue 1 maxvalue 9999999 start with 1 increment by 1 cache 50;
2)创建表
-- Create table create table RECV_MSG ( id NUMBER, messageid VARCHAR2(32), contents VARCHAR2(2000), app_flg VARCHAR2(100), phonenumber VARCHAR2(2000), updatetime DATE default sysdate );
3)创建触发器
CREATE OR REPLACE TRIGGER "recv_trig" BEFORE INSERT ON recv_msg REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE BEGIN SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL; END recv_trig;
 
* ORACLE 12C 引进了Identity Columns新特性,从而实现了列自增长功能。
举例如下所示:
 
CREATETABLE"CHF"."T_XIFENFEI"
   (    "ID"NUMBER GENERATED ALWAYS ASIDENTITY MINVALUE 1 MAXVALUE
   9999999999999999999999999999 INCREMENT BY1 START WITH1
   CACHE 20 NOORDER  NOCYCLE  NOTNULLENABLE,
        "NAME"VARCHAR2(100)
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "INMEMORY"
3.2 模板实现
其模板实现与SQL Server数据库一致,这里不再赘述。

4. 常见问题编辑

4.1 报错信息
在7.0.4版本及之后的版本,使用数据库自增长ID进行数据填报时,可能会发生下图所示报错:

222

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'KHK' 中的标识列插入显式值。
4.2 报错原因
出现该报错原因是因为在7.0.4及之后版本中,FineReport数据填报自增长ID的时候,主键不能插入空数据,即报表填报属性处绑定的自增长ID字段所对应的单元格在进行填报时,不能为空,但是自增长ID本意就是不需要输入ID,所以导致报错。
4.3 解决方案
将以下的内容放入记事本中,并将文件另存为insertIgnoreColumn.properties,放入%FR_HOME%\WEB-INF\resources文件夹下面即可,文件内容为:
KHK.ignoreColumns=id

注:其中KHK是填报数据的数据表名称,需要对应修改,如果有多个数据表需要使用自增长ID,那么直接换行再加入这句话内容即可。
新增insertIgnoreColumn.properties文件或者修改insertIgnoreColumn.properties文件里的内容后,需重启web服务才生效。

附件列表


主题: 填报应用
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以通过帆软论坛获取帮助,论坛上有非常多的大神,有些水平比帆软工程师还要高哦。
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

本文档是否有用?
谢谢! 我们非常感谢您的反馈。
提交反馈: