mysql方面准备:
1、在mysql新建一个表,用来存放序列当前值的:
CREATE TABLE `sequenceid_table` (
`sequenceid_table_id` int(11) NOT NULL AUTO_INCREMENT,
`sequenceid_table_name` varchar(50) DEFAULT NULL COMMENT '项目名',
`sequenceid_table_value` bigint(20) DEFAULT NULL COMMENT '值',
PRIMARY KEY (`sequenceid_table_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
2、插入一条默认数据:
INSERT INTO `sequenceid_table` VALUES ( 'studentId', '100000001');
java方面:
创建序列工具类:
/**
* 获取序列工具
*
*/
public class SequenceIDUtil {
private static SequenceIDUtil sequenceIDUtil=null;
public SequenceIDUtil(){
}
public synchronized static SequenceIDUtil getInstance() {
if(sequenceIDUtil==null){
sequenceIDUtil=new SequenceIDUtil();
}
return sequenceIDUtil;
}
/**
* 学号
* @return
*/
public long studentId(){
synchronized (this) {
long studentId=0;
try{
BaseDao dao=new BaseDao();
String sql="select t.sequenceid_table_value from sequenceid_table t where t.sequenceid_table_name='studentId'";
studentId=dao.getValueBySql(sql);
String updateSql="UPDATE sequenceid_table t set t.sequenceid_table_value="+(studentId+1)+" where t.sequenceid_table_name='studentId'";
dao.excueSql(updateSql);
}catch(Exception e){
e.printStackTrace();
return 0;
}
return studentId;
}
}
}
使用方法:
public static void main(String[] arg){
System.out.println(SequenceIDUtil.getInstance().studentId()+"");
}
这是比较简单的实现方法,解决了java用mysql时序列的问题。使用的时候只有一个实例,保证了序列的唯一性。