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 = ;
private static int MIN_VALUE = ; /**
* 对于任何的请求,总是先取出当前的值返回,然后再将数据库里的值加一
* @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+)+"");
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+) +"";
}
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 > ){
result = input +"";
}else{
int length = (input+"").length();
if (length == ){
result = ""+input;
}
else if (length == ){
result = ""+input;
}else {
result = ""+input;
}
}
return result;
} public static void main(String[] args) {
SerialNumberGenerator generator = new SerialNumberGenerator();
String result = generator.getNextValue("jiao");
System.out.println("======"+result+"======");
}
}

java中生成流水号的一个例子(使用BerkeleyDB)的更多相关文章

  1. java中生成流水号的一个例子(使用关系型数据库)

    在实际的开发中,可能会有根据一定的规则生成流水号的需求(比如根据根据公司编码和日期生成4位流水号)我们可以把公司和日期联合起来作为一个业务编码,把这个业务编码和序列的值存储到数据库中,每次需要生成流水 ...

  2. (转)Java中使用正则表达式的一个简单例子及常用正则分享

    转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...

  3. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  4. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  5. JAVA中生成、解析二维码图片的方法

    JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...

  6. 【学习笔记】Java中生成对象的5中方法

    概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...

  7. JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...

  8. Java中连接MySql数据库的例子

    Java中连接MySql数据库的例子: package com.joinmysql.demo; import java.sql.DriverManager; import java.sql.Resul ...

  9. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

随机推荐

  1. ERROR 1290

    Mysql创建用户时.出现如下错误! mysql> create user 'testuse'@'localhost' identified by '111111'; ERROR 1290 (H ...

  2. js学习笔记16----父节点的操作

    1.元素.parentNode : 只读属性,获取当前元素的父节点. 2.元素.offsetParent : 只读属性,获取离当前元素最近的一个有定位属性(position为relative或者abs ...

  3. LoadRunner性能测试基础知识问答

    Q1:什么是负载测试?什么是性能测试? A1:负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试,例如,访问一个页面的响应时间规定不超 ...

  4. hive执行流程分析

    转自:http://blog.csdn.net/gexiaobaohelloworld/article/details/7719163 入口:bin/hive脚本中,环境检查后执行ext中的cli.s ...

  5. chrome 如何利用快捷键将光标移动到地址栏

    Windows: Ctrl + L 或 Alt + D 或 F6 Mac: Command + LLinux: Ctrl + L

  6. 【转】C# 二维码生成

    /// <summary> /// 含有QR码的描述类和包装编码和渲染 /// </summary> public class QRCodeHelper { /// <s ...

  7. e671. 在缓冲图像中存取像素

    // Get a pixel int rgb = bufferedImage.getRGB(x, y); // Get all the pixels int w = bufferedImage.get ...

  8. LINUX下CPU Load Average的一点研究

    背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...

  9. 20160216.CCPP体系具体解释(0026天)

    程序片段(01):01.MemCpy.c 内容概要:内存拷贝 #include <stdio.h> #include <stdlib.h> #include <memor ...

  10. python cython 模块(1)

    python 是一门动态类型的语音,其开发速度比C,C++等静态语言块, 但是速度慢很多, 而cython 通过混合C和python 的语法,可以提高python代码的运行速度 1) 安装cython ...