java中生成流水号的一个例子(使用BerkeleyDB)
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)的更多相关文章
- java中生成流水号的一个例子(使用关系型数据库)
在实际的开发中,可能会有根据一定的规则生成流水号的需求(比如根据根据公司编码和日期生成4位流水号)我们可以把公司和日期联合起来作为一个业务编码,把这个业务编码和序列的值存储到数据库中,每次需要生成流水 ...
- (转)Java中使用正则表达式的一个简单例子及常用正则分享
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...
- 在java中生成二维码,并直接输出到jsp页面
在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...
- JAVA中生成、解析二维码图片的方法
JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...
- 【学习笔记】Java中生成对象的5中方法
概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...
- JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...
- Java中连接MySql数据库的例子
Java中连接MySql数据库的例子: package com.joinmysql.demo; import java.sql.DriverManager; import java.sql.Resul ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
随机推荐
- 记录日志框架:log4net使用
一.log4net简介 Log4net是Apache下一个开放源码的项目,我们可以控制日志信息的输出目的地.Log4net中定义了多种日志信息输出模式.在做项目的时候最头疼的是在程序发布到正式环境之后 ...
- eclipse-设置默认编码格式为UTF-8
需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...
- Framework 7 日历插件改成Picker 模式
Framework 7 里面的日历插件默认的2种模式: 1.文本框 2.直接展示 如下图: 更多例子点这里 而我的需求如下图: 点击小图标再弹出日历,选择某个日期,隐藏日历弹层. 实现步骤: 1.写小 ...
- 15款很棒的 JavaScript 开发工具
在开发中,借助得力的工具可以事半功倍.今天,我爱互联网向大家分享最新收集的15款非常有用的 javascript 开发工具. TestSwarm: Continious & Distribut ...
- Stay hungry, stay foolish. 求知若饥,虚心若愚。
如果留意我博客的朋友,应该都有看到这句话在我的自我介绍栏目存在了好长一段时间了,另外,我的 QQ.旺旺.MSN等都有这个签名.Stay hungry, stay foolish.(求知若饥,虚心若愚) ...
- nest(inner) class
嵌套类,摘自: http://www.ntu.edu.sg/home/ehchua/programmin/java/J4a_GUI.html A nested class has these prop ...
- R语言boxplot绘图函数
boxplot 用于绘制箱线图,我们都知道boxplot 用于展示一组数据的总体分布,在R语言中,支持两种输入数据的方式 第一种:x , 这个参数指定用于绘制箱线图所用的数据,是一个向量 代码示例: ...
- 【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
数组没有length()这个方法,有length的属性.String有有length()这个方法. int a[]; a.length;//返回a的长度 String s; s.length();// ...
- openal资料转贴
地址:http://blog.sina.com.cn/s/blog_685b5b220100ukbp.html OpenAL简介 OpenAL(Open Audio Library)是专门负责3D定位 ...
- 解决myeclipse4.1.1对一个表生成映射文件的时候,出现“generating artifacts"的解决!
很多人在用myeclipse4.1.1对一个表生成映射文件的时候,都出现“generating artifacts"的问题.我也遇到了这个问题,弄得我也很郁闷!看了很多人的帖子后还是无法搞定 ...