1. 程式人生 > >一個簡單的,純jdbc的自增流水號生成,一種型別一種流水號

一個簡單的,純jdbc的自增流水號生成,一種型別一種流水號

關於流水號的生成是我們程式設計師經常會遇到的問題了,每次遇到這樣的問題,都是百度,百度,與其這樣,還不如和我 一起,製作一個流水號,很簡單,也不難

just do it;我這裡要求是,每一種型別都要對應不同的流水號,互不影響。。。效果圖


原理是:先判斷這種型別的流水號是否在流水號表中存在,如果不存在,則讓最大流水序號為1,並插入一條資料到流水號表中,如果存在,則需要更新最大流水號,在之前流水還上加一;誰需要原始碼的。。。可以留言聯絡我。。。到時給原始碼你們,不懂的,也可以諮詢鄙人

生成流水號:需要一張流水號的表,專門記錄這一種型別流水號的最大值 ,以下是表的結構以及部分表資料

另外,java中也需要用到一個封裝好的java,類,只有四個屬性,當然就是資料庫欄位的額屬性了




然後最好是提供一個流水號輔助類,裡面編寫關於流水號操作的方法

package com.exedosoft.plat.action.official;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


import org.apache.log4j.Logger;






public class FlowHelper {
Logger logger = Logger.getLogger(FlowHelper.class.getName());
String length=PropertyHelper.getProperties("flow_length");
/**
* 獲取流水號

* @return
*/
public String getFileCodeNum(String fileCodeNum) {
String lastFileCode = "";
int totalLength = 4;
if(length!=null&&length.matches("\\d+")){
totalLength=Integer.parseInt(length);
}

int fileCodeLength = fileCodeNum.length();
for (int i = 0; i < totalLength - fileCodeLength; i++) {
lastFileCode += "0";
}
return lastFileCode + fileCodeNum;
}
public static void main(String[] args) throws Exception{
FlowHelper zbwtCreateFileBarCode=new FlowHelper();
//String test = zbwtCreateFileBarCode.getFileCodeNum("101");
//System.out.println(test);

String excelName=zbwtCreateFileBarCode.getFlowName(3);
System.out.println(excelName);
}


/**
* 根據要求獲取流水號 最大的流水號
* @param year
* @param fileType
* @return
*/
public List<FlowNum> getMaxFlowNum(String year,String fileType){
String sql="select id,flow_num,flow_year,flow_type from file_flow  where flow_year=? and flow_type =?";
Connection conn=DBHelper.getConnection();
List<FlowNum> flowNums=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps=conn.prepareStatement(sql);
ps.setString(1, year);
ps.setString(2,fileType);
rs=ps.executeQuery();
flowNums=new ArrayList<FlowNum>();
while(rs.next()){
FlowNum flowNum=new FlowNum();
flowNum.setId(rs.getString("id"));
flowNum.setYear(rs.getString("flow_year"));
flowNum.setMaxFlow(rs.getInt("flow_num"));
flowNum.setType(rs.getString("flow_type"));
flowNums.add(flowNum);
}
} catch (SQLException e) {
logger.error("查詢最大流水號的sql語句有誤",e);
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}

}catch (SQLException e) {
logger.error("資料庫流關閉有誤,錯誤資訊為:"+e);
}
}

return flowNums;


}
/**
* 如果表中不存在,插入對應的流水號對應值
* @param flow
* @return
*/
public boolean addFlowNum(FlowNum flow){
boolean flag=false;
String sql="insert into file_flow (id,flow_year,flow_type,flow_num) values(?,?,?,?)";
Connection conn=DBHelper.getConnection();
PreparedStatement ps=null;
try {
ps=conn.prepareStatement(sql);
String uuid=UUID.randomUUID().toString();
uuid=uuid.replace("-", "");
ps.setString(1, uuid);
ps.setString(2,flow.getYear());
ps.setString(3,flow.getType());
ps.setInt(4,1);
int i=ps.executeUpdate();
if(i>0){
flag=true;
}
} catch (SQLException e) {
logger.error("插入流水號的sql語句有誤",e);
e.printStackTrace();
}finally{
try{
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}

}catch (SQLException e) {
logger.error("資料庫流關閉有誤,錯誤資訊為:"+e);
}
}

