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

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

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

    從制造到創(chuàng)造
    軟件工程師成長之路
    posts - 292,  comments - 96,  trackbacks - 0

    5.1 關(guān)系數(shù)據(jù)庫按主鍵區(qū)分不同的記錄

    主鍵的特點(diǎn):
       1、不允許為null;
       2、每條記錄具有唯一的主鍵值,不允許主鍵值重復(fù);
       3、每條記錄的主鍵值永遠(yuǎn)不會改變。

    設(shè)置主鍵的方式:

    5.1.1 把主鍵定義為自動增長標(biāo)識符類型

       在MySQL中,如果把表的主鍵設(shè)為 auto_increment 類型,數(shù)據(jù)庫就會自動為主鍵賦值。
       例如:
       
    CREATE TABLE CUSTOMERS(
    ID 
    int auto_increment primary key not null,
    NAME 
    varchar(15));

    INSERT INTO CUSTOMERS(NAME) VALUES("name1");
    INSERT INTO CUSTOMERS(NAME) VALUES("name2");

    SELECT ID FROM CUSTOMERS;

    查詢結(jié)果:
    ID
    1
    2

    在MS SQL Server中,如果把表的主鍵設(shè)為 identity 類型,數(shù)據(jù)庫就會自動為主鍵賦值:

    CREATE TABLE CUSTOMERS(
    ID 
    int identity(1,1) primary key not null,
    NAME 
    varchar(15));

    INSERT INTO CUSTOMERS(NAME) VALUES("name1");
    INSERT INTO CUSTOMERS(NAME) VALUES("name2");

    SELECT ID FROM CUSTOMERS;

    查詢結(jié)果:

    ID
    1
    2

    5.1.2 從序列(Sequence)中獲取自動增長的 標(biāo)識符


    在Oracle中,可以為每張表的主鍵創(chuàng)建一個(gè)單獨(dú)的序列,然后從這個(gè)序列中獲得自動增加的標(biāo)識符,把它賦值給主鍵。

    例如以下語句創(chuàng)建了一個(gè)名為 CUSTOMERS_ID_SEQ的序列,這個(gè)序列的起始值為1,增量為2:

    CREATE SEQUENCE CUSTOMERS_ID_SEQ INCREMENT BY 2 START WITH 1;

    一旦定義了 CUSTOMERS_ID_SEQ 序列,就可以訪問序列的 curval 和 nextval 屬性。

    curval:返回序列的當(dāng)前值。
    nextval:先增加序列的值,然后返回序列值。

    以下SQL語句先創(chuàng)建了CUSTOMERS表,然后插入兩條記錄,在插入時(shí)設(shè)定了ID和NAME字段的值,其中ID字段的值來自于CUSTOMERS_ID_SEQ序列。最后查詢CUSTOMERS表中的ID字段。

    CREATE TABLE CUSTOMERS(
    ID 
    int primary key not null,
    NAME 
    varchar(15));

    INSERT INTO CUSTOMERS VALUES(CUSTOMERS_ID_SEQ.curval, 'Tom');
    INSERT INTO CUSTOMERS VALUES(CUSTOMERS_ID_SEQ.nextval, 'Mike');

    SELECT ID FROM CUSTOMERS;

    如果在Oracle中執(zhí)行以上SQL語句,查詢結(jié)果:

    ID
    1
    3

    5.2 Java語言按內(nèi)存地址區(qū)分不同的對象

    在Java語言中,判斷兩個(gè)對象引用變量是否相等,有以下兩種比較方式:
    (1)比較兩個(gè)變量所引用的對象的內(nèi)存地址是否相同,“==”運(yùn)算符就是比較的內(nèi)存地址。此外,在Object類中定義的equals(Object o)方法,也是按內(nèi)存地址來比較的。如果用戶自定義的類沒有覆蓋Object類的equals(Object o)方法,也按內(nèi)存地址比較。

    例如,以下代碼用new語句共創(chuàng)建了兩個(gè)Customer對象,并定義了三個(gè)Customer類型的引用變量c1、c2和c3:

    Customer c1 = new Customer("Tom");//line1
    Customer c2 = new Customer("Tom");//line2
    Customer c3 = c1;//line3
    c3.setName("Mike");//line4


       圖5-1和圖5-2顯示了程序執(zhí)行到第3行及第4行的對象圖。


       從圖5-1和圖5-2看出,c1和c3變量引用同一個(gè)Customer對象而c2變量引用了而c2變量引用另一個(gè)Customer對象。因此,表達(dá)式"c1==c3"以及c1.equals(c3)的值都是true,而表達(dá)式"c1==c2"以及c1.equals(c2)的值是false。

    (2)比較兩個(gè)變量所引用的對象的值是否相同,Java API中的一些類覆蓋了Object類的equals(Object o)方法,實(shí)現(xiàn)按對象值比較。
    String類和Date類
    Java包裝類,包括:Byte、Integer、Short、Character、Long、Float、Doubl和Boolean。
    例如:

    String s1 = new String("hello");
    String s2 
    = new String("hello");


    盡管s1和s2引用不同的String對象,但是它們的字符串值都是“hello”,因此表達(dá)式“s1==s2的值是false,而表達(dá)式s1.equals(s2)的值是true。

    用戶自定義的類也可以覆蓋Object類的equals(Object o)方法,從而實(shí)現(xiàn)按對象值比較。例如,在Customer類中添加如下equals(Object o)方法,使它按客戶的姓名來比較兩個(gè)Customer對象是否相等:

    public boolean equals(Object o) {
     
    if(this==o){
      
    return true;
     }

     
    if(!instanceof Customer) {
      
    return false;
     }

     
    final Customer other = (Customer)o;

     
    if(this.getName().equals(other.getName())){
      
    return true;
     }
    else{
      
    return false;
     }
    }


    以下代碼用new語句共創(chuàng)建了兩個(gè)Customer對象,并定義了兩個(gè)Customer類型的引用變量c1和c2:

    Customer c1 = new Customer("Tom");
    Customer c2 
    = new Customer("Tom");


    盡管c1和c2引用不同的Customer對象,但是它們的name值都是“Tom”,因此表達(dá)式“c1==c2的值是false,而表達(dá)式c1.equals(c2)的值是true。
       

    posted on 2007-08-13 22:38 CoderDream 閱讀(391) 評論(1)  編輯  收藏 所屬分類: 精通Hibernate

    FeedBack:
    # re: [讀書筆記]第5章 映射對象標(biāo)識符
    2007-10-05 22:49 | 朱智武
    CREATE SEQUENCE CUSTOMERS_ID_SEQ INCREMENT BY 1 START WITH 1;  回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     

    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(9)

    我參與的團(tuán)隊(duì)

    隨筆分類(245)

    隨筆檔案(239)

    文章分類(3)

    文章檔案(3)

    收藏夾(576)

    友情鏈接

    搜索

    •  

    積分與排名

    • 積分 - 457944
    • 排名 - 114

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看片免费播放| 97免费人妻无码视频| 亚洲?v女人的天堂在线观看| 亚洲精品福利你懂| 国产精品久久久久久久久久免费| 亚洲美女自拍视频| 国产免费不卡视频| 亚洲国产日韩在线| 四虎成人免费大片在线| 亚洲精品无码永久在线观看男男| 女人18毛片水真多免费看| 久久精品亚洲日本波多野结衣| 国产精品二区三区免费播放心 | 女人18一级毛片免费观看| 亚洲中字慕日产2020| 拍拍拍又黄又爽无挡视频免费| 亚洲欧美国产国产一区二区三区| 国产青草视频免费观看97| 在线播放免费人成视频网站| 久久精品国产精品亚洲精品| 污视频在线观看免费| 亚洲国产综合人成综合网站00| 女人18毛片水最多免费观看| 一级毛片在线播放免费| 亚洲AV永久青草无码精品| av无码国产在线看免费网站| 久久久亚洲精华液精华液精华液| 亚洲国产精品尤物yw在线| 久章草在线精品视频免费观看| 亚洲成人福利网站| 免费a级黄色毛片| 在线播放免费人成毛片乱码| 亚洲人成7777影视在线观看| 国产男女猛烈无遮档免费视频网站 | 精品亚洲成a人片在线观看| 免费99精品国产自在现线| 久久亚洲精品无码网站| 亚洲精品无码Av人在线观看国产| 在线看免费观看AV深夜影院 | 久久久久无码专区亚洲av| 99热在线精品免费播放6|