知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 报表技术分享 > 快逸报表流水号生成通用工具类

快逸报表流水号生成通用工具类

现在多数报表都有自己的流水单号,如合同、订单等等。每次问到这个流水号如何生成时没有现成的demo可以参考,本文章将解决该问题,介绍一个通用的流水号生成工具类。
该类的实现思路:
每类流水单都有自己的标识,如合同流水号有固定的前缀(HT……)、订单(DD…),因此我们可以根据各类标识在数据库存入其当前最大流水号,有需新流水生成时,只需从现有库中取出最大值同时修改数据库当前值即可。
方法定义:public int getFlowVar(String flowVar) //参数为标识,返回整数类型最大流水号。
使用时,我们传给其一个标识,如“HT”表示合同流水号,“DD”表示订单流水号。这样合同将返回流水号14,订单号将是28,且该值会相应修改数据库记录。
主要代码:
1, 流水号记录表SQL
CREATE TABLE flowvar (
flowvar_id varchar(255) NOT NULL, //标识
flowvar_value int(11) NOT NULL, //当前最大值
PRIMARY KEY (flowvar_id) //主键
)
2, 工具类代码:
完整代码可参考附件
/**
* 获取流水号方法
* 这个方法需要同步
*/
public synchronized int getFlowVar(String flowVarId) {
int newFlowVar = 0;
Connection conn = this.getConnection();
Statement stmt = null;
ResultSet rs = null;
String sql = null;
String flowVar = null;
try {

stmt = conn.createStatement();
sql = “select flowvar_value from flowvar where flowvar_id = ‘” + flowVarId + “‘”;
rs = stmt.executeQuery(sql);
if(rs.next())
{
flowVar = rs.getString(“flowvar_value”);
}
if(flowVar != null)
{//数据库中已经有对应的流水号值,取出来,加1,然后数据库中的值改变
newFlowVar = Integer.parseInt(flowVar) + 1;
sql = “update flowvar set flowvar_value = ” + newFlowVar + ” where flowvar_id = ‘” + flowVarId + “‘”;
stmt.executeUpdate(sql);
}
else
{//数据库中没有对应的流水号值,插入新的记录,初始化流水号值为1
newFlowVar = 1;
sql = “insert into flowvar(flowvar_id, flowvar_value) values(‘” + flowVarId + “‘,1)”;
stmt.executeUpdate(sql);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
closeConn(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
//返回生成的最大流水号
return newFlowVar;
}
注意:通过工具类只是生成了最后的最大流水号,我们还需要在外面包装前缀内容,这个部分可以根据用户个性需求完成,如HT20111222001(前缀+日期+流水号)。

本文标签: