<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 閱讀(5025) 評論(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

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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲真人无码永久在线观看| 亚洲欧洲美洲无码精品VA| 亚洲妓女综合网99| 特级无码毛片免费视频尤物| 亚洲精品乱码久久久久久按摩| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 99久久国产亚洲综合精品| 久久久高清免费视频| 亚洲第一页中文字幕| 国内精自视频品线六区免费| 亚洲国产美女精品久久久久| 免费看污成人午夜网站| 亚洲男人的天堂久久精品| 国语成本人片免费av无码| 国产AV无码专区亚洲AV蜜芽 | 在线看片免费不卡人成视频| 99亚偷拍自图区亚洲| 亚洲 国产 图片| 水蜜桃视频在线观看免费播放高清| 亚洲人成网77777亚洲色| 91成人在线免费观看| 亚洲视频无码高清在线| 免费在线观看理论片| 国产免费久久精品99久久| 亚洲av成人无码久久精品| 色影音免费色资源| 亚洲AV无码一区二区三区久久精品| 亚洲第一成人影院| 无码av免费网站| 亚洲精品无码专区在线| 精品国产香蕉伊思人在线在线亚洲一区二区| 久久成人18免费网站| 亚洲黄色免费在线观看| 国产色爽免费视频| 国产午夜不卡AV免费| 中文字幕亚洲综合小综合在线 | 日韩免费视频在线观看| 国产vA免费精品高清在线观看 | 亚洲第一街区偷拍街拍| 亚洲日韩av无码| 成人免费看片又大又黄|