java中生成流水号的一个例子(使用BerkeleyDB)
2014-07-09 14:35
381 查看
package com.jiaoyiping.berkeleydb; import com.sleepycat.je.*; import com.sleepycat.utilint.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.UnsupportedEncodingException; /** * Created with IntelliJ IDEA. * User: 焦一平 * Date: 14-7-9 * Time: 下午1:27 * To change this template use File | Settings | File Templates. * 1.直接存key和value * 2.存储key和value组合成的对象(未使用) */ public class SerialNumberGenerator { Logger logger = LoggerFactory.getLogger(SerialNumberGenerator.class); private static int MAX_VALUE = 9999; private static int MIN_VALUE = 1; /** * 对于任何的请求,总是先取出当前的值返回,然后再将数据库里的值加一 * @param key 业务主键 * @return 当前值 */ public String getNextValue(String key){ String currentValue = this.readCurrentValueFromDatabase(key); String result; if (currentValue == null || "".equals(currentValue)){ result = this.formatString(MIN_VALUE); this.instrtIntoDataBase(key,(MIN_VALUE+1)+""); BerkeleyDBUtil.getDatabase().getEnvironment().sync(); } else{ int intCurrentValue = Integer.parseInt(currentValue); result = this.formatString(intCurrentValue); //存储下一个值 String nextValue = ""; if (intCurrentValue == MAX_VALUE){ nextValue = MIN_VALUE+""; }else { nextValue = (intCurrentValue+1) +""; } this.instrtIntoDataBase(key,nextValue); BerkeleyDBUtil.getDatabase().getEnvironment().sync(); } return result; } public String readCurrentValueFromDatabase(String key){ DatabaseEntry theKey = new DatabaseEntry(StringUtils.toUTF8(key)); DatabaseEntry theValue = new DatabaseEntry(); TransactionConfig txnConfig = new TransactionConfig(); txnConfig.setSerializableIsolationVoid(true); Database database = BerkeleyDBUtil.getDatabase(); //Transaction txn = database.getEnvironment().beginTransaction(null,txnConfig); OperationStatus status = database.get(null,theKey,theValue,LockMode.DEFAULT); //对应的键不存在 if (status == OperationStatus.KEYEMPTY){ return null; } else if (status == OperationStatus.SUCCESS){ byte[] data = theValue.getData(); String result; try { result = new String(data,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. result = ""; } return result; } return null; } public void instrtIntoDataBase(String key,String value){ DatabaseEntry theKey = new DatabaseEntry(StringUtils.toUTF8(key)); DatabaseEntry theValue = new DatabaseEntry(StringUtils.toUTF8(value)); TransactionConfig txnConfig = new TransactionConfig(); txnConfig.setSerializableIsolationVoid(true); Database database = BerkeleyDBUtil.getDatabase(); //Transaction txn = database.getEnvironment().beginTransaction(null,txnConfig); OperationStatus status = database.put(null,theKey,theValue); if (status == OperationStatus.SUCCESS){ logger.info("保存成功"); } // else if (status == OperationStatus.KEYEXIST){ // logger.info(""); // } } public String formatString(int input){ String result = ""; if(input > 1000){ result = input +""; }else{ int length = (input+"").length(); if (length == 1){ result = "000"+input; } else if (length == 2){ result = "00"+input; }else { result = "0"+input; } } return result; } public static void main(String[] args) { SerialNumberGenerator generator = new SerialNumberGenerator(); String result = generator.getNextValue("jiao"); System.out.println("======"+result+"======"); } }
相关文章推荐
- java中生成流水号的一个例子(使用关系型数据库)
- 一个java生成与使用WebService的简单例子
- 一个java生成与使用WebService的简单例子
- 一个使用自定义命名空间的Schema文件,xml文件和castor生成的java代码的例子
- 一个java生成与使用WebService的简单例子
- 一个java生成与使用WebService的简单例子
- ASM的一个例子(动态字节码生成) (Java高级编程(J2SE综合)) - [Matrix - 与 Java 共舞]
- 使用JSP + JAVABEAN + XML 开发的一个例子
- 使用Java开发一个非常简单的Web Service例子
- 使用libdwraf写的一个读取GCC -g参数编译生成的调试信息的例子
- 如何在iOS中使用ZXing库(ZXing是一个开源的条码生成和扫描库,开源协议为Apache2.0。它持众多条码格式和语言,比如Java、 C++、 C#、 Objective-C以及Act )
- java中如何使用asm动态的生成或修改一个class文件以及asm的架构思想
- 使用JSP + JAVABEAN + XML 开发的一个例子
- [Java]一个简易的生成流水号的类
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- 使用Java提供的类生成XML例子
- 使用JSP + JAVABEAN + XML 开发的一个例子
- 使用JSP + JAVABEAN + XML 开发的一个例子
- 使用JSP + JAVABEAN + XML 开发的一个例子
- java小例子:使用javadoc工具生成API文档