平常新增一条数据的时候会用到流水号,单据号,编码号什么的,它们都是唯一的,不可以重复的,还有一些是必须有规律的,这样就比较容易区分。
那么如何设置一个不重复的单据号呢?
一、在jsp页面编写一个不重复的单据号
一般是用产品名称的首字母或者英文字母来拼接日期时间,一般精确到秒,这样就存在不会重复的,这是一个比较简单的方法,它不用查询数据库中的数据,直接在页面那边设置好利用就行了,因此也是没有什么规律的,只是根据时间变化的不同而不同罢了。
1、创建一个值为当前时间的变量
var date = new Date();//当前时间
alert(date);

2、根据本地时间格式,把Date对象转换为字符串,通过字符串方法match()找到一个或多个正则表达式的匹配。
利用正则表达式匹配字符串,‘//’代表的是正则中的包含字符,‘\’代表转义字符(将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符),‘\d’表示匹配一个数字字符,等价于[0,9],‘g’表示该表达式可以进行全局匹配,如果不加g,则只返回第一个匹配,‘+’代表匹配1个或多个的表达式,.join("")把匹配号的字符之间的分隔符去掉,用空字符代替。

//根据本地时间格式,把 Date 对象转换为字符串
document.getElementById("num").value="Y"+date.toLocaleString().match(/\d+/g).join("");
var num=$("#num").val();
alert("编号:"+num);

执行结果:

二、通过查询数据库中的编号来编写一个不重复有规律的编号
1、在Dao实现类中的方法
在Dao实现类的方法中实现方法,先获取我们封装好的连接,然后就可以对数据库中的数据进行操作,执行SQL语句,查询出表中的编号,获取表中的总条数i,如果存在数据就获取最后一条数据的编码,然后截取编码的最后三位数intLastCode(位数不定,这个是根据日期后面的位数来设置的),是根据开始索引和结束索引来截取目标字符的,它遵循的是左闭右开区间,由于我们获取的是一个整数,所以整数前面的0不会包含在内。
比如我获取的最后一条数据是‘ZGLY20190709001’,最后三位数‘001’的‘00’是不会显示的,只会显示后面的‘1’,然后再对它进行自增1;
因为我们获取的是整数,所以我们要把它格式化为n位的字符串,不足的位就用0来代替。
例:比如我们自增后的整数为99,日期后面的位数设置为4,那么最后的结果就为‘0099’
代码定义:
strCode=String.format("%0"+4+“d”, 99);// strCode=‘0099’
然后我们就可以对最后的结果拼接了,在此之前,我们要获取当前日期date,实例化Date对象,利用SimpleDateFormat类对date格式进行转换,转换为String格式“yyyyMMdd”,最后再将转换后的字符串str拼接我们获取到的最后三位数intLastCode,当然在日期前面也可以拼接一些标识性的字符串,假如我获取的是药品编号,可以这样拼接:
strCode = “Y” +str+intLastCode;
然后返回编号 return strCode;
但是如果查询不到数据的话就为第一条 strCode=“Y”+str+“0001”;
还有一个很重要的细节就是在返回字符串之前要记得关闭资源。
下面是详细代码:

public String selectZGLYDJ() {Connection con=null;PreparedStatement ps=null;ResultSet rs=null;Date date=new Date();//获取当前时间SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd");String str=format.format(date);String strCode = "";String selectDJH="SELECT Billsnumber FROM pw_employeeneckdrug ORDER BY Billsnumber";List<String> list=new ArrayList<String>();try {con=DbUtil.getConnection();        ps=con.prepareStatement(selectDJH); rs=ps.executeQuery();while(rs.next()){list.add(rs.getString("Billsnumber"));}int i=list.size();if(i>0){//如果存在数据String code=list.get(i-1);//获取最后一条的索引值的编码ZGLY20190709001System.out.println(code);int intLastCode = Integer.parseInt(code.substring(code.length()-3, code.length()));//截取编码的最后三位数 根据位置截取[10,13) 由于获取的是整数,0不会包含在内intLastCode++;//自增//日期后面的位数int num=3;strCode=String.format("%0"+num+"d", intLastCode);//把intLastCode格式化成num位的字符串,不足的位用0来代替,比如:String.format("%04d", 3);则结果为"0003"//编号strCode = "ZGLY" +str+strCode; //返回ZGLY20190712002}else{//不存在就为第一条strCode="ZGLY"+str+"0001";System.out.println(strCode);}} catch (SQLException e) {e.printStackTrace();}finally{DbUtil.close(con, ps, rs);}return strCode;
}

二、在Servlet那边接收Dao实现类方法中返回的字符串
1、要想调用Dao实现类中的方法,就必须在Service实现类中
实例化Dao实现类

private BusinessDao businessDao=new BusinessDaoImpl();

然后返回Dao实现类中的方法

@Override
public String selectZGLYDJ() {return businessDao.selectZGLYDJ();
}

2、要调用Service实现类中返回的方法,就要在Servlet中实例化Service实现类

private BusinessService businessService=new BusinessServiceImpl();

方法:接收结果,并赋值到JSONObject中

