反馈已提交

网络繁忙

数据库自增长ID填报

  • 文档创建者:文档助手1
  • 编辑次数:35次
  • 最近更新:Leo.Tsai 于 2022-08-19
  • 1. 概述

    1.1 问题描述

    数据库自增长 ID 填报是指在 FineReport 模板中进行数据填报的时候,不需要设置和绑定 ID 数据列。在往数据库中插入数据的时候,数据库会自动为每条数据生成一个递增的ID。

    1.2 实现思路

    自增长ID的实现主要依赖数据库的设置,需要先在数据表中创建对应的自增ID字段。具体创建方式每种数据库可能会有区别,可百度查找相关资料。

    本文将简单介绍几种常见数据库的自增id设置方式。

    注1:用户也可通过安装「序列号函数插件」,实现生成序列,主要用于填报生成主键功能。该插件无需依赖数据库的类型,方便报表切换数据库,在任意数据库都可以使用。详情请参见:序列号函数插件

    注2:方案支持移动端填报。

    2. SQL Server数据库

    在 SQL Server 数据库中,提供了标识,可以通过设置标识、标识种子和标识增量来实现 SQL Server 主键的自增长。

    2.1 自增长ID设置

    1)假设在 SQL Server 数据库中存在下面一张数据表,我们需要将其 ID 列实现自增长,就可以在列属性中设置是标识,修改标识增量和标识种子,如下图:


    2)也可以使用 SQL 语句来创建,identity(1,1)指定 ID 由 1 开始,每次增长 1.

    create table KHK (
    id int identity(1,1) primary key,
    kh varchar(20)
    )

    2.2 模板制作

    1)新建数据连接

    新建一个数据连接,连接至该数据库,新建数据连接的方法详细请参照 数据连接

    2)模板设置

    新建一张模板,添加数据集SELECT * FROM dbo.[KHK]

    在模板设计主体页面第一行分别添加两个文本控件和一个 插入行 的按钮控件,并在第三行中将数据列拖曳至对应单元格中,如下图:

    3)填报属性设置

    点击模板>报表填报属性,增加一个内置 SQL,如下图:


    注:如果只有新增数据的需求,那么不需要绑定自增id字段,否则提交可能会报错当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'KHK' 中的标识列插入显式值

    2.3 效果预览

    点击填报预览,在 Web 端进行数据填报,如下图:


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


    3. Oracle 数据库

    3.1 自增长ID设置

    在 Oracle 数据库中,提供了序列的功能,可以通过 Oracle 的序列及触发器,实现主键的自增长。

    1)  创建序列

    CREATE SEQUENCE seq_name -- 尽量使用统一前缀命名,方便管理    
         INCREMENT BY 1   -- 自增步长 这里设置为 1  
         START WITH 1     -- 计数起点 这里设置为 1  
         NOMAXVALUE       -- 不设置最大值 可选项 MAXVALUE|MINVALUE  
         NOCYCLE          -- 一直累加,不循环    
         CACHE 10;   -- 如果追求效率 可设置缓存 如果在 Oracle 宕机或者断电等非正常中断服务的情况 可能会造成序列不连继续的情况出现,如果不使用缓存,则这里写NOCACHE

    2)创建触发器

    CREATE OR REPLACE TRIGGER TRG_name  --触发器名称  
    BEFORE INSERT ON "tbl_name" -- 在向 tbl_name 表插入数据之前触发  
    FOR EACH ROW-- 表示该触发器为一个行级触发器  
    BEGIN -- 触发器开始 -- 以下代码表示触发器的行为  
      SELECT seq_name.nextval INTO :new.ID FROM dual ; -- seq_name.nextval返回的是序列的下一个值, 将该值设为新值插入到 tbl_name 表中的主键列 tbl_id 中去.  
    END ; -- 触发器结束


    3.2 模板实现

    其模板实现与 SQL Server 数据库一致,这里不再赘述。

    4. 常见问题

    4.1 问题现象

    使用数据库自增长 ID 进行数据填报时,可能会发生下图所示报错:当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'KHK' 中的标识列插入显式值。


    4.2 问题原因

    出现该报错原因是,自增长ID的机制是插入数据时,自动给这条数据一个编号,而不需要人为填入。这时候如果在填报属性中给这个自增长字段绑定了值,那么就会导致上述的冲突报错。例如下图所示,id为自增长字段,给id绑定了值就会出现报错。

    4.3 解决方案

    4.3.1 方案一(适用于只需要新增数据,无更新和删除需求的场景)

    移除填报属性中的自增长id字段。

    4.3.2 方案二(适用于需要同时实现新增,更新和删除需求的场景)

    将以下的内容写入记事本文件中,并将文件另存为insertIgnoreColumn.properties,放入%FR_HOME%\WEB-INF\resources文件夹下。该文件作用为在新增数据时,忽略掉自增长id字段。文件内容为:

    KHK.ignoreColumns=id

    说明:

    KHK:填报数据的数据表名称,需要按照实际场景修改

    id:自增长id的字段列名称,需要按照实际场景修改

    注:如果有多个数据表需要使用自增长 ID,那么直接在此配置文件中换行写入即可。新增或修改配置文件都需要重启web服务器才会生效。

    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