如何生成连续的流水号
					当前位置:点晴教程→知识管理交流
					
					→『 技术文档交流 』
					
				 
				
 工作中常常遇到流水号生成的问题,有的客户要求流水号必须连续,这个我们的开发工作提出了一个小难题。 
 
解决方法如下: 方法一:采用最大号表的形式 在数据库中创建一个表专门存放其他数据库的最大流水号,table_maxOrderID {table1_max,table2_max}; 在向数据库中插入数据的时候,首先想table_maxOrderId表查询到当前表的最大号加1,先更新最大号表,然后保存到业务数据。 优点:效率高 缺点:号码浪费大一些(例如保存的时候失败了,那么这个号码就浪费了。) 方法二:采用抢号的形式 这个不需要创建最大号表,在向数据库中保存数据的时候,获取当前表的最大流水号。例如: select max(ID) from tableName ; 让后将结果加一。 优点:速度快,不浪费号码; 缺点:并发的时候,号码重复造成数据无法保存。 解决办法:抢号。如果保存失败,那么重复抢号例如: 
 	public synchronized String getOrderId(String shengid) {
		if (shengid == null ││ "".equals(shengid.trim())) {
			throw new NullPointerException("在获取流水号的时候,省id为空!获取流水号失败!");
		}		
		// 首先查找所在地区查找企业表中有没有数据
		int num = xjqyDao.getCountBySql(" and qy_sheng='" + shengid + "'");
		String orderId = null;
		if (num == 0) {
			orderId = "0001";
		} else {
			//必须找到本省最大的档案的id			
			String maxDabh = xjqyDao.getMaxDabhBySheng(shengid);
			num = Integer.parseInt(maxDabh.substring(6));
			String temp = (num + 1) + "";
			int LEN = temp.length();
			if (LEN > 4) {
				log.error("出错了!一个省的蚕茧收购加工企业的个数不能超过1万!");
				return null;
			}
			for (int i = 0; i < 4 - LEN; i++) {
				temp = "0" + temp;
			}
			orderId = temp;
		}
		return orderId;
	}
 
 小结: 该文章在 2011/3/3 17:09:10 编辑过  | 
		
			 关键字查询 
				相关文章 
				正在查询...  |