posts - 39,  comments - 44,  trackbacks - 0
            2008年11月21日
          “補(bǔ)充說明”通常是在求職簡歷的結(jié)束部分,可以填寫,也可以空著。不過,如果能夠善于利用它,求職成功率將會(huì)大大提高。畢竟,作為求職簡歷的最后部分,它是表現(xiàn)自我的最后機(jī)會(huì)。

            在“補(bǔ)充說明”中填寫的最佳信息因人而異,這取決于求職者的職業(yè)目標(biāo)和背景。請記住,求職簡歷是自我營銷的手段,其中的信息應(yīng)當(dāng)有助于向用人單位推銷自己,以實(shí)現(xiàn)自己的職業(yè)目標(biāo)。可以這樣考慮問題:如果這是向潛在的用人單位推銷自己的最會(huì)機(jī)會(huì),你會(huì)說些什么?

            以下是一些填寫“補(bǔ)充說明”的思路,供大家參考:

            能力或業(yè)績總結(jié)

            在補(bǔ)充說明對自己的能力和職業(yè)生涯進(jìn)行總結(jié)。在能力或業(yè)績總結(jié)中要突出自己主要的“賣點(diǎn)”和成功案例——這一切都應(yīng)當(dāng)與你想要應(yīng)聘的職位有關(guān)系。

            獲獎(jiǎng)情況

            用列舉自己的獲獎(jiǎng)情況作為求職簡歷的結(jié)束,會(huì)給用人單位留下深刻印象。

            證明書或推薦信

            你是否收到過對于你的工作情況表示滿意的推薦信或業(yè)績評(píng)估證明?如果有,可以摘選其中的精采部分作為“補(bǔ)充說明”。

            發(fā)表作品

            如果在報(bào)刊、雜志上發(fā)表過作品,可以考慮在“補(bǔ)充說明”里羅列出來。

            專利

            如果擁有專利(包括正在申請的),請?jiān)?#8220;補(bǔ)充說明”中列出。

            演講能力

            許多職位要有演講能力才能勝任。列舉自己參加過的演講、主題發(fā)言會(huì)給用人單位留下好印象。

            計(jì)算機(jī)運(yùn)用技能

            在“補(bǔ)充說明”中列舉自己在計(jì)算機(jī)操作系統(tǒng)、網(wǎng)絡(luò)和硬件等方面的技能,多多益善。

            培訓(xùn)情況

            在“補(bǔ)充說明”中列出自己參加過的專業(yè)培訓(xùn)和繼續(xù)教育。

            再次強(qiáng)調(diào)工作地點(diǎn)

            在“補(bǔ)充說明”中再次強(qiáng)調(diào)工作地點(diǎn)不失為結(jié)束求職簡歷的好辦法。

            說明自己愿意出差

            如果愿意出差,可以在補(bǔ)充說明中加以說明,用人單位或許會(huì)因?yàn)檫@一點(diǎn)而看上你。

            應(yīng)該省略的內(nèi)容

            補(bǔ)充說明不要涉及婚姻狀況、年齡、有多少個(gè)孩子等情況,如果興趣愛好與工作無關(guān),最好也不要提及。

           來源:中華英才網(wǎng) 
          posted @ 2008-11-21 20:01 礦礦 閱讀(279) | 評(píng)論 (1)編輯 收藏

          下表是元字符及其在正則表達(dá)式上下文中的行為的一個(gè)完整列表:

          字符 描述
          將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè)后向引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,'n' 匹配字符 "n"。'\n' 匹配一個(gè)換行符。序列 '\' 匹配 "" 而 "\(" 則匹配 "("。
          ^
          匹配輸入字符串的開始位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。
          $
          匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
          *
          匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價(jià)于{0,}。[/size]
          +
          匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價(jià)于 {1,}。
          ?
          匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價(jià)于 {0,1}。
          {n}
          是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。
          {n,}
          是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。
          {n,m}
          和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。
          ?
          當(dāng)該字符緊跟在任何一個(gè)其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 "oooo",'o+?' 將匹配單個(gè) "o",而 'o+' 將匹配所有 'o'。
          .
          匹配除 "\n" 之外的任何單個(gè)字符。要匹配包括 '\n' 在內(nèi)的任何字符,請使用象 '[.\n]' 的模式。
          (pattern)
          匹配pattern 并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 {CONTENT}… 屬性。要匹配圓括號(hào)字符,請使用 '\(' 或 '\)'。
          (?:pattern)
          匹配 pattern 但不獲取匹配結(jié)果,也就是說這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用 "或" 字符 (|) 來組合一個(gè)模式的各個(gè)部分是很有用。例如, 'industr(?:y|ies) 就是一個(gè)比 'industry|industries' 更簡略的表達(dá)式。
          (?=pattern)
          正向預(yù)查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始。
          (?!pattern)
          負(fù)向預(yù)查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始
          x|y
          匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
          [xyz]
          字符集合。匹配所包含的任意一個(gè)字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
          [^xyz]
          負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
          [a-z]
          字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫字母字符。
          [^a-z]
          負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。
          \b
          匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
          \B
          匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
          \cx
          匹配由x指明的控制字符。例如, \cM 匹配一個(gè) Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 'c' 字符。
          \d
          匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。
          \D
          匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]。
          \f
          匹配一個(gè)換頁符。等價(jià)于 \x0c 和 \cL。
          \n
          匹配一個(gè)換行符。等價(jià)于 \x0a 和 \cJ。
          \r
          匹配一個(gè)回車符。等價(jià)于 \x0d 和 \cM。
          \s
          匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于 [ \f\n\r\t\v]。
          \S
          匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]。
          \t
          匹配一個(gè)制表符。等價(jià)于 \x09 和 \cI。
          \v
          匹配一個(gè)垂直制表符。等價(jià)于 \x0b 和 \cK。
          \w
          匹配包括下劃線的任何單詞字符。等價(jià)于'[A-Za-z0-9_]'。
          \W
          匹配任何非單詞字符。等價(jià)于 '[^A-Za-z0-9_]'。
          \xn
          匹配 n,其中 n 為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長。例如, '\x41' 匹配 "A"。'\x041' 則等價(jià)于 '\x04' & "1"。正則表達(dá)式中可以使用 ASCII 編碼。.
          \num
          匹配 num,其中 num 是一個(gè)正整數(shù)。對所獲取的匹配的引用。例如,'(.)' 匹配兩個(gè)連續(xù)的相同字符。
          \n
          標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 \n 之前至少 n 個(gè)獲取的子表達(dá)式,則 n 為后向引用。否則,如果 n 為八進(jìn)制數(shù)字 (0-7),則 n 為一個(gè)八進(jìn)制轉(zhuǎn)義值。
          \nm
          標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 \nm 之前至少有is preceded by at least nm 個(gè)獲取得子表達(dá)式,則 nm 為后向引用。如果 \nm 之前至少有 n 個(gè)獲取,則 n 為一個(gè)后跟文字 m 的后向引用。如果前面的條件都不滿足,若 n 和 m 均為八進(jìn)制數(shù)字 (0-7),則 \nm 將匹配八進(jìn)制轉(zhuǎn)義值 nm。
          \nml
          如果 n 為八進(jìn)制數(shù)字 (0-3),且 m 和 l 均為八進(jìn)制數(shù)字 (0-7),則匹配八進(jìn)制轉(zhuǎn)義值 nml。
          \un
          匹配 n,其中 n 是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的 Unicode 字符。例如,\u00A9 匹配版權(quán)符號(hào) (?)。

          posted @ 2008-11-21 19:35 礦礦 閱讀(2249) | 評(píng)論 (0)編輯 收藏

          匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]
          評(píng)注:匹配中文還真是個(gè)頭疼的事,有了這個(gè)表達(dá)式就好辦了

          匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]
          評(píng)注:可以用來計(jì)算字符串的長度(一個(gè)雙字節(jié)字符長度計(jì)2,ASCII字符計(jì)1)

          匹配空白行的正則表達(dá)式:ns*r
          評(píng)注:可以用來刪除空白行

          匹配HTML標(biāo)記的正則表達(dá)式:<(S*?)[^>]*>.*?|<.*? />
          評(píng)注:網(wǎng)上流傳的版本太糟糕,上面這個(gè)也僅僅能匹配部分,對于復(fù)雜的嵌套標(biāo)記依舊無能為力

          匹配首尾空白字符的正則表達(dá)式:^s*|s*$
          評(píng)注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達(dá)式

          匹配Email地址的正則表達(dá)式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
          評(píng)注:表單驗(yàn)證時(shí)很實(shí)用

          匹配網(wǎng)址URL的正則表達(dá)式:[a-zA-z]+://[^s]*
          評(píng)注:網(wǎng)上流傳的版本功能很有限,上面這個(gè)基本可以滿足需求

          匹配帳號(hào)是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
          評(píng)注:表單驗(yàn)證時(shí)很實(shí)用

          匹配國內(nèi)電話號(hào)碼:d{3}-d{8}|d{4}-d{7}
          評(píng)注:匹配形式如 0511-4405222 或 021-87888822

          匹配騰訊QQ號(hào):[1-9][0-9]{4,}
          評(píng)注:騰訊QQ號(hào)從10000開始

          匹配中國郵政編碼:[1-9]d{5}(?!d)
          評(píng)注:中國郵政編碼為6位數(shù)字

          匹配身份證:d{15}|d{18}
          評(píng)注:中國的身份證為15位或18位

          匹配ip地址:d+.d+.d+.d+
          評(píng)注:提取ip地址時(shí)有用


          匹配特定數(shù)字:
          ^[1-9]d*$    //匹配正整數(shù)
          ^-[1-9]d*$   //匹配負(fù)整數(shù)
          ^-?[1-9]d*$   //匹配整數(shù)
          ^[1-9]d*|0$  //匹配非負(fù)整數(shù)(正整數(shù) + 0)
          ^-[1-9]d*|0$   //匹配非正整數(shù)(負(fù)整數(shù) + 0)
          ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點(diǎn)數(shù)
          ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負(fù)浮點(diǎn)數(shù)
          ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點(diǎn)數(shù)
          ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
          ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
          評(píng)注:處理大量數(shù)據(jù)時(shí)有用,具體應(yīng)用時(shí)注意修正

          匹配特定字符串:
          ^[A-Za-z]+$  //匹配由26個(gè)英文字母組成的字符串
          ^[A-Z]+$  //匹配由26個(gè)英文字母的大寫組成的字符串
          ^[a-z]+$  //匹配由26個(gè)英文字母的小寫組成的字符串
          ^[A-Za-z0-9]+$  //匹配由數(shù)字和26個(gè)英文字母組成的字符串
          ^w+$  //匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串


          在使用RegularExpressionValidator驗(yàn)證控件時(shí)的驗(yàn)證功能及其驗(yàn)證表達(dá)式介紹如下:


          只能輸入數(shù)字:“^[0-9]*$”
          只能輸入n位的數(shù)字:“^d{n}$”
          只能輸入至少n位數(shù)字:“^d{n,}$”
          只能輸入m-n位的數(shù)字:“^d{m,n}$”
          只能輸入零和非零開頭的數(shù)字:“^(0|[1-9][0-9]*)$”
          只能輸入有兩位小數(shù)的正實(shí)數(shù):“^[0-9]+(.[0-9]{2})?$”
          只能輸入有1-3位小數(shù)的正實(shí)數(shù):“^[0-9]+(.[0-9]{1,3})?$”
          只能輸入非零的正整數(shù):“^+?[1-9][0-9]*$”
          只能輸入非零的負(fù)整數(shù):“^-[1-9][0-9]*$”
          只能輸入長度為3的字符:“^.{3}$”
          只能輸入由26個(gè)英文字母組成的字符串:“^[A-Za-z]+$”
          只能輸入由26個(gè)大寫英文字母組成的字符串:“^[A-Z]+$”
          只能輸入由26個(gè)小寫英文字母組成的字符串:“^[a-z]+$”
          只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:“^[A-Za-z0-9]+$”
          只能輸入由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:“^w+$”
          驗(yàn)證用戶密碼:“^[a-zA-Z]w{5,17}$”正確格式為:以字母開頭,長度在6-18之間,


          只能包含字符、數(shù)字和下劃線。
          驗(yàn)證是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
          只能輸入漢字:“^[u4e00-u9fa5],{0,}$”
          驗(yàn)證Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
          驗(yàn)證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
          驗(yàn)證電話號(hào)碼:“^((d{3,4})|d{3,4}-)?d{7,8}$”


          正確格式為:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,


          “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
          驗(yàn)證身份證號(hào)(15位或18位數(shù)字):“^d{15}|d{}18$”
          驗(yàn)證一年的12個(gè)月:“^(0?[1-9]|1[0-2])$”正確格式為:“01”-“09”和“1”“12”
          驗(yàn)證一個(gè)月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”


          正確格式為:“01”“09”和“1”“31”。


          匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]
          匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]
          匹配空行的正則表達(dá)式:n[s| ]*r
          匹配HTML標(biāo)記的正則表達(dá)式:/<(.*)>.*</1>|<(.*) />/
          匹配首尾空格的正則表達(dá)式:(^s*)|(s*$)
          匹配Email地址的正則表達(dá)式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
          匹配網(wǎng)址URL的正則表達(dá)式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

          (1)應(yīng)用:計(jì)算字符串的長度(一個(gè)雙字節(jié)字符長度計(jì)2,ASCII字符計(jì)1)
          String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

          (2)應(yīng)用:javascript中沒有像vbscript那樣的trim函數(shù),我們就可以利用這個(gè)表達(dá)式來實(shí)現(xiàn)
          String.prototype.trim = function()
          {
          return this.replace(/(^s*)|(s*$)/g, "");
          }
          (3)應(yīng)用:利用正則表達(dá)式分解和轉(zhuǎn)換IP地址
          function IP2V(ip) //IP地址轉(zhuǎn)換成對應(yīng)數(shù)值
          {
          re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正則表達(dá)式
          if(re.test(ip))
          {
          return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
          }
          else
          {
          throw new Error("Not a valid IP address!")
          }
          }
          (4)應(yīng)用:從URL地址中提取文件名的javascript程序
          s="http://www.9499.net/page1.htm";
          s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm
          (5)應(yīng)用:利用正則表達(dá)式限制網(wǎng)頁表單里的文本框輸入內(nèi)容
          用正則表達(dá)式限制只能輸入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
          用正則表達(dá)式限制只能輸入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
          用正則表達(dá)式限制只能輸入數(shù)字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
          用正則表達(dá)式限制只能輸入數(shù)字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''

          posted @ 2008-11-21 10:58 礦礦 閱讀(2006) | 評(píng)論 (2)編輯 收藏
            2008年11月7日
          [轉(zhuǎn)]自天極網(wǎng)

          1使用不帶參數(shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用不帶參數(shù)的存儲(chǔ)過程時(shí),必須使用 call SQL 轉(zhuǎn)義序列。不帶參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name}

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE PROCEDURE GetContactFormalNames
            AS
            BEGIN
             SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
             FROM Person.Contact
            END
          此存儲(chǔ)過程返回單個(gè)結(jié)果集,其中包含一列數(shù)據(jù)(由 Person.Contact 表中前十個(gè)聯(lián)系人的稱呼、名稱和姓氏組成)。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 executeQuery 方法調(diào)用 GetContactFormalNames 存儲(chǔ)過程。

           

          以下是引用片段:
            public static void executeSprocNoParams(Connection con) ...{
             try ...{
             Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");
            
             while (rs.next()) ...{
           System.out.println(rs.getString("FormalName"));
            }
            rs.close();
            stmt.close();
            }
            catch (Exception e) ...{
            e.printStackTrace();
            }
            }

            2使用帶有輸入?yún)?shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用帶參數(shù)的存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 IN 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name[([parameter][,[parameter]]...)]}

            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定 IN 參數(shù)。此字符充當(dāng)要傳遞給該存儲(chǔ)過程的參數(shù)值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數(shù)指定值。可使用的 setter 方法由 IN 參數(shù)的數(shù)據(jù)類型決定。

            向 setter 方法傳遞值時(shí),不僅需要指定要在參數(shù)中使用的實(shí)際值,還必須指定參數(shù)在存儲(chǔ)過程中的序數(shù)位置。例如,如果存儲(chǔ)過程包含單個(gè) IN 參數(shù),則其序數(shù)值為 1。如果存儲(chǔ)過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二個(gè)序數(shù)值為 2。

            作為如何調(diào)用包含 IN 參數(shù)的存儲(chǔ)過程的實(shí)例,使用 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中的 uspGetEmployeeManagers 存儲(chǔ)過程。此存儲(chǔ)過程接受名為 EmployeeID 的單個(gè)輸入?yún)?shù)(它是一個(gè)整數(shù)值),然后基于指定的 EmployeeID 返回雇員及其經(jīng)理的遞歸列表。下面是調(diào)用此存儲(chǔ)過程的 Java 代碼:

            

           

          以下是引用片段:
            public static void executeSprocInParams(Connection con) ...{
             try ...{
             PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
             pstmt.setInt(1, 50);
             ResultSet rs = pstmt.executeQuery();
             while (rs.next()) ...{
             System.out.println("EMPLOYEE:");
             System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
             System.out.println("MANAGER:");
             System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
             System.out.println();
             }
             rs.close();
             pstmt.close();
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }

            3使用帶有輸出參數(shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用此類存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 OUT 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name[([parameter][,[parameter]]...)]}

            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定 OUT 參數(shù)。此字符充當(dāng)要從該存儲(chǔ)過程返回的參數(shù)值的占位符。要為 OUT 參數(shù)指定值,必須在運(yùn)行存儲(chǔ)過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數(shù)的數(shù)據(jù)類型。

            使用 registerOutParameter 方法為 OUT 參數(shù)指定的值必須是 java.sql.Types 所包含的 JDBC 數(shù)據(jù)類型之一,而它又被映射成本地 SQL Server 數(shù)據(jù)類型之一。有關(guān) JDBC 和 SQL Server 數(shù)據(jù)類型的詳細(xì)信息,請參閱了解 JDBC 驅(qū)動(dòng)程序數(shù)據(jù)類型。

            當(dāng)您對于 OUT 參數(shù)向 registerOutParameter 方法傳遞一個(gè)值時(shí),不僅必須指定要用于此參數(shù)的數(shù)據(jù)類型,而且必須在存儲(chǔ)過程中指定此參數(shù)的序號(hào)位置或此參數(shù)的名稱。例如,如果存儲(chǔ)過程包含單個(gè) OUT 參數(shù),則其序數(shù)值為 1;如果存儲(chǔ)過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二個(gè)序數(shù)值為 2。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程: 根據(jù)指定的整數(shù) IN 參數(shù) (employeeID),該存儲(chǔ)過程也返回單個(gè)整數(shù) OUT 參數(shù) (managerID)。根據(jù) HumanResources.Employee 表中包含的 EmployeeID,OUT 參數(shù)中返回的值為 ManagerID。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 GetImmediateManager 存儲(chǔ)過程:

           

          以下是引用片段:
            public static void executeStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
             cstmt.setInt(1, 5);
             cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
             cstmt.execute();
             System.out.println("MANAGER ID: " + cstmt.getInt(2));
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            } 

          本示例使用序號(hào)位置來標(biāo)識(shí)參數(shù)。或者,也可以使用參數(shù)的名稱(而非其序號(hào)位置)來標(biāo)識(shí)此參數(shù)。下面的代碼示例修改了上一個(gè)示例,以說明如何在 Java 應(yīng)用程序中使用命名參數(shù)。請注意,這些參數(shù)名稱對應(yīng)于存儲(chǔ)過程的定義中的參數(shù)名稱: CREATE PROCEDURE GetImmediateManager

           
          以下是引用片段:
           @employeeID INT,
             @managerID INT OUTPUT
            AS
            BEGIN
             SELECT @managerID = ManagerID
             FROM HumanResources.Employee
             WHERE EmployeeID = @employeeID
            END
            存儲(chǔ)過程可能返回更新計(jì)數(shù)和多個(gè)結(jié)果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規(guī)范,此規(guī)范規(guī)定在檢索 OUT 參數(shù)之前應(yīng)檢索多個(gè)結(jié)果集和更新計(jì)數(shù)。也就是說,應(yīng)用程序應(yīng)先檢索所有 ResultSet 對象和更新計(jì)數(shù),然后使用 CallableStatement.getter 方法檢索 OUT 參數(shù)。否則,當(dāng)檢索 OUT 參數(shù)時(shí),尚未檢索的 ResultSet 對象和更新計(jì)數(shù)將丟失。

            4 使用帶有返回狀態(tài)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用這種存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。返回狀態(tài)參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

           

          以下是引用片段:
           {[?=]call procedure-name[([parameter][,[parameter]]...)]}
            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定返回狀態(tài)參數(shù)。此字符充當(dāng)要從該存儲(chǔ)過程返回的參數(shù)值的占位符。要為返回狀態(tài)參數(shù)指定值,必須在執(zhí)行存儲(chǔ)過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數(shù)的數(shù)據(jù)類型。

            此外,向 registerOutParameter 方法傳遞返回狀態(tài)參數(shù)值時(shí),不僅需要指定要使用的參數(shù)的數(shù)據(jù)類型,還必須指定參數(shù)在存儲(chǔ)過程中的序數(shù)位置。對于返回狀態(tài)參數(shù),其序數(shù)位置始終為 1,這是因?yàn)樗冀K是調(diào)用存儲(chǔ)過程時(shí)的第一個(gè)參數(shù)。盡管 SQLServerCallableStatement 類支持使用參數(shù)的名稱來指示特定參數(shù),但您只能對返回狀態(tài)參數(shù)使用參數(shù)的序號(hào)位置編號(hào)。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE PROCEDURE CheckContactCity
             (@cityName CHAR(50))
            AS
            BEGIN
             IF ((SELECT COUNT(*)
             FROM Person.Address
             WHERE City = @cityName) > 1)
             RETURN 1
            ELSE
             RETURN 0
            END
            該存儲(chǔ)過程返回狀態(tài)值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數(shù)指定的城市。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 CheckContactCity 存儲(chǔ)過程:

           

          以下是引用片段:
           public static void executeStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
             cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
             cstmt.setString(2, "Atlanta");
             cstmt.execute();
             System.out.println("RETURN STATUS: " + cstmt.getInt(1));
             }
             cstmt.close();
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }
            5 使用帶有更新計(jì)數(shù)的存儲(chǔ)過程

            使用 SQLServerCallableStatement 類構(gòu)建對存儲(chǔ)過程的調(diào)用之后,可以使用 execute 或 executeUpdate 方法中的任意一個(gè)來調(diào)用此存儲(chǔ)過程。executeUpdate 方法將返回一個(gè) int 值,該值包含受此存儲(chǔ)過程影響的行數(shù),但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數(shù)計(jì)數(shù),則可以在運(yùn)行存儲(chǔ)過程后調(diào)用 getUpdateCount 方法。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下表和存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE TABLE TestTable
             (Col1 int IDENTITY,
             Col2 varchar(50),
             Col3 int);
            
            CREATE PROCEDURE UpdateTestTable
             @Col2 varchar(50),
             @Col3 int
            AS
            BEGIN
             UPDATE TestTable
             SET Col2 = @Col2, Col3 = @Col3
            END;
          在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,并使用 execute 方法調(diào)用 UpdateTestTable 存儲(chǔ)過程,然后使用 getUpdateCount 方法返回受存儲(chǔ)過程影響的行計(jì)數(shù)。
          以下是引用片段:
          public static void executeUpdateStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
             cstmt.setString(1, "A");
             cstmt.setInt(2, 100);
             cstmt.execute();
             int count = cstmt.getUpdateCount();
             cstmt.close();
            
             System.out.println("ROWS AFFECTED: " + count);
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }
          posted @ 2008-11-07 22:21 礦礦 閱讀(260) | 評(píng)論 (0)編輯 收藏
          [轉(zhuǎn)]自天極網(wǎng)

          1使用不帶參數(shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用不帶參數(shù)的存儲(chǔ)過程時(shí),必須使用 call SQL 轉(zhuǎn)義序列。不帶參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name}

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE PROCEDURE GetContactFormalNames
            AS
            BEGIN
             SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
             FROM Person.Contact
            END
          此存儲(chǔ)過程返回單個(gè)結(jié)果集,其中包含一列數(shù)據(jù)(由 Person.Contact 表中前十個(gè)聯(lián)系人的稱呼、名稱和姓氏組成)。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 executeQuery 方法調(diào)用 GetContactFormalNames 存儲(chǔ)過程。

           

          以下是引用片段:
            public static void executeSprocNoParams(Connection con) ...{
             try ...{
             Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");
            
             while (rs.next()) ...{
           System.out.println(rs.getString("FormalName"));
            }
            rs.close();
            stmt.close();
            }
            catch (Exception e) ...{
            e.printStackTrace();
            }
            }

            2使用帶有輸入?yún)?shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用帶參數(shù)的存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 IN 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name[([parameter][,[parameter]]...)]}

            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定 IN 參數(shù)。此字符充當(dāng)要傳遞給該存儲(chǔ)過程的參數(shù)值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數(shù)指定值。可使用的 setter 方法由 IN 參數(shù)的數(shù)據(jù)類型決定。

            向 setter 方法傳遞值時(shí),不僅需要指定要在參數(shù)中使用的實(shí)際值,還必須指定參數(shù)在存儲(chǔ)過程中的序數(shù)位置。例如,如果存儲(chǔ)過程包含單個(gè) IN 參數(shù),則其序數(shù)值為 1。如果存儲(chǔ)過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二個(gè)序數(shù)值為 2。

            作為如何調(diào)用包含 IN 參數(shù)的存儲(chǔ)過程的實(shí)例,使用 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中的 uspGetEmployeeManagers 存儲(chǔ)過程。此存儲(chǔ)過程接受名為 EmployeeID 的單個(gè)輸入?yún)?shù)(它是一個(gè)整數(shù)值),然后基于指定的 EmployeeID 返回雇員及其經(jīng)理的遞歸列表。下面是調(diào)用此存儲(chǔ)過程的 Java 代碼:

            

           

          以下是引用片段:
            public static void executeSprocInParams(Connection con) ...{
             try ...{
             PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
             pstmt.setInt(1, 50);
             ResultSet rs = pstmt.executeQuery();
             while (rs.next()) ...{
             System.out.println("EMPLOYEE:");
             System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
             System.out.println("MANAGER:");
             System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
             System.out.println();
             }
             rs.close();
             pstmt.close();
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }

            3使用帶有輸出參數(shù)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用此類存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 OUT 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            

          以下是引用片段:
          {call procedure-name[([parameter][,[parameter]]...)]}

            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定 OUT 參數(shù)。此字符充當(dāng)要從該存儲(chǔ)過程返回的參數(shù)值的占位符。要為 OUT 參數(shù)指定值,必須在運(yùn)行存儲(chǔ)過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數(shù)的數(shù)據(jù)類型。

            使用 registerOutParameter 方法為 OUT 參數(shù)指定的值必須是 java.sql.Types 所包含的 JDBC 數(shù)據(jù)類型之一,而它又被映射成本地 SQL Server 數(shù)據(jù)類型之一。有關(guān) JDBC 和 SQL Server 數(shù)據(jù)類型的詳細(xì)信息,請參閱了解 JDBC 驅(qū)動(dòng)程序數(shù)據(jù)類型。

            當(dāng)您對于 OUT 參數(shù)向 registerOutParameter 方法傳遞一個(gè)值時(shí),不僅必須指定要用于此參數(shù)的數(shù)據(jù)類型,而且必須在存儲(chǔ)過程中指定此參數(shù)的序號(hào)位置或此參數(shù)的名稱。例如,如果存儲(chǔ)過程包含單個(gè) OUT 參數(shù),則其序數(shù)值為 1;如果存儲(chǔ)過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二個(gè)序數(shù)值為 2。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程: 根據(jù)指定的整數(shù) IN 參數(shù) (employeeID),該存儲(chǔ)過程也返回單個(gè)整數(shù) OUT 參數(shù) (managerID)。根據(jù) HumanResources.Employee 表中包含的 EmployeeID,OUT 參數(shù)中返回的值為 ManagerID。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 GetImmediateManager 存儲(chǔ)過程:

           

          以下是引用片段:
            public static void executeStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
             cstmt.setInt(1, 5);
             cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
             cstmt.execute();
             System.out.println("MANAGER ID: " + cstmt.getInt(2));
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            } 

          本示例使用序號(hào)位置來標(biāo)識(shí)參數(shù)。或者,也可以使用參數(shù)的名稱(而非其序號(hào)位置)來標(biāo)識(shí)此參數(shù)。下面的代碼示例修改了上一個(gè)示例,以說明如何在 Java 應(yīng)用程序中使用命名參數(shù)。請注意,這些參數(shù)名稱對應(yīng)于存儲(chǔ)過程的定義中的參數(shù)名稱: CREATE PROCEDURE GetImmediateManager

           
          以下是引用片段:
           @employeeID INT,
             @managerID INT OUTPUT
            AS
            BEGIN
             SELECT @managerID = ManagerID
             FROM HumanResources.Employee
             WHERE EmployeeID = @employeeID
            END
            存儲(chǔ)過程可能返回更新計(jì)數(shù)和多個(gè)結(jié)果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規(guī)范,此規(guī)范規(guī)定在檢索 OUT 參數(shù)之前應(yīng)檢索多個(gè)結(jié)果集和更新計(jì)數(shù)。也就是說,應(yīng)用程序應(yīng)先檢索所有 ResultSet 對象和更新計(jì)數(shù),然后使用 CallableStatement.getter 方法檢索 OUT 參數(shù)。否則,當(dāng)檢索 OUT 參數(shù)時(shí),尚未檢索的 ResultSet 對象和更新計(jì)數(shù)將丟失。

            4 使用帶有返回狀態(tài)的存儲(chǔ)過程

            使用 JDBC 驅(qū)動(dòng)程序調(diào)用這種存儲(chǔ)過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。返回狀態(tài)參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

           

          以下是引用片段:
           {[?=]call procedure-name[([parameter][,[parameter]]...)]}
            構(gòu)造 call 轉(zhuǎn)義序列時(shí),請使用 ?(問號(hào))字符來指定返回狀態(tài)參數(shù)。此字符充當(dāng)要從該存儲(chǔ)過程返回的參數(shù)值的占位符。要為返回狀態(tài)參數(shù)指定值,必須在執(zhí)行存儲(chǔ)過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數(shù)的數(shù)據(jù)類型。

            此外,向 registerOutParameter 方法傳遞返回狀態(tài)參數(shù)值時(shí),不僅需要指定要使用的參數(shù)的數(shù)據(jù)類型,還必須指定參數(shù)在存儲(chǔ)過程中的序數(shù)位置。對于返回狀態(tài)參數(shù),其序數(shù)位置始終為 1,這是因?yàn)樗冀K是調(diào)用存儲(chǔ)過程時(shí)的第一個(gè)參數(shù)。盡管 SQLServerCallableStatement 類支持使用參數(shù)的名稱來指示特定參數(shù),但您只能對返回狀態(tài)參數(shù)使用參數(shù)的序號(hào)位置編號(hào)。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE PROCEDURE CheckContactCity
             (@cityName CHAR(50))
            AS
            BEGIN
             IF ((SELECT COUNT(*)
             FROM Person.Address
             WHERE City = @cityName) > 1)
             RETURN 1
            ELSE
             RETURN 0
            END
            該存儲(chǔ)過程返回狀態(tài)值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數(shù)指定的城市。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 CheckContactCity 存儲(chǔ)過程:

           

          以下是引用片段:
           public static void executeStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
             cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
             cstmt.setString(2, "Atlanta");
             cstmt.execute();
             System.out.println("RETURN STATUS: " + cstmt.getInt(1));
             }
             cstmt.close();
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }
            5 使用帶有更新計(jì)數(shù)的存儲(chǔ)過程

            使用 SQLServerCallableStatement 類構(gòu)建對存儲(chǔ)過程的調(diào)用之后,可以使用 execute 或 executeUpdate 方法中的任意一個(gè)來調(diào)用此存儲(chǔ)過程。executeUpdate 方法將返回一個(gè) int 值,該值包含受此存儲(chǔ)過程影響的行數(shù),但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數(shù)計(jì)數(shù),則可以在運(yùn)行存儲(chǔ)過程后調(diào)用 getUpdateCount 方法。

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下表和存儲(chǔ)過程:

            

          以下是引用片段:
          CREATE TABLE TestTable
             (Col1 int IDENTITY,
             Col2 varchar(50),
             Col3 int);
            
            CREATE PROCEDURE UpdateTestTable
             @Col2 varchar(50),
             @Col3 int
            AS
            BEGIN
             UPDATE TestTable
             SET Col2 = @Col2, Col3 = @Col3
            END;
          在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,并使用 execute 方法調(diào)用 UpdateTestTable 存儲(chǔ)過程,然后使用 getUpdateCount 方法返回受存儲(chǔ)過程影響的行計(jì)數(shù)。
          以下是引用片段:
          public static void executeUpdateStoredProcedure(Connection con) ...{
             try ...{
             CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
             cstmt.setString(1, "A");
             cstmt.setInt(2, 100);
             cstmt.execute();
             int count = cstmt.getUpdateCount();
             cstmt.close();
            
             System.out.println("ROWS AFFECTED: " + count);
             }
             catch (Exception e) ...{
             e.printStackTrace();
             }
            }
          posted @ 2008-11-07 22:16 礦礦 閱讀(202) | 評(píng)論 (0)編輯 收藏
            2008年10月31日

          --創(chuàng)建數(shù)據(jù)庫
          use master
          go
          if exists(select * from sysdatabases where name = 'BankDB')
          drop database BankDB
          go
          exec xp_cmdshell 'md E:\朱礦龍',NO_OUTPUT
          create database BankDB
          go
          use BankDB
          --創(chuàng)建帳戶信息表AccountInfo
          if exists(select * from sysobjects where name = 'AccountInfo')
          drop table AccountInfo
          go
          create table AccountInfo
          (
          CustID int identity(1,1) primary key,
          CustName varchar(20) not null,
          IDCard varchar(18) check(len(IDCard) = 15 or len(IDCard) = 18),
          TelePhone varchar(13) check(len(TelePhone)=11 or len(TelePhone) like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or len(TelePhone) like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,
          Address varchar(50) default '地址不詳'
          )
          go
          --創(chuàng)建信用卡信息表CardInfo
          if exists(select * from sysobjects where name = 'CardInfo')
          drop table CardInfo
          go
          create table CardInfo
          (
          CardID varchar(19) check(len(CardID)=19) primary key,
          CardPassWord varchar(6) default'888888',
          CustID int references AccountInfo(CustID),
          SaveType varchar(10) not null check(SaveType in('活期','定期')),
          OpenDate datetime not null default(getdate()),
          OpenMoney money not null check(OpenMoney >= 1),
          LeftMoney money not null check(LeftMoney >= 1),
          IsLoss varchar(2) not null check(IsLoss in('是','否')) default '否'
          )
          go
          --創(chuàng)建交易信息表TransInfo
          if exists(select * from sysobjects where name = 'TransInfo')
          drop table TransInfo
          go
          create table TransInfo
          (
          CardID varchar(19) not null,
          TransType varchar(4) not null check(TransType in('存入','支取')),
          TransMoney money not null check(TransMoney > 0),
          TransDate datetime default(getdate())
          )
          go


          -------------------------------插入測試數(shù)據(jù)-------------------------------------
          ---為AccountInfo表插入測試數(shù)據(jù)
          insert into AccountInfo values('孫悟空','422322123902140019','027-8888988','花果山')
          insert into AccountInfo values('唐僧','422322001902140019','027-8536896','大唐')
          insert into AccountInfo values('沙和尚','410334020157144719','13295654665','通天河')
          ---為CardInfo表插入測試數(shù)據(jù)
          insert into CardInfo values('1027 3726 1536 1135',default,1,'定期',default,500.00,500.00,default)
          insert into CardInfo values('1029 3526 1235 1235',default,2,'活期',default,1500.00,1500.00,default)
          insert into CardInfo values('1324 7532 1536 1935',default,3,'活期',default,4500.00,4500.00,default)


          ---表的查看
          select * from AccountInfo

          select * from CardInfo

          select * from TransInfo

          -----------------T-SQL----------------------------
          --孫悟空修改密碼
          update CardInfo set CardPassWord = 611234 where CustID = 1

          --孫悟空取錢
          --事務(wù)開始
          begin transaction tran_Qu
          --定義一個(gè)用于記錄錯(cuò)誤的變量
          declare @tran_error int
          set @tran_error = 0;
          --將孫悟空交易進(jìn)行記錄
          insert into TransInfo values('1027 3726 1536 1135','支取',200.00,getdate())
          set @tran_error = @tran_error + @@error
          --從孫悟空的帳戶中減去200.00
          update CardInfo set LeftMoney = LeftMoney - 200
          where CardID = '1027 3726 1536 1135'
          set @tran_error = @tran_error + @@error
          if @tran_error <> 0
             begin
                --執(zhí)行錯(cuò)誤,回滾事務(wù)
                rollback transaction
                print '支取失敗,交易已取消'
             end
          else
            begin
              --沒有發(fā)現(xiàn)錯(cuò)誤,提交事務(wù)
              commit transaction
              print'交易成功,已保存新數(shù)據(jù)'
            end
          go
          select * from CardInfo where CustID = 1

          --沙和尚存錢
          begin transaction tran_bring
          declare @tran_error int
          set @tran_error = 0;
          insert into TransInfo values('1324 7532 1536 1935','存入',1200.00,getdate())
          set @tran_error = @tran_error + @@error
          update CardInfo set LeftMoney = LeftMoney + 1200
          where CardID = '1324 7532 1536 1935'
          set @tran_error = @tran_error + @@error
          if @tran_error <> 0
             begin
                rollback transaction
                print '存入失敗,交易已取消'
             end
          else
            begin
              commit transaction
              print'交易成功,已保存新數(shù)據(jù)'
            end
          go
          select * from CardInfo where CustID = 3

          --唐僧卡丟失
          update CardInfo set IsLoss='是' where CustID = 2

          --查詢最近10開戶的銀行卡信息
          select * from CardInfo where datediff(dd,OpenDate,getdate()) <= 10

          --查詢最大交易的卡信息
          declare @maxMoney money
          select @maxMoney = max(TransMoney) from TransInfo
          select * from CardInfo where CardID in(select CardID from TransInfo where TransMoney = @maxMoney)

          --查詢交易信息表中總的交易
          declare @allMoney money
          declare @QuMoney money
          declare @CunMoney money
          select @allMoney = sum(TransMoney) from TransInfo
          select @QuMoney = sum(TransMoney) from TransInfo where TransType = '支取'
          select @CunMoney = sum(TransMoney) from TransInfo where TransType = '存入'
          print '總交易金額:' + convert(varchar(10),@allMoney)
          print '支取交易金額:' + convert(varchar(10),@QuMoney)
          print '存入交易金額:' + convert(varchar(10),@CunMoney)

          --給交易信息表加上非聚集索引,并利用非聚集索引查詢數(shù)據(jù)
          if exists(select * from sysobjects where name = 'IX_CardID')
          drop index BankDB.IX_CardID
          go
          create nonclustered index IX_CardID
          on TransInfo(CardID)
          with fillfactor = 30
          go
          select * from TransInfo with(index = IX_CardID) where CardID = '1324 7532 1536 1935'

          --查詢掛失的賬戶信息
          select * from AccountInfo where CustID in(select CustID from CardInfo where IsLoss = '是')


          --賬戶信息視圖
          if exists(select * from sysobjects where name = 'view_AccountCardInfo')
          drop view view_AccountCardInfo
          go
          create view view_AccountCardInfo
          as
          select AccountInfo.CustID '帳戶編號(hào)',CustName '帳戶姓名',IDCard'身份證號(hào)碼',TelePhone'客戶電話',Address'客戶地址',
                  CardID'信用卡編號(hào)',SaveType'儲(chǔ)蓄類型',OpenDate'開戶日期',OpenMoney'開戶金額',IsLoss'是否掛失'
          from AccountInfo join CardInfo
          on AccountInfo.CustID = CardInfo.CustID
          go
          select * from view_AccountCardInfo

          --交易信息視圖
          if exists(select * from sysobjects where name = 'view_TransInfo')
          drop view view_TransInfo
          go
          create view view_TransInfo
          as
          select CardID '卡號(hào)',TransType '交易類型',TransMoney '交易金額',TransDate '交易時(shí)間'
          from TransInfo
          go
          go
          select * from view_TransInfo

          ---------------第三階段----------------
          --------T-SQL-------------
          if exists(select name from sysobjects where name = 'Tri_TransInfo_Insert')
          drop trigger Tri_TransInfo_Insert
          go
          create trigger Tri_TransInfo_Insert on TransInfo for insert
          as
           declare @TempTransType varchar(10)     --定義臨時(shí)的變量存放交易類型
           declare @TempTransMoney money          --定義臨時(shí)的變量存放交易金額
           declare @TempCardID varchar(19)        --定義臨時(shí)的變量存放卡號(hào)
           declare @TempLeftMoney money           --定義臨時(shí)的變量存放客戶的余額
           
          --從inserted臨時(shí)表中取出數(shù)據(jù)賦值
          select @TempTransType = TransType,@TempTransMoney = TransMoney,@TempCardID = CardID
          from inserted
          select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID

          if(@TempTransType = '支取')      
            begin
              if(@TempLeftMoney - @TempTransMoney >=1)  
                 begin
                    update CardInfo set LeftMoney = @TempLeftMoney - @TempTransMoney where CardID = @TempCardID
                    print '交易成功!'
                 end
               else
                 begin
                    rollback transaction
                    print '余額不足,交易失敗!'
                 end
            end
          else
            begin
              update CardInfo set LeftMoney = @TempLeftMoney + @TempTransMoney where CardID = @TempCardID
              print '交易成功!'
            end
          select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID  
          print '卡號(hào):' + convert(varchar(19),@TempCardID) + '  余額:' + convert(varchar(10),@TempLeftMoney)
          go
          set nocount on   --不顯示語句影響記錄行數(shù)
          --測試觸發(fā)器,沙和尚支取
          insert into TransInfo(CardID,TransType,TransMoney) values('9645 9087 9371 4492','支取',500)
          go

          select * from TransInfo
          select * from accountinfo
          select * from CardInfo

          --利用存儲(chǔ)過程實(shí)現(xiàn)備份交易信息的業(yè)務(wù)
          if exists(select *from sysobjects where name = 'Proc_Backup_TransInfo')
              drop procedure Proc_Backup_TransInfo
          go
          create procedure Proc_Backup_TransInfo
          @BackupDate datetime
          as
          declare @MyError int
          set @MyError = 0
          print '開始備份......'
          if exists(select * from sysobjects where name ='Back_TransInfo')
          begin
           begin tran 
           insert into Back_TransInfo select * from TransInfo where datediff(dd,TransDate,getdate()) >=0
          set @MyError = @MyError + @@error
          if @MyError != 0
             begin
                 rollback transaction
                print '備份失敗'
             end
          else
            begin
                commit transaction
                 print'備份成功'
             end
            end
          else
            begin
              begin tran 
              select * into Back_TransInfo from TransInfo where datediff(dd,TransDate,getdate()) >=0
              set @MyError = @MyError + @@error
          if @MyError != 0
             begin
                rollback transaction
                print '備份失敗!'
             end
          else
             begin
                commit transaction
                print '備份成功!'
             end
          end
          go
          insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate()) 
          insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
          insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
          declare @BackDate datetime
          set @BackDate = getDate()
          exec Proc_Backup_TransInfo '2008-10-31'
          go
          select * from Back_TransInfo

          --實(shí)現(xiàn)銀行卡的存儲(chǔ)過程
          if exists(select * from sysobjects where name = 'Proc_GetCardID')
              drop procedure Proc_GetCardID
          go
          create procedure Proc_GetCardID
          @CardID varchar(19) output
          as
          declare @TempRand numeric(18,16)
          declare @TempStr varchar(18)
          set @TempRand = rand(datepart(ms,getdate())*10000)
          set @TempStr = convert(varchar(18),@TempRand)
          set @CardID = substring(@TempStr,3,4)+' '+substring(@TempStr,7,4)+' '+substring(@TempStr,11,4)+' '+substring(@TempStr,15,4)
          go
          declare @MyCardID varchar(19)
          exec Proc_GetCardID @MyCardID output
          print '產(chǎn)生的隨即卡號(hào)是:' + @MyCardID
          go

          --實(shí)現(xiàn)開戶的存儲(chǔ)過程
          if exists(select * from sysobjects where name = 'Proc_OpenAcount')
              drop procedure Proc_OpenAcount
          go
          create procedure Proc_OpenAcount
          @CustName varchar(20),
          @IDCard varchar(18),
          @Telephone varchar(13),
          @OpenMoney money = 1,
          @SaveType varchar(10) = '活期',
          @Address varchar(50)= '地址不詳'
          as
           declare @MyCardID varchar(19)
           declare @MyCustID int
           exec Proc_GetCardID @MyCardID output
          while(1=1)
           begin
           if exists(select * from CardInfo where CardID = @MyCardID)
           exec Proc_GetCardID @MyCardID output
          else
           break
           end
          insert into AccountInfo values(@CustName,@IDCard,@TelePhone,@Address)  
          select @MyCustID = CustID from AccountInfo where IDCard = @IDCard      
          insert into CardInfo values(@MyCardID,default,@MyCustID,@SaveType,default,@OpenMoney,@OpenMoney,default)
          print '尊敬的客戶:' +@CustName +'開戶成功,卡號(hào)為:'+@MyCardId

          print '產(chǎn)生的隨機(jī)卡號(hào)為:' + @MyCardID
          exec Proc_OpenAcount '白骨精','245687556977812345','12478964568'
          exec Proc_OpenAcount '嫦娥公主','745687476912812335','14796653141',@Address = '月亮'

          ----銷戶
          if exists(select * from sysobjects where name = 'Proc_DropAcount')
              drop procedure Proc_DropAcount
          go
          create procedure Proc_DropAcount
           --@CardID varchar(19)
          @IDCard varchar(18) --身份證號(hào)
          as
          declare @TempCustID int
          declare @TempLeftMoney money
          --select @TempCustID = CustID from CardInfo where CardID = @CardID 
          --select @TempLeftMoney = LeftMoney from CardInfo where CardID = @CardID
          print '該帳戶余額:' +convert(varchar(10),@TempLeftMoney)+'正在取出。。。'
          delete from CardInfo where custid in(select custid from accountinfo where IDCard=@IDCard)
          delete from  AccountInfo where IDCard=@IDCard
          go
          declare @CardID varchar(19)
          select @CardID = CardID from CardInfo where CustID in(select CustID from AccountInfo where CustName = '唐僧')
          exec Proc_DropAcount '422322001902140019'--根據(jù)身份證號(hào)刪除
          go
          ---表的查看
          select * from AccountInfo
          select * from CardInfo

          posted @ 2008-10-31 19:31 礦礦 閱讀(504) | 評(píng)論 (0)編輯 收藏
            2008年10月26日

          類和對象:
           類:主觀抽象,是對象的模板,可以實(shí)例化對象
            習(xí)慣上類的定義格式:
             package xxx;  
             import xxx;  
             public class Xxxx{
              屬性 ······;
              
              構(gòu)造器 ······;
              
              方法 ······;
             }

            定義屬性:實(shí)例變量
             格式:[ 修飾符 ]  類型 變量名  [ = ? ]
             實(shí)例變量定義在類中但在任何方法之外。
             實(shí)例變量有默認(rèn)值:各種各樣的0。(同數(shù)組)
             實(shí)例變量的作用域至少在本類內(nèi)部,受訪問控制符的限制。
             在重合作用域,實(shí)例變量和局部變量允許有命名沖突,“局部優(yōu)先”。
             
            定義方法:
             格式: [ 修飾符 ]  返回類型 方法名( 參數(shù)列表 ) [ throws  異常 ] { ······ }
             java中所有參數(shù)都是值傳遞。
                當(dāng)沒有值返回時(shí),返回類型必須被定義為void。
             返回類型必須與方法名相鄰,其他修飾符可以調(diào)換位置。
             
            構(gòu)造器:
             在創(chuàng)建對象的過程中調(diào)用的方法。
             構(gòu)造器沒有返回類型。
             構(gòu)造器的名字與類名相同。
             格式為:[ 修飾符 ]  類名( 參數(shù)列表 ){  },修飾符可以是private、 protected、 default、private
             在一個(gè)對象的生成周期中構(gòu)造器只用一次,由系統(tǒng)自動(dòng)調(diào)用,不允許手工調(diào)用。
             程序員沒有提供一個(gè)構(gòu)造器,系統(tǒng)會(huì)自動(dòng)提供一個(gè)無參的構(gòu)造器。
             獲得對象的方式:
              通過new(在堆空間中申請分配空間),new 類名(),可以通過這種形式或的一個(gè)對象,這時(shí)的對象是無法使用,必須把他的地址存放進(jìn)一個(gè)對象變量才能夠使用。
              例如 :
               Car c=new Car();
             注意:
              最好在寫類時(shí)提供一個(gè)無參的構(gòu)造器。
                
            this關(guān)鍵字:
             this是個(gè)隱式參數(shù),代表當(dāng)前對象;
              publie class Student{
               private String name;
               public void setName(String name){
                this.name=name;  //this.name為當(dāng)前對象的成員變量
               }
              }
              
             如果某個(gè)構(gòu)造方法的第一個(gè)語句具有形式this( ··· ),那么這個(gè)構(gòu)造方法將調(diào)用同一類中的其他構(gòu)造方法。
             
                    注意:
                     在構(gòu)造器中this(...)必須放在該構(gòu)造器的第一行。
              this不能出現(xiàn)在靜態(tài)方法里面  
           
           類、對象、實(shí)例三者的關(guān)系:
            類:是對象的模板,可以實(shí)例化對象
            對象:類的個(gè)體
            實(shí)例:實(shí)現(xiàn)的對象
            student s; 
            s=new student();
             其中 Student為類,s為對象,new Student()為實(shí)例,s賦值后也是實(shí)例了。

          方法重載:
           方法名相同,參數(shù)表不同,不考慮返回值類型(但最好還是使返回類型一致)。
           編譯器根據(jù)參數(shù),選擇一個(gè)方法,如果沒有完全匹配的,對于參數(shù)表采用“向上就近匹配原則”,但不允許模棱兩可。
           方法重載屏蔽了一個(gè)對象的同一類方法由于參數(shù)不同所造成的差異。
             
          封裝:
           類的屬性加private修飾符,來限制只能夠在類的內(nèi)部進(jìn)行訪問,有效的保護(hù)數(shù)據(jù)。
           對于類中的私有屬性,要對其給出一對方法getXxx(),setXxx()訪問私有屬性,保證對私有屬性的操作的安全性。
           方法公開的是方法的聲明,即只須知道參數(shù)和返回值就可以調(diào)用該方法,隱藏方法的實(shí)現(xiàn)的細(xì)節(jié)。
           一個(gè)對象和外界的聯(lián)系應(yīng)當(dāng)通過一個(gè)統(tǒng)一的接口,應(yīng)當(dāng)公開的公開,應(yīng)當(dāng)隱藏的隱藏。
            
          繼承:
           父類到子類是從一般到特殊的關(guān)系。
            泛化:將不同子類中的共性抽象成父類的過程。
            特化:在原有父類的基礎(chǔ)上加入一些個(gè)性的過程。
            原則:父類放共性,子類放個(gè)性。
           繼承的關(guān)鍵字:extends
           Java只支持單繼承:一個(gè)類最多只有一個(gè)直接的父類。

                方法覆蓋:
            方法名:相同
            參數(shù)表:相同
            訪問限制符:相同或者更寬
            返回值類型:相同或者子類返回的類型是父類返回的類型的子類(在JDK5.0以后)
            拋出的異常:不能比父類更寬。
              
                super關(guān)鍵字:
            super()表示調(diào)用父類的構(gòu)造器
            super()也和this()一樣必須放在方法的第一句
            super()和this()不能同時(shí)出現(xiàn)        
            super可以屏蔽子類屬性和父類屬性重名時(shí)帶來的屬性遮蓋,super. 表示調(diào)用父類的方法或?qū)傩?br />   在子類的構(gòu)造器中如果沒有指定調(diào)用父類的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類的無參構(gòu)造器,即super()
            
           注意:
            父類的構(gòu)造器不能被子類繼承
            方法和屬性可以被繼承,權(quán)限不限制能否繼承過來,限制的是能否直接訪問
            先構(gòu)造父類,后構(gòu)造子類,先this后super
            
          多態(tài):
           多態(tài)分為兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
            編譯時(shí)類型:主觀概念,把它看作什么。
            運(yùn)行時(shí)類型:客觀概念,實(shí)際它是什么。
              例:Animal a=new Dog();
                   指著狗問,這個(gè)動(dòng)物是什么?
                   
                運(yùn)行時(shí)多態(tài)的三原則:
            對象類型不變。
            只能對對象調(diào)用編譯時(shí)類型中定義的方法。
            在程序的運(yùn)行時(shí),根據(jù)對象的運(yùn)行時(shí)類型,找覆蓋后的方法來調(diào)用。(運(yùn)行時(shí)動(dòng)態(tài)類型綁定)
            
                強(qiáng)制類型轉(zhuǎn)換: 一定沒有新對象生成。(父類的引用賦值給子類的引用需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換)
                關(guān)鍵字:instanceof
                     用法:引用  instanceof  類名    判斷這個(gè)引用所指向的對象是否屬于這個(gè)類。
              用在強(qiáng)制轉(zhuǎn)換之前,避免類型轉(zhuǎn)換異常。
             if(a instanceof Dog){
              Dog d=(Dog)a;
             }
             
           多態(tài)的作用:把不同的子類對象都當(dāng)作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。

          posted @ 2008-10-26 21:04 礦礦 閱讀(257) | 評(píng)論 (0)編輯 收藏
            2008年10月20日

          局部變量:不是聲明在類體括號(hào)里面的變量
           (1)必須要先賦值,后使用,否則通不過編譯,局部變量沒有默認(rèn)初始化值
           (2)作用范圍:定義開始到定義它的代碼塊結(jié)束
           (3)同一范圍內(nèi),不允許2個(gè)局部變量命名沖突

           參數(shù)傳遞時(shí),簡單類型進(jìn)行值轉(zhuǎn)遞 (參數(shù)進(jìn)行傳遞時(shí)都會(huì)先去棧中生成一個(gè)副本的,使用結(jié)束后釋放)
           
          自動(dòng)類型提升:
           byte a = 1;
           byte b = 2;
           a = a+b;          //編譯出錯(cuò)自動(dòng)類型提升成int
           a += b;       //自加沒有自動(dòng)類型提升問題
           類型自動(dòng)提升規(guī)則:
            a和b作某種運(yùn)算
            a和b中有double,結(jié)果就是double
            a和b中有float,結(jié)果就是float
            a和b中有l(wèi)ong,結(jié)果就是long
            除此之外,結(jié)果都是int
           把高字節(jié)轉(zhuǎn)成低字節(jié),需要作強(qiáng)制類型轉(zhuǎn)換. byte c=(byte)a+b;
           
          移位運(yùn)算符:效率最高
           >>   有符號(hào)右移,補(bǔ)符號(hào)位
            移負(fù)數(shù)位,則將該數(shù)值加32后再進(jìn)行移位
            數(shù)值的2進(jìn)制是按照補(bǔ)碼保存的
           >>>  右移后高位都補(bǔ)0
           
          邏輯運(yùn)算符:
           &/|也可以作為邏輯運(yùn)算符
           && 先判斷前面一個(gè)條件,如果為假,則不用計(jì)算后一個(gè)條件
           || 先判斷前面一個(gè)條件,如果為真,則不用計(jì)算后一個(gè)條件
           
          " + "運(yùn)算符:
           兩個(gè)操作的對象是數(shù)值時(shí),是加法
           如果有一個(gè)是字符串時(shí),則是字符串的連接
           
          流程控制語句:
           同Core C++
           switch中的變量類型只能是byte、 short、int、char四種類型
           
          數(shù)組:
           聲明數(shù)組:  
            數(shù)組能以下列形式聲明:
             類型[] array;
             類型 array[]; 
            注:
             JAVA中推薦用:類型[] array;
             一個(gè)數(shù)組是一個(gè)對象
             聲明一個(gè)數(shù)組沒有創(chuàng)建一個(gè)對象
             聲明時(shí)不用指定長度
             
           創(chuàng)建數(shù)組:
            創(chuàng)建基本數(shù)據(jù)類型數(shù)組:int[] i = new int[2];
            創(chuàng)建引用數(shù)據(jù)類型數(shù)組:Student[] s = new Student[100];
            數(shù)組創(chuàng)建后其中的元素有初始值
             類型                     黙認(rèn)值
             byte                      0
             short                     0
             int                       0
             long                      0l
             float                     0.0f
             double                   0.0d
             char                      \u0000
             boolean                 false
             reference types     null
            注:
             創(chuàng)建時(shí)一定要指定長度
             int[] i2=new int[];            //error
             
           初始化數(shù)組:
            聲明、創(chuàng)建、初始化分開:
             int[] i;   //定義數(shù)組
             i = new int[2];  //分配空間
             i[0] = 0;    //初始化
             i[1] = 1;
             
            聲明、創(chuàng)建、初始化在同一時(shí)間 :
             int[] i = {0,1};   //顯示初始化  {}中有幾個(gè)值,則數(shù)組長度為幾
             Student[] s = {new Student(),new Student()};
             
            注: int[] i=new int[]{1,2,3};      //后面[]中不可以寫數(shù)值
             int[] i1=new int[3]{1,2,3};    //error
             
           二維數(shù)組:(其實(shí)是一個(gè)一維數(shù)組,它的每一個(gè)元素又是一個(gè)一維數(shù)組)
            int[][] i1 = new int[2][3];
            int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
            int[][] i3 = new int[][3];  //不允許高維沒分配空間而先給低維分配空間
            int[][] i2 = new int[2][];
            i2[0] = new int[2];
            i2[1] = new int[3];    
            
           數(shù)組長度:
            數(shù)組的屬性length
            數(shù)組長度一旦確定,不可改變    
            int[] i = new int[5]; 則i.length= 5
            
           數(shù)組拷貝:
            系統(tǒng)類System提供的
            static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
             src: 源數(shù)組  
             srcPos: 從源數(shù)組哪個(gè)位置開始拷貝(位置指的是元素的下標(biāo))
             dest: 目標(biāo)數(shù)組
             destPos: 拷貝的元素放到目標(biāo)數(shù)組的起始位置
             length: 拷貝多少個(gè)
             
           數(shù)組排序:
            自己實(shí)現(xiàn)一個(gè)排序方法來進(jìn)行排序
            或者調(diào)用java.util.Arrays.sort(Object o)

          posted @ 2008-10-20 22:43 礦礦 閱讀(184) | 評(píng)論 (0)編輯 收藏
            2008年10月14日

          JAVA_HOME:配置JDK的目錄
           CLASSPATH:指定到哪里去找運(yùn)行時(shí)需要用到的類代碼(字節(jié)碼)
           PATH:指定可執(zhí)行程序的位置
           
           LINUX系統(tǒng)(在" .bash_profile "下的環(huán)境變量設(shè)置)
            JAVA_HOME=/opt/jdk1.5.0_06
            CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
            PATH=$PATH:$JAVA_HOME/bin:.
            export JAVA_HOME CLASSPATH PATH     (將指定的環(huán)境變量聲明為全局的)
             
           windows系統(tǒng):
            右擊我的電腦-->屬性-->高級(jí)-->環(huán)境變量
            
          Java的運(yùn)行過程:
           編譯:生成可執(zhí)行文件,如C++中利用g++生成a.out,效率高,但不跨平臺(tái)
           解釋:解釋器把源文件逐行解釋,跨平臺(tái)但效率不高
           
           在java中:先編譯后解釋,把.java文件編譯成.class字節(jié)碼文件
            Java源代碼文件(.java文件)--->
            Java編譯器(javac)--->
            Java字節(jié)碼文件(.class文件,平臺(tái)無關(guān)的)--->
            Java解釋器(java),執(zhí)行Java字節(jié)碼

          Java的垃圾回收:
           由一個(gè)后臺(tái)線程gc進(jìn)行垃圾回收
           虛擬機(jī)判定內(nèi)存不夠的時(shí)候會(huì)中斷代碼的運(yùn)行,這時(shí)候gc才進(jìn)行垃圾回收
           缺點(diǎn):不能夠精確的去回收內(nèi)存
           java.lang.System.gc(); 建議回收內(nèi)存,但系統(tǒng)不一定回應(yīng),他會(huì)先去看內(nèi)存是否夠用,夠用則不予理睬,不夠用才會(huì)去進(jìn)行垃圾回收
           內(nèi)存中什么算是垃圾:
            不在被引用的對象(局部變量,沒有指針指向的)
            
          java的安全性:
           沙箱機(jī)制:只能做沙箱允許的操作
           通過下面環(huán)節(jié),實(shí)現(xiàn)安全
            加載有用的類文件,不需要的不加載
            校驗(yàn)字節(jié)碼,查看允許的操作
             查看代碼和虛擬機(jī)的特性是否相符
             查看代碼是否有破壞性
             查看是否有違規(guī)操作,如越界
             查看類型是否匹配,類型轉(zhuǎn)換是否能正確執(zhí)行
             
          源程序:
           package mypack;  //相當(dāng)于一個(gè)目錄
           
           public class HelloWorld{
            public static void main(String[] args){
             System.out.println(“Hello World”);
            }
           }
           注:
            1、文件名必須和public修飾的類名一致,以.java作為文件后綴,如果定義的類不是public的,則文件名與類名可以不同。
            2、一個(gè).java文件中可以有多個(gè)class,但是只有一個(gè)public修飾的類。
            3、java源代碼文件編譯后,一個(gè)類對應(yīng)生成一個(gè).class文件
            4、一個(gè)java應(yīng)用程序應(yīng)該包含一個(gè)main()方法,而且其簽名是固定的,它是應(yīng)用程序的入口方法,可以定義在任意一個(gè)類中,不一定是public修飾的類
            編譯:javac -d . HelloWorld.java
             含有包的類,在編譯的時(shí)候最好用上面的格式,-d指的是讓該類生成的時(shí)候按照包結(jié)構(gòu)去生成," . "指的是在當(dāng)前路徑下生成
             如果不用上面的格式,也可以用javac HelloWorld.java,但是需要注意的是包結(jié)構(gòu)就要由自己去建立,然后將生成的.class文件放到該目錄下
            執(zhí)行:java mypack.HelloWorld
             將字節(jié)碼文件交給Java虛擬機(jī)去解釋執(zhí)行
             需要注意的事,必須使用包名.類名去解釋執(zhí)行
             
          包(package):把源文件放在目錄下
           由于工程的需要,將不同的源文件放在不同的目錄下,從而引入了包。
           包可以看作就是一個(gè)存放java源文件的目錄。
           在源碼中聲明一個(gè)包名:package p;(只能放在第一行,且最多只能是一行)
           如果指定多層包,那么在包名之間我們可以用.作為分隔符:package p1.p2.p3.p4;
           用“javac HelloWorld.java –d 絕對路徑”,編譯后生成的字節(jié)碼文件就會(huì)放在指定的包結(jié)構(gòu)下
           執(zhí)行該程序需要用" java 包名.類名 "
           引進(jìn)包中的某個(gè)類:import 包名.類名;
           引進(jìn)包中的所有類:import 包名.*;
             
          注釋:
           // 單行注釋, 到本行結(jié)束的所有字符會(huì)被編譯器忽略
           /* */ 多行注釋,  在/*  */之間的所有字符會(huì)被編譯器忽略
           /**  */   文檔注釋, java特有的,在/**  */之間的所有字符會(huì)被編譯器忽略
           可以用javadoc把java源程序中這種注釋抽取出來形成html頁面(只有寫在包,類,屬性,方法,構(gòu)造器,引入之前的注釋才可以進(jìn)行抽取)
              
          標(biāo)識(shí)符:
           命名規(guī)則:
            (1) 由字母、數(shù)字、下劃線、$組成,不能以數(shù)字開頭
            (2) 大小寫敏感
            (3) 不得使用java中的關(guān)鍵字和保留字
           
           關(guān)鍵字:都是小寫的,jdk1.2多了strictfp(經(jīng)準(zhǔn)浮點(diǎn)型),關(guān)鍵字 jdk1.4多了assert(斷言)關(guān)鍵字,  jdk1.5多了enum(枚舉) 關(guān)鍵字
            隨著學(xué)習(xí)進(jìn)度,會(huì)慢慢接觸到的
            true、false、null嚴(yán)格說不應(yīng)該算關(guān)鍵字,應(yīng)稱其為保留字更合適
           
           習(xí)慣:
            (1) 標(biāo)識(shí)符要符合語義信息
            (2) 包名所有字母小寫
            (3) 類名每個(gè)單詞首字母大寫,其它小寫 //TarenaStudent
            (4) 變量和方法:第一個(gè)單詞小寫,從第二個(gè)單詞開始首字母大寫 //tarenaStudent
            (5) 常量:所有字母大寫,每個(gè)單詞之間用" _ "連接
            
          基本數(shù)據(jù)類型:8種
           1) 整型
            byte       1B  8位       -128到127
            short      2B  16位      -2^15到(2^15)-1
            int          4B  32位      -2^31到(2^31)-1
            long        8B  64位      -2^63到(2^63)-1
           2) 浮點(diǎn)類型
            float        4B   32位      
            double     8B   64位
           3) 字符類型
              char       2B 16位  
           4) 布爾型  1B
            boolean    false/true
            
           注:
            1、Java中的自動(dòng)類型提升問題。
             1)、正向過程:從低字節(jié)到高字節(jié)可以自動(dòng)轉(zhuǎn)換。
              byte->short->int->long->float->double
             2)、逆向過程:從高字節(jié)到低字節(jié)用強(qiáng)制類型轉(zhuǎn)換。
              例:int a = (int)4.562;
              注:逆向轉(zhuǎn)換將丟失精度。
             2、boolean:只有true和false。
             3、char:Java中用" \u四位十六進(jìn)制的數(shù)字 (即使在注釋中出現(xiàn)\u,后面如果跟的不是4個(gè)數(shù)字,也會(huì)報(bào)錯(cuò))"表示將字符轉(zhuǎn)換成對應(yīng)的unicode編碼,字符類型要用單引號(hào)括起來。
             4、黙認(rèn)浮點(diǎn)類型為double,float數(shù)據(jù)類型有一個(gè)后綴為" f "或" F "。
             5、long類型有一個(gè)后綴,為" l " 或者" L "
           
          引用數(shù)據(jù)類型:
           類、接口、數(shù)組
           引用類型 變量名 = new 引用類型名(參數(shù));  //new后面一般跟的都是類的構(gòu)造器
           成員:寫在類體括號(hào)里面的
           
          內(nèi)存空間的分配:
           內(nèi)存分為:
            棧:存放簡單數(shù)據(jù)類型變量(值和變量名都存在棧中),存放引用數(shù)據(jù)類型的變量名以及它所指向的實(shí)例的首地址
            堆:存放引用數(shù)據(jù)類型的實(shí)例

          posted @ 2008-10-14 19:44 礦礦 閱讀(434) | 評(píng)論 (0)編輯 收藏
            2008年10月9日

           

          在中國,做軟件是當(dāng)今最時(shí)髦的事情,但做軟件早已不僅僅是商業(yè),而已經(jīng)上升為一門藝術(shù);早已經(jīng)不是真正搞軟件的人獨(dú)占的地盤,而是融入房地產(chǎn)商、硬件廠商、服務(wù)商、各類投機(jī)者等三教九流無所不包的社會(huì)大棋局。  顯然,這是一次幾十年不遇的政策機(jī)遇,其最大價(jià)值不在于真正的軟件產(chǎn)業(yè)本身,不在于軟件業(yè)務(wù)本身。因?yàn)檎嬲闹袊浖袌霈F(xiàn)在撐死也就200個(gè)億,而且大部分(2/3以上)由國外軟件公司所占有。但是,這次以軟件為名義的熱潮,其調(diào)動(dòng)和轉(zhuǎn)移的財(cái)富和資源,是千億甚至萬億計(jì)的,是軟件業(yè)本身的1~2個(gè)數(shù)量級(jí)以上,甚至也是幾年前互聯(lián)網(wǎng)熱潮的2~3個(gè)數(shù)量級(jí)以上。這是所有試圖把握軟件機(jī)遇的人,必須首先判明的方向性問題。
            我們借用圍棋的術(shù)語,可以把商機(jī)劃分為“金角銀邊草肚皮”,鮮明地分析如下:
            1、金角:最軟的高科技和最土的房地產(chǎn),鮮花插牛糞也好,天造一雙地配一對也好,反正今后今年他們都將如膠似漆!以軟件的名義,全國各省市,各區(qū)縣都將有成千上萬畝的土地紛紛成為軟件園,這無疑是房地產(chǎn)的大好機(jī)遇。因此,各地的軟件園和軟件學(xué)院,以及其他以軟件名義騰出的地皮,是這場軟件熱潮的價(jià)值核心。
            2、銀邊:政策效應(yīng)的最根本特點(diǎn)就是全國上下會(huì)爭先恐后,一齊跟進(jìn)。上上下下都會(huì)響應(yīng)號(hào)召,出臺(tái)各種扶持政策。包括稅收減免、資金投入以及其他優(yōu)先政策,都可以形成不菲的政策資源。這些資源利用得當(dāng)也可以及時(shí)轉(zhuǎn)化為真金白銀。因此,如果幾年之內(nèi),全國的硬件公司、IT服務(wù)公司甚至其他行業(yè)的公司,全部或者大多都轉(zhuǎn)變成軟件公司,你也不要大驚小怪。只要真正有利益。軟件業(yè)全國上下大繁榮,也是可以期待的。當(dāng)然,這是中國“特色”的軟件業(yè),是遠(yuǎn)遠(yuǎn)超越了國際上一般標(biāo)準(zhǔn)的軟件概念。
            3、草肚皮:大獲其利的很少是真正的軟件公司。因?yàn)槟切┮婚T心思搞軟件的人,大多笨手笨腳。熱潮之下,供需嚴(yán)重失衡,軟件人才幾年后很可能淪為青菜蘿卜一樣。不過,那些真正一頭扎進(jìn)軟件,真的做成軟件公司,也可能不錯(cuò)的。雖然,隨著軟件公司迅速繁衍,真的假的都來爭奪有限的市場,競爭進(jìn)一步激化,十分辛苦。但是,現(xiàn)在哪一行不辛苦?如果定位準(zhǔn)確,真的能夠一不留神做成、做大,然后融資上市,也是一步登天。
            由此,所有趕潮軟件的人,從高到低,可以分為三類:最上等是“為地皮而軟件”,中間是“為政策而軟件”,最下等是“為軟件而軟件”,構(gòu)成了食物鏈的金字塔。與國內(nèi)其他行業(yè)的政策造市的基本規(guī)律沒有本質(zhì)差異。
            面對軟件熱潮中的一些不和諧現(xiàn)象,我們沒有必要只從消極和負(fù)面的角度來評(píng)判。畢竟,在這股熱潮中,假作真時(shí)假也真,軟件業(yè)之外的龐大資源肯定會(huì)有一小部分要轉(zhuǎn)化到軟件產(chǎn)業(yè)。由于資源總量龐大,有百分之一或者百分之幾的轉(zhuǎn)化,對于軟件業(yè)來說,就是“久旱逢甘雨”,就是極大的支持。比如以國內(nèi)軟件園圈地最為成功的托普為例,它在全國的幾十個(gè)軟件園都是不錯(cuò)的房地產(chǎn)項(xiàng)目,運(yùn)作得當(dāng),利潤十分豐厚。拿出一小部分利潤來投入軟件,補(bǔ)貼軟件,幾年以后一不留神也會(huì)“培育”出真正的軟件業(yè)務(wù)。畢竟,大家打的都是“軟件”的旗號(hào),完全沒有軟件,這個(gè)美妙的游戲也是難以為繼的。這一切總比那些純粹的房地產(chǎn)商要好一些!
            因此,吃著房地產(chǎn)的剩飯,軟件也可能一點(diǎn)點(diǎn)長大成人。走出過門,走向世界;挑戰(zhàn)微軟,打敗印度,也不是完全沒有可能。市場就是一個(gè)追逐利益最大化的棋局,消極的批評(píng)作用和意義不大。不如,我們正視現(xiàn)實(shí),承認(rèn)積極、正面的效應(yīng),坦然應(yīng)對這場勢不可當(dāng)?shù)拇鬅岢薄?
            總之,政策已經(jīng)為我們布好了巨大的棋盤,至于如何布局和下子,那就是一個(gè)各顯其能的時(shí)候。我們當(dāng)然真誠希望,那些真正有心推動(dòng)中國軟件業(yè)發(fā)展的人士,能夠認(rèn)清形勢,放開思路。在這場大規(guī)模的財(cái)富與資源轉(zhuǎn)移中,不要太固守成見,應(yīng)放開手腳,爭取獲得盡可能多的利益,使中國軟件得到更好的推動(dòng)。
          posted @ 2008-10-09 19:01 礦礦 閱讀(204) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  下一頁
          主站蜘蛛池模板: 扶余县| 保山市| 惠东县| 鄯善县| 鲁甸县| 涪陵区| 长宁区| 卢湾区| 衡阳市| 田林县| 锡林浩特市| 开江县| 子长县| 沙洋县| 义乌市| 仲巴县| 平安县| 北宁市| 郎溪县| 宜良县| 茌平县| 通化市| 泾阳县| 绩溪县| 吐鲁番市| 北碚区| 乌海市| 鹰潭市| 喀什市| 宁都县| 吐鲁番市| 林甸县| 抚宁县| 正阳县| 辛集市| 乐昌市| 上思县| 蒙自县| 阜康市| 杨浦区| 武川县|