国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

一個(gè)數(shù)據(jù)庫(kù)序號(hào)類NoCtr類的實(shí)現(xiàn)

2019-11-18 12:01:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  一個(gè)NoCtrl類的實(shí)現(xiàn)
  
  ·
  ·import java.sql.*;
  ·import com.liming.db.*;
  ·import com.liming.util.*;
  ·import java.text.*;
  ·
  ·/**
  · * <p>Title: 編號(hào)控制檔</p>
  · * <p>Description: </p>
  · * <p>Copyright: Copyright (c) 2005</p>
  · * <p>Company: Liming Network System</p>
  · * @author Yao Kui
  · * @version 1.0
  · */
  ·
  ·public class NoCtrl {
  · /**
  ·  * 調(diào)試模式
  ·  * 0=非調(diào)試模式;1=調(diào)試模式
  ·  */
  · public static int DebugMode = 0;
  ·
  · public static String CURR_DATE = "CURR_DATE";//編碼規(guī)則,當(dāng)前日期eg:20050501
  · public NoCtrl() {
  · }
  · /**
  ·  * @dePRecated
  ·  * @see currNO
  ·  * @param tableCode
  ·  * @param columnCode
  ·  * @return
  ·  */
  · public static String currNo(String tableCode,String columnCode){
  ·  Connection con = null;
  ·  Statement stmt = null;
  ·  DBManager dbMgr = new DBManager();
  ·
  ·  try{
  ·   String sqlStr =
  ·     "SELECT * FROM NO_CTRL";
  ·   String where = " WHERE TABLE_CODE='"+tableCode+"'";
  ·   if(columnCode != null) where += " AND COLUMN_CODE='"+columnCode+"'";
  ·   sqlStr += where;
  ·    APPTools.printStack(sqlStr);
  ·
  ·    if (DebugMode==0) {
  ·      con = dbMgr.getConnect(JndiName.JNDIOracle);
  ·    }
  ·    else {
  ·      con = dbMgr.getConnDirect();
  ·    }
  ·    stmt = con.createStatement();
  ·
  ·    ResultSet rst = stmt.executeQuery(sqlStr);
  ·    if(rst.next()){
  ·     String prefix = coverFixString(rst.getString("PREFIX"));
  ·     String postfix = coverFixString(rst.getString("POSTFIX"));
  ·     int currNo = rst.getInt("CURR_NO");
  ·     int numLen = rst.getInt("NUM_LEN");
  ·     stmt.executeUpdate("UPDATE NO_CTRL SET CURR_NO=CURR_NO+1"+where);
  ·     return prefix+lpad(Integer.toString(currNo),"0",numLen)+postfix;
  ·    }else{
  ·     return null;
  ·    }
  ·  }
  ·  catch(SQLException se) {
  ·    AppTools.printStack("操作編號(hào)控制檔失敗!");
  ·    AppTools.printStack(se);
  ·    return null;
  ·  }
  ·  catch(Exception e) {
  ·    AppTools.printStack("操作編號(hào)控制檔失敗!");
  ·    AppTools.printStack(e);
  ·    return null;
  ·  }
  ·  finally
  ·  {
  ·    dbMgr.release(con,stmt);
  ·  }
  · }
  · private static String coverFixString(String fix){
  ·  if(fix == null) return "";
  ·  java.text.SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
  ·  long date = System.currentTimeMillis();
  ·  String datestr = df.format(new Date(date));
  ·
  ·
  ·  /*if(CURR_DATE.equals(fix)){
  ·   java.text.SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
  ·   long date = System.currentTimeMillis();
  ·   return df.format(new Date(date));
  ·  }*/
  ·  return fix.replaceAll(CURR_DATE,datestr);
  · }
  · //將字符串左補(bǔ)串到一定長(zhǎng)度
  · private static String lpad(String src,String pad,int len){
  ·  if(src.length() >= len) return src;
  ·  int padLen = len - src.length();
  ·  int padTimes = padLenpad.length() + 1;
  ·  StringBuffer sb = new StringBuffer();
  ·  for(int i=0;i<padTimes;i++){
  ·   sb.append(pad);
  ·  }
  ·  return sb.toString().substring(0,padLen)+src;
  · }
  · public static void main(String args){
  ·  System.out.println(NoCtrl.lpad("15","0",5));
  ·
  ·  System.out.println(NoCtrl.lpad("aaas15","0",5));
  ·  System.out.println(NoCtrl.lpad("15","ab",5));
  ·  System.out.println(NoCtrl.coverFixString(null));
  ·
  ·  System.out.println(NoCtrl.coverFixString("asdff"));
  ·  System.out.println(NoCtrl.currNo("IN_BOX","IN_NO"));
  · }
  ·
  · /*上面的currNo方法對(duì)于業(yè)務(wù)邏輯后面報(bào)錯(cuò)的情況,會(huì)出現(xiàn)跳號(hào)的情況。對(duì)于要保證不跳號(hào)的業(yè)務(wù)則不可以。
  ·   下面是將取號(hào)與更新分開(kāi),延遲更新來(lái)保證不跳號(hào)的情況。首先業(yè)務(wù)取得的號(hào)(在出現(xiàn)新增頁(yè)面則就要顯示編號(hào)的情況)
  ·  只是表示“大致”的編號(hào),在更新時(shí)一個(gè)事務(wù)中重新取號(hào)與更新編號(hào)。
  ·  */
  · public static String currNO(String tableCode,String columnCode){
  ·  return currNO(tableCode,columnCode,false);
  · }
  ·
  · /**
  ·  *更新序號(hào),在業(yè)務(wù)新增數(shù)據(jù)中一起執(zhí)行,為了保證多用戶時(shí)也正確,不會(huì)重復(fù)。取得號(hào)后更新時(shí)加上原號(hào)
  ·  * 作為條件,正如多用戶更新加上版本(version)字段一樣。
  ·  * @param tableCode
  ·  * @param columnCode
  ·  * @param currNum
  ·  * @return
  ·  */
  · public static String updateNOSql(String tableCode,String columnCode,String currNum){
  ·  return updateNOSql(tableCode,columnCode,currNum,1);
  · }
  ·
  · /*對(duì)于上面的取與更新在一個(gè)事務(wù)中進(jìn)行。只取一個(gè)號(hào),取時(shí)不用加鎖。
  ·  對(duì)于假如后臺(tái)要進(jìn)行插入(多條),取回多個(gè)號(hào),最好是連續(xù)時(shí)。如
  ·  for(){
  ·  insert(no,..);
  ·  }
  ·  由于在一個(gè)事務(wù)中,所以NO_CTRL沒(méi)有更新,對(duì)自己或其它用戶,取下一個(gè)號(hào)都不對(duì)。
  ·  所以最好使用加鎖(for update)讀出第一個(gè)號(hào),最后的更新語(yǔ)句傳導(dǎo)入使用的個(gè)數(shù)。
  ·  var no = 加鎖讀出第一個(gè)號(hào)。
  ·  for(i=0;i<xxx;i++){
  ·  insert(no+i,...);
  ·  }
  ·  update(curr_no=curr_no+xxx)。
  ·  */
  · public static String currNO(String tableCode,String columnCode,boolean lock){
  ·  Connection con = null;
  ·  Statement stmt = null;
  ·  DBManager dbMgr = new DBManager();
  ·  String rt = new String2;
  ·  try{
  ·   String sqlStr =
  ·     "SELECT * FROM NO_CTRL";
  ·   String where = " WHERE TABLE_CODE='"+tableCode+"'";
  ·   if(columnCode != null) where += " AND COLUMN_CODE='"+columnCode+"'";
  ·   sqlStr += where;
  ·   if(lock) sqlStr += " FOR UPDATE"; //**LOCK
  ·    AppTools.printStack(sqlStr);
  ·
  ·    if (DebugMode==0) {
  ·      con = dbMgr.getConnect(JndiName.JNDIORACLE);
  ·    }
  ·    else {
  ·      con = dbMgr.getConnDirect();
  ·    }
  ·    stmt = con.createStatement();
  ·
  ·    ResultSet rst = stmt.executeQuery(sqlStr);
  ·    if(rst.next()){
  ·     String prefix = coverFixString(rst.getString("PREFIX"));
  ·     String postfix = coverFixString(rst.getString("POSTFIX"));
  ·     int currNo = rst.getInt("CURR_NO");
  ·     int numLen = rst.getInt("NUM_LEN");
  ·     //stmt.executeUpdate("UPDATE NO_CTRL SET CURR_NO=CURR_NO+1"+where);//延遲更新
  ·     rt0 = prefix+lpad(Integer.toString(currNo),"0",numLen)+postfix;
  ·     rt1 = Integer.toString(currNo);
  ·    }
  ·    return rt;
  ·  }
  ·  catch(SQLException se) {
  ·    AppTools.printStack("操作編號(hào)控制檔失敗!");
  ·    AppTools.printStack(se);
  ·    return null;
  ·  }
  ·  catch(Exception e) {
  ·    AppTools.printStack("操作編號(hào)控制檔失??!");
  ·    AppTools.printStack(e);
  ·    return null;
  ·  }
  ·  finally
  ·  {
  ·    dbMgr.release(con,stmt);
  ·  }
  · }
  · /**
  ·  * 返回更新NO_CTRL的語(yǔ)句
  ·  * @param tableCod

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 古丈县| 郓城县| 衡水市| 南丰县| 九江市| 象山县| 正镶白旗| 赤峰市| 平江县| 重庆市| 元阳县| 崇明县| 长阳| 葫芦岛市| 威海市| 汪清县| 迁西县| 廊坊市| 新丰县| 科尔| 赣榆县| 安化县| 同德县| 万载县| 昌宁县| 鄂托克前旗| 横山县| 翁牛特旗| 台南市| 鲜城| 临城县| 怀安县| 鹤庆县| 玛曲县| 榆林市| 宁海县| 长葛市| 揭阳市| 万全县| 灵石县| 定南县|