return flag;

}

/**
* 每次都更新最大流水號最大值
* @param flow
* @return
*/
public boolean updateMaxFlowNum(FlowNum flow){
boolean flag=false;
String sql="update  file_flow set flow_num=? where id=?";
Connection conn=DBHelper.getConnection();
PreparedStatement ps=null;
try {
ps=conn.prepareStatement(sql);
ps.setInt(1, flow.getMaxFlow()+1);
ps.setString(2,flow.getId());
int i =ps.executeUpdate();
if(i>0){
flag=true;
}
} catch (SQLException e) {
logger.error("更新流水號最大值的sql語句有誤",e);
e.printStackTrace();
}finally{
try{
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}

}catch (SQLException e) {
logger.error("資料庫流關閉有誤,錯誤資訊為:"+e);
}
}

return flag;

}
public String getFlowBeginStr(int typeInt) {
String typeName=null;
switch (typeInt) {
case 3:
typeName=PropertyHelper.getProperties("type.jfhq");
break;
case 4:
typeName=PropertyHelper.getProperties("type.snhq");
break;
case 5:
typeName=PropertyHelper.getProperties("type.wldgb");
break;
case 6:
typeName=PropertyHelper.getProperties("type.jyswj");
break;
case 7:
typeName=PropertyHelper.getProperties("type.wwlw");
break;
case 8:
typeName=PropertyHelper.getProperties("type.sghq");
break;
case 9:
typeName=PropertyHelper.getProperties("type.yjdj");
break;
case 10:
typeName=PropertyHelper.getProperties("type.rcswdj");
break;
case 11:
typeName=PropertyHelper.getProperties("type.fwwh");
break;
case 12:
typeName=PropertyHelper.getProperties("type.fwth");
break;
case 13:
typeName=PropertyHelper.getProperties("type.fwbh");
break;
case 14:
typeName=PropertyHelper.getProperties("type.xfwj");
break;
case 15:
typeName=PropertyHelper.getProperties("type.zygwywj");
break;
case 16:
typeName=PropertyHelper.getProperties("type.jysnb");
break;
case 17:
typeName=PropertyHelper.getProperties("type.jysqt");
break;


default:
logger.error("沒有找到你對應的型別");
break;
}

return typeName;
}



public String getFlowName(int typeInt) {
String typeName=null;
switch (typeInt) {
case 3:
typeName=PropertyHelper.getProperties("type.jfhq1");
break;
case 4:
typeName=PropertyHelper.getProperties("type.snhq1");
break;
case 5:
typeName=PropertyHelper.getProperties("type.wldgb1");
break;
case 6:
typeName=PropertyHelper.getProperties("type.jyswj1");
break;
case 7:
typeName=PropertyHelper.getProperties("type.wwlw1");
break;
case 8:
typeName=PropertyHelper.getProperties("type.sghq1");
break;
case 9:
typeName=PropertyHelper.getProperties("type.yjdj1");
break;
case 10:
typeName=PropertyHelper.getProperties("type.rcswdj1");
break;
case 11:
typeName=PropertyHelper.getProperties("type.fwwh1");
break;
case 12:
typeName=PropertyHelper.getProperties("type.fwth1");
break;
case 13:
typeName=PropertyHelper.getProperties("type.fwbh1");
break;
case 14:
typeName=PropertyHelper.getProperties("type.xfwj1");
break;
case 15:
typeName=PropertyHelper.getProperties("type.zygwywj1");
break;
case 16:
typeName=PropertyHelper.getProperties("type.jysnb1");
break;
case 17:
typeName=PropertyHelper.getProperties("type.jysqt1");
break;


default:
logger.error("沒有找到你對應的型別");
break;
}
return typeName;
}



}

當然獲取字首是通過配置檔案的方式  當然你可以寫死  的  配置檔案如下



解析配置檔案的程式碼,,,我這已經配置好的亂碼問題,當然如果你直接寫中文,肯定有亂碼問題,需要修改Eclipse的配置,如果不會的 。。可以留言問我,很樂意幫助


這就是解析那個properties檔案的輔助類


這是呼叫的關鍵處,沒有main方法測試。。。我是直接用到專案中的。。你們可以寫一個


最終生成的流水號格式:

  



已完成