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

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

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

    codeslave

    常用鏈接

    統(tǒng)計

    Link

    最新評論

    java實現(xiàn)數(shù)據(jù)庫序號(流水號)

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

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

    源碼:sequencenumber1.0_src.rar

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

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

    過各位程序員們可自行擴展,原開發(fā)環(huán)境是eclipse3.2 + jdk1.5!

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

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

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

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2007-02-06 15:54 lxc

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

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

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2007-02-07 08:37 匿名

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2007-02-07 09:32 codeslave

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2007-02-09 12:07 匿名

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2009-01-14 15:34 匿名

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2009-01-15 09:27 codeslave

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

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2009-05-26 17:02 kelli

    頂!!!!  回復  更多評論   

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2009-07-10 10:32 prance

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

    # re: java實現(xiàn)數(shù)據(jù)庫序號(流水號) 2009-07-10 12:42 codeslave

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


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 最近中文字幕电影大全免费版| 亚洲午夜在线播放| 一级毛片免费一级直接观看| 妞干网免费观看视频| 久久精品国产亚洲αv忘忧草| 91制片厂制作传媒免费版樱花| 久久狠狠高潮亚洲精品| 色欲色香天天天综合网站免费| 亚洲高清国产拍精品26U| 无码日韩精品一区二区免费暖暖| 亚洲高清在线视频| 99视频在线精品免费| 亚洲精品456在线播放| 91香蕉视频免费| 337p日本欧洲亚洲大胆人人 | 在线观看免费视频资源| 亚洲精品在线网站| 毛片免费全部免费观看| 亚洲hairy多毛pics大全| 免费乱码中文字幕网站| 99精品视频在线观看免费| 18亚洲男同志videos网站| 114一级毛片免费| 亚洲hairy多毛pics大全| 亚洲区日韩区无码区| 久久久免费的精品| 精品亚洲AV无码一区二区三区| 成人国产mv免费视频| 国产免费黄色无码视频| 亚洲精品美女久久久久| 四虎影视永久免费观看| 国产猛男猛女超爽免费视频| 一级毛片大全免费播放下载| 亚洲人成网7777777国产| 在线看片v免费观看视频777| 亚洲av无码专区在线观看亚| 国产av无码专区亚洲av桃花庵| 中国在线观看免费国语版| 一区二区在线视频免费观看| 亚洲精品国产电影午夜| 亚洲精品一级无码中文字幕|