<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    codeslave

    常用鏈接

    統計

    Link

    最新評論

    java實現數據庫序號(流水號)

    開發中經常會用到如001,002,或者DOC001,DOC002之類的序號(俗稱的流水號)作為主鍵,實現
    的方法不難,原理也是取得數據庫中最大的記錄然后進行加1操作,而取得最大記錄的方式應該有兩種,一種
    是從數據庫中取得記錄集,然后用代碼去遍歷和判斷,不過這種方式感覺不太實際(^-^汗)!而另一種方式是
    用sql語句直接取出最大的記錄!

    呵呵!~還是不講太多廢話了,相信這些大家都知道!下面就共享一些主要用第二種方式來實現的源碼!

    源碼:sequencenumber1.0_src.rar

    jar包(^_^方便用):sequencenumber1.0.rar

    不過只現在只支持mysql,sqlserver,access,oracle等四種數據庫(^_^因為偶也只用到這幾種數據庫)!不

    過各位程序員們可自行擴展,原開發環境是eclipse3.2 + jdk1.5!

    支持的格式有純數字(如:1、2),字符(如:001、002),序號頭 + 序號(如DOC001、DOC002),序號頭 + 日期 + 序號(如:DOC20070206001、DOC20070206002)

    源碼中有測試的例子,如:

    // test
    public   static   void  main(String[] args)  throws  Exception  {
            
    // 不需要數據庫支持
            SequenceNumber sn  =   new  AccessSequenceNumber();
            System.out.println(
    " general number: "   +  sn.getGeneralNumber( " DOC " ));
            
    // 需要數據庫支持(以下測試部分需要Connection,請先根據數據庫類型取得連接對象,再進行測試^-^)
            
    // 測試前先建立表:TEST;字段:TESTID:文本(30)
            
    // 型式:sn = new AccessSequenceNumber(Connection對象)或sn.setConnection(Connection對象);
            sn.setConnection(JdbcUtil.getConnection_Access());
            
    // 注:getSequenceNumber_Number方法中如果字段的原始記錄存在非數字字符,例:'A12'、'f22',則會拋出字符到數字的轉換異常。
            
    // 建議getSequenceNumber_Number與其它方法不要同時測試。
            System.out.println( " sequencenumber number: "   +  sn.getSequenceNumber_Number( " TEST " " TESTID " ));
            System.out.println(
    " sequencenumber number: "   +  sn.getSequenceNumber_Number( " TEST " " TESTID " 10000 ));
            
    // 測試下面時請最好先注釋上面兩句代碼,否則當數據庫存在非純數字記錄時會拋出異常。
            
    // 建議一次只測試一個方法。
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", null, 6));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", "DOC", 6));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", null, 6, 'A'));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", "DOC", 6, 'A'));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", "DOC", 6));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", null, 6));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", "DOC", 6, 'A'));
            
    // System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", null, 6, 'A'));
            sn.close();
        }

    不說太多了,還是自已慢慢看吧!

    posted on 2007-02-06 15:51 codeslave 閱讀(5026) 評論(11)  編輯  收藏 所屬分類: java

    評論

    # re: java實現數據庫序號(流水號) 2007-02-06 15:53 lxc

    好貼,定了~  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2007-02-06 15:54 lxc

    這次頂兩次了~^_^  回復  更多評論   

    # re: java實現數據庫序號(流水號)[未登錄] 2007-02-06 15:58 leon

    頂頂頂頂頂 頂頂頂頂頂
      頂    頂
      頂   頂頂頂頂頂
      頂   頂 頂 頂
      頂   頂 頂 頂
      頂    頂 頂
     頂頂    頂 頂  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2007-02-07 08:37 匿名

    不考慮事務的話。你不擔心主鍵沖突啊。  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2007-02-07 09:32 codeslave

    首先感謝你提出的寶貴意見,不過我未清楚你所講的事務指的是那個,線程內的事務可用connection來控制!如果你指的是多用戶并發,那確實有可能產生主鍵沖突的異常,不過要解決這個問題不是少少代碼就做到的(但還是可以實現^-^,如用線程同步,只要緩存序號,那么并發產生的序號也不會相同)!而且并發性太大的系統也應該采用數據庫自動生成的序號或者一些產生唯一編號的算法,而現在這個還是可以用在并發性不大的系統上!  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2007-02-09 12:07 匿名

    嗯。我是說多用戶并發。可能大多數開發,采用自動增長字段作為主鍵吧。或者是sequence來處理吧。  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2009-01-14 15:34 匿名

    太天真了,完全沒考慮并發。  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2009-01-15 09:27 codeslave

    @匿名
    呵呵!想不到還有人關注這個,里面的確沒考慮,但可以外部做,如下
    private static Object synO = new Object();

    public void method() {
    synchronized(synO) {
    取得流水號!
    }
    }  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2009-05-26 17:02 kelli

    頂!!!!  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2009-07-10 10:32 prance

    沒考慮在負載均衡情況下的使用  回復  更多評論   

    # re: java實現數據庫序號(流水號) 2009-07-10 12:42 codeslave

    群集...高...這個我真的沒辦法!呵呵!有什么好的建議能否分享下?  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 性做久久久久久免费观看| 91精品国产免费入口| 亚洲色中文字幕在线播放| 美女黄色免费网站| 1000部拍拍拍18勿入免费视频软件| 成人免费无码大片A毛片抽搐| 亚洲精品无码高潮喷水在线| 一级做a毛片免费视频| 国产成在线观看免费视频| 亚洲人成高清在线播放| 91精品国产免费久久久久久青草 | 亚洲美女视频一区| 无码专区AAAAAA免费视频| 亚洲宅男永久在线| 黄页网站免费观看| 精品久久久久久久久亚洲偷窥女厕| 四虎永久免费观看| 亚洲一区二区三区亚瑟| 欧洲黑大粗无码免费| 精品国产日韩亚洲一区91 | 综合亚洲伊人午夜网 | 精品亚洲永久免费精品| 日本亚洲欧美色视频在线播放 | 亚洲s码欧洲m码吹潮| 免费人成无码大片在线观看| 亚洲最大黄色网站| 免费无码又爽又刺激高潮| 亚洲成人午夜电影| 尤物永久免费AV无码网站| 亚洲人成网站日本片| 免费国产在线观看| 男人进去女人爽免费视频国产| 亚洲综合激情视频| 亚洲av再在线观看| 欧洲精品码一区二区三区免费看| 女人18毛片免费观看| www成人免费观看网站| 亚洲精品美女视频| 亚洲国产成人精品女人久久久| 日韩视频免费在线观看| 亚洲日韩看片无码电影|