<!--StartFragment -->在数据库开发过程中,常会遇到这样的问题,一些订单(或其它单据)编号是根据日期+流水编号来生成的,如:今天是2003-11-25,那么今天开出的单号依次为:
20031125-1
20031125-2
20031125-3
……
到明天2003-11-26时,所开出的第一份单就应为:20031126-1
第二份单为:20031126-2
第三份单为:20031126-3
……
当然,通过客户端可以实现,但这样工程比较大,而且要考虑的东东实在太多。
那么数据库本身能自动生成上列这样格式的数据吗?如果能,又是如何自动生成的呢?
下面我来谈谈如何一步一步的来实现。
首先我们来建立一个测试的数据表:
CREATE TABLE "H_FORMATID"
(
"HT_ID" VARCHAR(15),
"HT_DATE" DATE,
"HT_SUBJECT" VARCHAR(60)
);
第一个字段 HT_ID 就是用来存储上列格数据的订单号,
第二个字段 HT_DATE 是用来存储当前日期内容的。
第三个字段 HT_SUBJECT 是用来存储数据内容的,
大伙可根据情况修改上列表,因这只是一个测试表而已。
我们知道,上列格式订单号的 "-" 前面的部份实际就是建立订单的当天的日期,所以很好解决,"-" 后面的部份是建立订单当天从1开始的流水编号,在IB/FB中,生成这样的流水编号当然离不开 Generator 了,所以我们还得建立一个生成器 GENERATOR 。
CREATE GENERATOR GEN_H_FORMATID;
而要让数据库每添加一笔数据时,订单编号(HT_ID)要自动填充数据,这时通常有两种方法去实现:
1:存储过程;
2:触发器(实际上也是一种存储过程)。
下面我们用建立触发器来实现:
SET TERM ^ ;
CREATE TRIGGER "TRI_BI_H_FORMATID" FOR "H_FORMATID"
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE h_d DATE;
/*
Author : 唐辉
http://www.3asoft.com
*/
BEGIN
SELECT MAX(HT_DATE) FROM H_FORMATID INTO :h_d;
/*查找最大的日期值*/
IF(CURRENT_DATE>h_d) THEN /*将当前日期与最大日期值比较*/
BEGIN
EXECUTE STATEMENT 'SET GENERATOR GEN_H_FORMATID TO 0';
/*如果当前日期大于库中的日期最大值,
*则将Generator值归零
*/
END
NEW.HT_ID=CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS VARCHAR(4))||
/*取年*/
CAST(EXTRACT(MONTH FROM CURRENT_DATE) AS VARCHAR(2))||
/*取月*/
CAST(EXTRACT(DAY FROM CURRENT_DATE) AS VARCHAR(2))||'-'||
/*取日*/
CAST(GEN_ID(GEN_H_FORMATID,1) AS VARCHAR(7));
/*取GENERATOR值*/
NEW.HT_DATE=CURRENT_DATE; /*自动赋HT_DATE为当前日期*/
END
^
COMMIT WORK ^
SET TERM ;^
然后您往数据表里添加几条数据,再将您的系统日期增加一天,再添加几条数据试试,最终达到您的要求了,成功了,庆祝庆祝!!
以上代码在 FireBird 1.5 中测试成功,未在 InterBase 中测试。
分享到:
相关推荐
mybatisplus-generator是个代码生成器,但是不支持人大金仓数据库。 本资源扩展了代码生成器的几个类,支持人大金仓数据库。另外,继承AutoGenerator新建了LesAutoGenerator,解决了数据库注释换行导致代码生成后...
可以根据数据库表自动生成实体类,以及对应的mybatis对应的实体类xml文件
mybatis-generator自动生成器 自动生成mapper.xml以及实体内接口等; 该工具不需要集成到项目内,直接使用cmd命令即可; 数据库,类名在配置文件generator.xml中进行修改即可
Mybatis-generator自动生成代码工具,基于mybatis-generator-core-1.3.7.jar,一键生成数据库表对应的entity、dao、mapper文件,并根据数据库表字段注释生成实体类的中文注释,免去自写mapper、dao、实体类的步骤
generator 自动生成代码工具 选择数据库和表 自动生成代码
mybatis-generator插件 自动生成代码和注解,自动生成数据库的注释
这个是我多年前用c++写的1...然后敲回车,再次输入结束值,回车,然后文件后缀名,比如xls或者txt,他就会生成xls文件,如果你生成单号数量太多,超过65000多个。就会自动再次创建1个xls。一直到结束为止。非常实用哦!
导入generator的maven工程,通过连接数据库,生成数据库表相关的实体类DO(包括get和set)和mybatis的xml文件
最快速的java代码生成器 rapid-generator
使用MyBatis Generator 自动生成Dao、Bean、Mapping。将mysql数据库中的表转换为java中的实体类,接口,和映射文件
mybatis-generator自动生成工具,包含tinyint处理,自动获取数据库注释
generator代码生成器,已修改dao层后缀,已添加实体对应数据库表字段注释
在项目开发过程中,一般会用到数据库开发;开发过程中,要重复的编写Entity、Mapper、Service、ServiceImpl、Controller等后端代码。Generator的目标:旨在为用户快速生成CRUD方法。 1、快速生成Mapper.java类、...
mybatis自动生成工具generator,提高开发效率,自动生成实体BEAN、DAO。自己试用过,完全可以使用,非常方便。
通过mybatis-generator-...连接数据库,通过配置文件自动生成对应表的mybatis的配置文件,a.bat是通过cmd命令运行可执行jar mybatis-generator-core-1.3.1.jar ,通过 generatorConfig.xml的配置生成代码到相应位置.
jfinal做web开发使用,数据库表建好后,可生成表对应的Model,Service,Controller,sql模板等以及web应用相关的一些文件或者在数据库修改后一键同步model.附件中是jar包和一份使用实例代码.
免费mybatis-generator 代码自动生成工具
mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...
Mybatis-generator自动生成代码时候提取数据库的字段注释作为实体类字段的jar包
mybatis-generator自动生成代码(含中文注释) 1、打开generatorConfig.xml 2、修改数据库链接地址账号密码 将connectionURL修改为你所需生成的对象的数据库地址,修改用户名userId和密码password 3、修改生成Model类...