<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

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


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


    網站導航:
     
    主站蜘蛛池模板: g0g0人体全免费高清大胆视频| 日本免费的一级v一片| 美女黄色免费网站| 亚洲综合小说久久另类区| 亚洲国产精品嫩草影院久久| 99久久99这里只有免费费精品 | 国产免费久久精品99久久| 精品国产日韩久久亚洲| 亚洲一区中文字幕久久| 国产午夜亚洲不卡| 免费一级毛片在线观看| 嫩草影院在线免费观看| 青青青免费国产在线视频小草| 久久国产乱子伦精品免费强| 丰满妇女做a级毛片免费观看| 亚洲AV无码一区二区三区网址 | 国产大片91精品免费观看不卡| 岛国精品一区免费视频在线观看| 国产精品亚洲一区二区三区在线观看| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲成在人线在线播放无码| 亚洲第一网站免费视频| 无码乱人伦一区二区亚洲| 亚洲韩国精品无码一区二区三区| 亚洲人成无码www久久久| 亚洲AⅤ永久无码精品AA| 免费国产综合视频在线看| 在线免费观看毛片网站| 免费观看黄网站在线播放| 美女裸身网站免费看免费网站| 无码人妻精品中文字幕免费 | 亚洲人成人77777在线播放| 亚洲一区二区影院| 亚洲第一福利网站| 亚洲高清在线视频| 久久久亚洲AV波多野结衣| 亚洲高清中文字幕| 亚洲欧洲日韩在线电影| 亚洲国产精品成人精品软件 | 久久不见久久见中文字幕免费| 曰曰鲁夜夜免费播放视频|