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. DataGridView使用技巧二:设置单元格只读

    一.修改ReadOnly属性 1.设置整个DataGridView只读: DataGridView.ReadOnly=true; 此时用户的新增行和删除行操作也被屏蔽了. 2.设置DataGridVi ...

  2. 原生javascript星级评分

    写个最简单的原生js的星级评分: <div id="rank" class="pingfen"> <ul> <li>< ...

  3. thinkphp3.2 常用入口文件

    <?php define('DIR_SECURE_FILENAME', 'default.html'); define('APP_PATH','./index/'); //项目路径 requir ...

  4. 在对listctrl的控件进行重载的过程中,GetHeaderCtrl()返回NULL的问题

    先谈谈我的问题吧! 在使用listctrl的过程中,我需要在列表头部添加checkbox,实现全选的功能. 经过网上资料的罗列,我找到了一个demo,使用的重绘的方法,在使用的过程中,我发现我的列表头 ...

  5. CentOS下的一些基础问题解答

    1. 在/etc/passwd中某一行信息为“Linux01:x:505:505:/home/linux12:/bin/bash”,由此可知哪些信息? 用户名为linux01,需要密码登陆,用户ID为 ...

  6. jquery validate自定义规则

    //检查身份证号码是否存在 $.validator.addMethod("checkIDCardExist", function (value, element) { if ($( ...

  7. opencv播放视屏并控制位置

    原文地址:http://blog.csdn.net/augusdi/article/details/9000592 cvGetCaptureProperty是我们需要使用到的获取视频属性的函数. do ...

  8. 动态生成的DOM不会触发onclick事件的原因及解决方法

    最近朋友在做一个项目的时候,遇到动态加载微博内容,然后点击“展开评论”后获取该微博的所有评论.这里使用了动态加载的<span mid='123456789′ class='get_comment ...

  9. 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(1)

    在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只 ...

  10. Redis生成Id主键的工具

    public class PrimaryKeyGenerator { private static readonly NedisClient client = new NedisClient(GetR ...