- 浏览: 99678 次
- 性别:
- 来自: 深圳
最新评论
-
weizaiC:
[flash=200,200][/flash]
ExtJS实现下拉列表级联 -
yanxunjian:
Java实现读取xml文件sql配置转换为JDBC SQL
...
Java实现读取xml文件sql配置转换为JDBC SQL -
road_16:
奶奶的,大妹子的
ExtJS实现下拉列表级联 -
road_16:
2.0版本的前台显示不了数据,3.0版本的才可以,检查了大半天 ...
ExtJS实现下拉列表级联 -
road_16:
怎么不说明extjs所使用的版本呢?版本不一样,写法也是不同的 ...
ExtJS实现下拉列表级联
主键字符串自增Java实现
- 博客分类:
- J2se
程序实现字符串主键自增,例如:“SN000001”,希望下一条数据是“SN000002”,所以需要字符串主键自增,所以需要传入上一次的主键的字符串,通过调用工具类的方法可以获取下一条记录。
package com.commsoft.ypass.csmp.util.sys; /** * 字符串主键自增,条件当传进来的Str是空时,自动创建初始化主键 * 后面的依次自增 * @author lizhenbin * */ public class PrimaryKey { // 数字串最小值 private static final char MIN_DATA = '0'; // 数字串最大值 private static final char MAX_DATA = '9'; // 数字串默认从1开始 private static final char START_DATA = '1'; // 默认长度 private static final int DEFAULT_SIZE = 8; // KeySize的最大数 // Long的最大长度是19位,防止溢出 private static final int MAX_KEYSIZE_VALUE = 18; // 默认字符串Head private static final String DEFAULT_HEAD = "KEY"; // 主键字符串头部 private String keyHead; // 字符串数字位数,不足补0 private Integer keySize = 8; // 是否允许数字最大之后自增,默认false private boolean keyInc = false; // 程序执行开始系统时间 private Long startExecute = 0L; // 程序执行结束系统时间 private Long finishExecute = 0L; /** * 初始化主键字符串格式,默认达到KeySize后不可自增 * @param keyHead 字符串开头部分 * @param keySize 字符串数组长度 */ public PrimaryKey(String keyHead, Integer keySize) { super(); /** * 设置不可自增 */ if(this.checkSize(keySize)) this.keySize = keySize; else this.keySize = this.DEFAULT_SIZE; if(this.checkHead(keyHead)) this.keyHead = keyHead; else this.keyHead = this.DEFAULT_HEAD; } /** * 初始化主键字符串的格式 * @param keyHead 字符串开头部分 * @param keySize 字符串数组长度 * @param keyInc 数值最大值之后是否允许自增 */ public PrimaryKey(String keyHead, Integer keySize, boolean keyInc) { super(); if(this.checkSize(keySize)) this.keySize = keySize; else this.keySize = this.DEFAULT_SIZE; if(this.checkHead(keyHead)) this.keyHead = keyHead; else this.keyHead = this.DEFAULT_HEAD; this.keyInc = keyInc; } /** * 返回下一个字符串 * @param currentKey 当前主键 * @return 正常:下一个主键值 = 当前主键 + 1; * 当字符串数字达到KeySize的最大数时 * KeyInc为true时, 下一个主键字符串返回最大数 + 1 * KeyInc为false时, 返回空值 */ public synchronized String nextKey(String currentKey) { // 记录开始执行程序系统时间 this.startExecute = System.currentTimeMillis(); try { /** * 去掉首尾空字符 */ currentKey = currentKey.trim(); if(!this.check(currentKey)) { System.out.println(PrimaryKey.class.getSimpleName() + " Error: Input CurrentKey Str Type Illegal, Check '" + currentKey +"' is Right!"); return null; } StringBuilder sb = new StringBuilder(); sb.append(this.keyHead); int charIndex = 0; for(int i = 0; i < currentKey.length(); i++) { char symbol = currentKey.charAt(i); if(symbol >= this.MIN_DATA && symbol <= this.MAX_DATA) { charIndex = i; break; } } String dataStr = currentKey.substring(charIndex, currentKey.length()); Long dataNum = Long.valueOf(dataStr); dataNum++; if(dataNum < this.splitDataPosition()) { for(int i = 0; i <= this.keySize - String.valueOf(dataNum).length() - 1; i++) { sb.append(this.MIN_DATA); } sb.append(dataNum); }else if(dataNum >= this.splitDataPosition() && dataNum < this.maxDateNumber()) { sb.append(dataNum); }else{ // 超过大小最大数时 if(this.keyInc) { sb.append(dataNum); }else{ // 允许自增标志位false的时候返回空值 return null; } } return sb.toString(); } catch (Exception e) { System.out.println(e.toString()); return null; } finally { this.finishExecute = System.currentTimeMillis(); // System.out.println(PrimaryKey.class.getSimpleName() + " nextKey() Execute: " // + (this.finishExecute - this.startExecute) +"ms."); } } /** * 获取初始化字符串 * @return */ public synchronized String initStartKey() { StringBuilder sb = new StringBuilder(); sb.append(this.keyHead); for(int i = 0; i < this.keySize - 1; i++) { sb.append(this.MIN_DATA); } sb.append(this.START_DATA); return sb.toString(); } /** * 获取需要补零的最大数字 * @return */ private Long splitDataPosition() { StringBuilder sb = new StringBuilder(); sb.append(this.START_DATA); for(int i = 0; i < this.keySize - 1; i++) { sb.append(this.MIN_DATA); } return Long.valueOf(sb.toString()); } /** * 获取最大数 * @return */ private Long maxDateNumber() { StringBuilder sb = new StringBuilder(); for(int i = 0; i < this.keySize; i++) { sb.append(this.MAX_DATA); } return Long.valueOf(sb.toString()); } /** * 简单的验证空值 * @param key * @return * @throws Exception */ private boolean check(String key) throws Exception { try { // 空值验证 if(key == null || key.equals("")) return false; // key字符串长度验证 if(key.length() <= this.keyHead.length()) return false; // 是否符合初始化串开头验证 String head = key.substring(0, this.keyHead.length()); if(!head.equals(this.keyHead)) return false; /** * 串数字长度验证,当允许最大熟自增时候不检测 * 当不允许达到最大数字时验证长度合法性 */ String data = key.substring(this.keyHead.length(), key.length()); if(data.length() != this.keySize && !this.keyInc) return false; // 验证是否是数字串,通过一个转换变量 for(int i = 0; i < data.length(); i++) { char symbol = data.charAt(i); if(symbol > this.MAX_DATA || symbol < this.MIN_DATA) { return false; } } return true; } catch (Exception e) { throw e; } } /** * 验证输入的KeySize合法性 * @param keySize * @return */ private synchronized boolean checkSize(Integer keySize) { if(keySize != null && keySize > 0 && keySize <= this.MAX_KEYSIZE_VALUE) return true; return false; } /** * 验证输入的KeyHead,条件全部要求是字母 * @param keyHead * @return */ private synchronized boolean checkHead(String keyHead) { if(keyHead != null && !keyHead.equals("")) { for(int i = 0; i < keyHead.length(); i++) { char symbol = keyHead.charAt(i); if(symbol >= this.MIN_DATA && symbol <= this.MAX_DATA) { return false; } } return true; } return false; } }
发表评论
-
poi创建Excel设计
2013-11-18 22:32 768电商商务,目前为止,做网站后台管理系统对到处数 ... -
程序员改变命运之程序,500W来了,信不信由你,每天JAVAC编译一下,JAVA一下500W就来了
2012-08-20 18:43 63胡乱写了一个随机数“双色球”程序,都是随机数,500W你信就有 ... -
JAVA读写文件基本方法
2012-08-20 09:30 869JAVA读写文件的基本方法,Reader 类是 J ... -
Java实现读取xml文件sql配置转换为JDBC SQL
2012-06-26 18:46 2437公司的框架都是用原生的JDBC框架,其中操作数据很 ... -
将Java字符串数组转化成对应的Entity
2012-06-06 09:14 3744最近新工作的 ... -
将简单的POJO转化为JSON或者XML
2012-05-10 18:04 1935利用反射机制获取类的信息,然后将所得的信息,转化成JSON数据 ... -
UDP通信
2012-05-10 17:54 913UDP通信,发送端发送数据,接受端接收数据,发送端发送数据不需 ... -
Java遍历、删除Map
2012-05-10 17:42 3495面试的时候,遇到一个很尴尬的事情,就是面试官问怎么 ... -
Java使用JXL创建Excel文件
2012-05-10 17:24 1908以前写过用jxl读取excel的,但是一直没有写 ... -
Java创建xml与排序
2012-05-05 19:53 2707DOM创建xml package com.lzb.model ... -
Java多线程
2012-05-05 19:49 786一个很有意思的题目,网上看到的,自己写了一下 题目的大概意思 ... -
Java的反射机制
2012-05-06 20:20 894Java的反射机制可以理解成,Java类Class ... -
TCP通信
2012-04-27 16:22 947TCP通信的一个模板 TCP的服务端用while一直接收客户 ... -
Java实现IP地址定位地址信息
2012-03-14 11:06 11305做电子商务网站的时候,网站的头部一般都有显示是哪个 ... -
Java文件操作
2012-02-07 16:34 850在工作中,经常要获取到文件所在的路径和创建文件夹,这里补充一下 ... -
MD5类使用
2012-01-12 11:13 1015对用户注册的密码加密类,采用MD5算法,留着以后用 注意,B ... -
验证码生成
2012-01-12 10:19 900系统登陆或者注册的时 ... -
Java取时间的一个类
2012-01-09 14:43 1142整理了一下自己开发过程中经常使用到的一个时间类,当做工具类使用 ... -
jdbc连接池
2011-12-30 16:49 875自己整理的一个JDBC驱动,方便以后离开框架直接测试,在mys ... -
Java创建文件和文件路径
2011-12-30 16:30 1854最近在开发过程中,经 ...
相关推荐
字符串的自增,自定义格式,可实现项目中由程序实现VARCHAR类型的主键自增
ID自增的java类方法,不用数据库主键自增的可以考虑试试这个,自己定义方式
数据库自增列主键在数据库还原时百分百会出问题 为解决该问题特开发自定义式的主键 创建一个监控表,一个被调用的存储过程即可,推荐有存储过程编广泛使用的程序使用 调用方法 DECLARE @PKID CHAR(12)='' EXEC [dbo]....
sqlserver在有数据情况下修改主键为自增 网上方法都有缺陷 自己写了一个版本,欢迎大家参考,不好用吗,大家都不评价
在oracle中可以利用触发器创建自增,从而完成我们像在sql server与mysql中定义的主键自增的功能。从而方便我们的开发
mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql 自增主键,至于其他的手动生成唯一主键的问题在这里就不讨论了,这里主要说明下...
用于Oracle的主键进行自增的办法,有触发器 和序列机制
主键自增在插入数据的时候是很实用的,可以获取并操作返回的插入记录的ID,接下来介绍Oracle如何创建主键自增表,感兴趣的你可以了解下,就当是巩固知识,希望此文对你有所帮助
主要介绍了基于django 的orm中非主键自增的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Java实现产生随机字符串主键的UUID工具类,涉及java随机数与字符串遍历、转换等相关操作技巧,需要的朋友可以参考下
oracle 数据库主键自增脚本 --第一步,创建表 --第二步,创建自增序列 --第三步,创建触发器
主键是Long型的id生成方法,Java实现.snowflake算法.
oracle设置主键自增的方法,可以图形化界面也可以用sql语句,两种方法均亲自验证过。
ORACLE自增主键设置方法ORACLE自增主键设置方法
Oracle中主键自增实例
JPA主键策略(针对数据库自增字段重置后无效检查项) JPA主键生成策略会影响数据库自增字段的重置
解决sqlserver2008自增型主键问题
mycat 主键自增代码
mybatis获取自增主键的值 ,mybatis获取自增主键的值!
oracle中创建自增主键的方法