java怎么实现流水号自动增长

思想与梦想齐飞 2012-03-22 01:20:37
最近在做一个项目,要求流水号自动增长,并且不能并发,中间如果服务器中断的的话,重启后流水号还是累加,第二天从零开始计数。希望各位大侠给点思路
...全文
13521 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
samele_trial 2012-07-25
  • 打赏
  • 举报
回复
建议用序列
背影 2012-07-25
  • 打赏
  • 举报
回复
//一个线程循环 后面的就要你存到会话中去 调用一次存一次取一次
public class PowerUtil implements Runnable {

public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
Thread.currentThread().getName();
System.out.println(" synchronized loop " + i);
}
}
}
public static void main(String[] args) {
PowerUtil t1 = new PowerUtil();
Thread ta = new Thread(t1, "A");
ta.start();
}

}
  • 打赏
  • 举报
回复
从数据库读取多方便,
select row_number() over (order by id) as rowNum...
qdkfriend 2012-04-16
  • 打赏
  • 举报
回复
就是 很简单的key=value的prop文件就可以
读写文件内容加上同步 就可以避免并发问题
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qdkfriend 的回复:]
如果不是分布式的话 写个配置文件加上同步就行了 没必要用数据库
[/Quote]
能说一下配置文件怎么写吗
  • 打赏
  • 举报
回复
怎么保证服务器重启后流水号累加
xingliangzheng 2012-03-23
  • 打赏
  • 举报
回复
String number = "";
String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
···
sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
···
if (resultSet.next()) {
int temp = resultSet.getInt(1);
number = (temp + "").substring(1);
} else {
number = "001";
}
xingliangzheng 2012-03-23
  • 打赏
  • 举报
回复
要在数据设置自动增长列
  • 打赏
  • 举报
回复
是通过数据库存储流水号效率高,还是通过配置文件效率高?
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 vanbaston0 的回复:]
create table serial_number(
c_date date,--放日期
c_number number --放流水号
)
这个库里只放一条数据 当天日期和使用到的流水号
首先从数据查出这条记录,判断日期是否和当前日期相同,相同则拿流水号使用,并更新表中流水号+1
如果不相同就更新表中日期为当前日期,且把流水号改为1
[/Quote]
我用的是hibernate,怎么查询这条记录并遍历出来能给点代码吗
liguangwen86 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 huipers 的回复:]

这跟我们做的项目完全就是一模一样的嘛,不会是我同事吧引用 16 楼 liguangwen86 的回复:

如果用java生成的话,可以这样,在生成订单号的时候就是"日期+序号"
如果订单一天内不会大于10000
首先查询今天的订单号最大的一个,如果没有,设置一个初始值(日期+序号)201203220001
如果有的话把这个订单好变成数字类型+1生成第二个订单号.
例如当前日期最大订单……
[/Quote]
不是,我只是给他提供一个容易实现的方法而已,现实中我还没做过这种需求,当然解决方法有很多的,也可以用数据库实现
蜗牛都玩F1 2012-03-22
  • 打赏
  • 举报
回复
这跟我们做的项目完全就是一模一样的嘛,不会是我同事吧[Quote=引用 16 楼 liguangwen86 的回复:]

如果用java生成的话,可以这样,在生成订单号的时候就是"日期+序号"
如果订单一天内不会大于10000
首先查询今天的订单号最大的一个,如果没有,设置一个初始值(日期+序号)201203220001
如果有的话把这个订单好变成数字类型+1生成第二个订单号.
例如当前日期最大订单号为"201203220777"变成数字类型加1为"201203220778"
还是比较简单吧
[/Quote]
liguangwen86 2012-03-22
  • 打赏
  • 举报
回复
如果用java生成的话,可以这样,在生成订单号的时候就是"日期+序号"
如果订单一天内不会大于10000
首先查询今天的订单号最大的一个,如果没有,设置一个初始值(日期+序号)201203220001
如果有的话把这个订单好变成数字类型+1生成第二个订单号.
例如当前日期最大订单号为"201203220777"变成数字类型加1为"201203220778"
还是比较简单吧
shan桔梗 2012-03-22
  • 打赏
  • 举报
回复
将这些保存之后,在每次点击如:新增的时候,根据ID读出来,拼接字符串 传给前台,同时给那个数据库里要+1
shan桔梗 2012-03-22
  • 打赏
  • 举报
回复
这个表:

ID:模块名 我们是一个业务一个编码规则
前缀,流水号长度,起始位数,编码方式(年编码,月编码,日编码)

简单的这些就够了

具体的 你去哪个项目网站看效果,

www.yunji99.com 点击免费使用 》 然后进去时导航 在导航上选:系统设置 》 然后再选:业务编码规则

我们做的比较全,你看你的需求了
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huzheaccp 的回复:]

意思就是给数据库里加表,
以前我们做的时候用的quartz 定时 让每天晚上0点
初始化sequence表中的累积字段 让从0开始 格式就是:日期+sequence流水号

这个表中你可以让用户设置:编码前缀、流水号长度、起始值 等
[/Quote]
能具体说说你的表示怎么设置的吗
蜗牛都玩F1 2012-03-22
  • 打赏
  • 举报
回复
至于第二天重新开始,那就是在JAVA中实现了:
String number = "";
String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
···
sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
···
if (resultSet.next()) {
int temp = resultSet.getInt(1);
number = (temp + "").substring(1);
} else {
number = "001";
}
写的不大详细~
[Quote=引用 8 楼 huzheaccp 的回复:]

引用 6 楼 huipers 的回复:
我们做过一个项目 也记不大清,大致思路:oracle中建个sequence计数器,自动累计加1;流水号就是当天日期+sequence数值!设置一个最大值

每次自动加一 第二天重新开始.....
[/Quote]
VanBaston 2012-03-22
  • 打赏
  • 举报
回复
create table serial_number(
c_date date,--放日期
c_number number --放流水号
)
这个库里只放一条数据 当天日期和使用到的流水号
首先从数据查出这条记录,判断日期是否和当前日期相同,相同则拿流水号使用,并更新表中流水号+1
如果不相同就更新表中日期为当前日期,且把流水号改为1
shan桔梗 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huzheaccp 的回复:]
每次自动加一 第二天重新开始.....
[/Quote]

意思就是给数据库里加表,
以前我们做的时候用的quartz 定时 让每天晚上0点
初始化sequence表中的累积字段 让从0开始 格式就是:日期+sequence流水号

这个表中你可以让用户设置:编码前缀、流水号长度、起始值 等
wuyi12052008 2012-03-22
  • 打赏
  • 举报
回复
放在数据库里做比较好啊,不仅可以记录以前的数据,也可以查当前的
加载更多回复(8)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