public void selectZGLYDJ(HttpServletRequest request,HttpServletResponse response) throws IOException{String Billsnumber=businessService.selectZGLYDJ();JSONObject jsonObject=new JSONObject();jsonObject.put("Billsnumber", Billsnumber);PrintWriter printWriter=response.getWriter();printWriter.write(jsonObject.toString());printWriter.flush();printWriter.close();
}

在doPost方法中提交该方法,在doGet方法中调用doPost方法,对doPost方法的请求提交响应。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");//请求的编码格式String type=request.getParameter("type");//用来区分方法if("selectZGLYDJ ".equals(type)){selectZGLYDJ(request, response);}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);
}

三、Jsp页面中获取Json中的结果

$.getJSON("${ctx}/servlet/BusinessServlet?type=selectZGLYDJ",function(data){//单据编号var billsnumber=$("#Billsnumber").val(data.Billsnumber);var num =$("#Billsnumber").val();alert(num);
});

执行结果:

如何生成一个单据号?相关推荐

  1. Java 生成随机订单号

    Java 生成随机订单号 /** 根据时间生成随机订单号 */ public class GenerateNum { // 全局自增数 private static int count = 0; // ...

  2. 生成唯一订单号_人人皆知却暗藏玄机的“数据库唯一标识符”

    Hello 大家好,今天给大家讲一个几乎所有数据库都支持的特性:生成唯一标识符. 知乎视频​www.zhihu.com 详细内容: 唯一标识符应用场景非常多,比如网站注册时自动给新用户一个唯一 ID, ...

  3. 系统单据号生成规则推荐

    对订单类系统而言,单据号是非常重要的东西.一个好的单据号组成往往应该包含丰富的元素,利于问题的调查,业务的扩展. 这里列举几种不好的单据号范例: 单纯的数字递增: 001, 002, 003 //无业 ...

  4. Java实现一个单号生成工具类

    在项目开发的过程中,如果一个系统存在多种不同类型的单据,单号生成就比较难以处理,为此,创造出一个单号生成的工具类就很有必要.直接上代码: 实体类:(数据库字段同下) public class Seri ...

  5. 【PHP】php生成一个不重复的数字(订单号、会员号)

    1.目的:利用php的do .. while 生成一个不重复的字符串或者数组,比如(订单号.会员号) 2.不废话,代码来: $repeat_order = array();do{$ordersn = ...

  6. 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。

    查看本章节 查看作业目录 需求说明: 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62"开头,如图所示. 实现思路: (1)创建 J ...

  7. PHP生成一个不重复的会员号,php生成一个不重复的会员号

    在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号. 效果图如下: 当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号. ...

  8. 用友U8单据号生成源码

    按照用友U8的基础设置中的U8单据号生成规则,生成用友单据号 主要涉及的 表:VoucherNumber ,U8的单据规则设置,栏位:CardNumber:单据的编号,可以通过数据库跟踪工具,跟踪新增 ...

  9. 订单号唯一ID顺序生成(一个轻量的实现)

    一个唯一的ID可以使用UUID,但不是顺序的. 一个自增的ID可以使用数据库序列.自增主键.雪花算法等等. 本文分享一个简单实用的一个ID生成代码,支持生成顺序自增且唯一的ID,一个工具类可以直接拷贝 ...

最新文章

  1. 为什么java可跨平台执行,java为什么可以跨平台执行
  2. MapReduce实现Apriori算法
  3. python3的fft_科学网—用Python、Matlab、C实现傅立叶变换FFT() - 康建的博文
  4. 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)
  5. php的simplexml
  6. Linux学习之打印进程树
  7. 山西铁警演练防暴处突
  8. jQuery dataTables四种数据来源[转]-原文地址:http://xqqing79.iteye.com/blog/1219425
  9. Atitit .jvm 虚拟机指令详细解释
  10. 【CF-1285E】Delete a Segment(区间处理(并集)----思维)
  11. Windows 搭建ARM虚拟机 UOS系统
  12. 海康SDK数据类型转java
  13. 常用的WebService一览表
  14. 实验:配置Trunk
  15. vb.net打砖块游戏
  16. 近期民生银行香港卡办理补件通知:请补充公司名称+税号
  17. 对自己狠一点,离成功近一点
  18. 51单片机的nop延时延时函数
  19. Apple, Steve Jobs, iCon
  20. excel不同电脑上显示不一样解决方案

热门文章

  1. 基于AutoJs实现的薅羊毛App专业版源码大分享
  2. 2022-2028全球与中国非PVC静脉注射袋市场现状及未来发展趋势
  3. Python3 - Docker部署Libre Office Online在线文件转换
  4. 温馨提示: 高考信号屏蔽到底是个什么鬼?
  5. 直方图规定化原理及matlab实现代码
  6. Element ui 中 el-cascader 级联动态加载数据方法
  7. 洛谷Latex数学公式大全
  8. DuiVision开发教程(15)-DUI文本控制基础类
  9. linux怎么找到光盘路径,Linux服务器中如何查找rpm包及安装的方法步骤,Linux系统下应该如何挂载光盘...
  10. 排序算法——Shell排序