隨筆-22  評論-6  文章-17  trackbacks-0
            2005年12月9日
          帕金森定律

            美國著名歷史學(xué)家諾斯古德-帕金森通過長期調(diào)查研究,寫了一本名叫《帕金森定律》的書,他在書中闡述了機構(gòu)人員膨脹的原因及后果:一個不稱職的官員,可能有三條出路。第一是申請退職,把位子讓給能干的人;第二是讓一位能干的人來協(xié)助自己工作;第三是任用兩個水平比自己更低的人當(dāng)助手。

            這第一條路是萬萬走不得的,因為那樣會喪失許多權(quán)力;第二條路也不能走,因為那個能干的人會成為自己的對手;看來只有第三條路最適宜。于是,兩個平庸的助手分擔(dān)了他的工作,他自己則高高在上發(fā)號施令。兩個助手既無能,也就上行下效,再為自己找兩個無能的助手。如此類推,就形成了一個機構(gòu)臃腫、人浮于事、相互扯皮、效率低下的領(lǐng)導(dǎo)體系。

            苛希納定律

            西方管理學(xué)中有一條著名的苛希納定律:如果實際管理人員比最佳人數(shù)多兩倍,工作時間就要多兩倍,工作成本就要多四倍;如果實際管理人員比最佳人數(shù)多三倍,工作時間就要多三倍,工作成本就要多六倍。

            苛希納定律告訴我們,在管理上并不是人多力量大,管理人員越多,工作效率未必就會越高??料<{定律要求我們,要認(rèn)真研究并找到一個最佳人數(shù),以最大限度地減少工作時間,降低工作成本。

            馬蠅效應(yīng)

            林肯少年時和他的兄弟在肯塔基老家的一個農(nóng)場里犁玉米地,林肯吆馬,他兄弟扶犁,而那匹馬很懶,慢慢騰騰,走走停停。可是有一段時間馬走得飛快。林肯感到奇怪,到了地頭,他發(fā)現(xiàn)有一只很大的馬蠅叮在馬身上,他就把馬蠅打落了??吹今R蠅被打落了,他兄弟就抱怨說:“哎呀,你為什么要打掉它,正是那家伙使馬跑起來的嘛!”

            沒有馬蠅叮咬,馬慢慢騰騰,走走停停;有馬蠅叮咬,馬不敢怠慢,跑得飛快。這就是馬蠅效應(yīng)。馬蠅效應(yīng)給我們的啟示是:一個人只有被叮著咬著,他才不敢松懈,才會努力拼搏,不斷進步。

            “南風(fēng)”法則

            “南風(fēng)”法則也稱“溫暖”法則,源于法國作家拉封丹寫過的一則寓言:北風(fēng)和南風(fēng)比威力,看誰能把行人身上的大衣脫掉。北風(fēng)首先來一個冷風(fēng)凜冽寒冷刺骨,結(jié)果行人為了抵御北風(fēng)的侵襲,便把大衣裹得緊緊的。南風(fēng)則徐徐吹動,頓時風(fēng)和日麗,行人因為覺得春暖上身,始而解開紐扣,繼而脫掉大衣,南風(fēng)獲得了勝利。

            這則寓言形象地說明了一個道理:溫暖勝于嚴(yán)寒。領(lǐng)導(dǎo)者在管理中運用“南風(fēng)”法則,就是要尊重和關(guān)心下屬,以下屬為本,多點“人情味”,盡力解決下屬日常生活中的實際困難,使下屬真正感受到領(lǐng)導(dǎo)者給予的溫暖,從而激發(fā)出工作的積極性。

            酒與污水定律

            酒與污水定律是指,如果把一匙酒倒進一桶污水中,你得到的是一桶污水;如果把一匙污水倒進一桶酒中,你得到的還是一桶污水。

            在任何組織里,都存在幾個難弄的人物,他們存在的目的似乎就是為了把事情搞糟。最糟糕的是,他們像果箱里的爛蘋果一樣,如果你不及時處理,它會迅速傳染,把果箱里其他的蘋果也弄爛。“爛蘋果”的可怕之處在于它那驚人的破壞力。一個正直能干的人進入一個混亂的部門可能被吞沒,而一個無德無才者能很快將一個高效的部門變成一盤散沙。一個能工巧匠花費時日精心制作的陶瓷品,一頭驢子一秒鐘就能將它毀壞掉。
          posted @ 2007-11-27 14:18 surffish 閱讀(373) | 評論 (0)編輯 收藏

           ?。?、WINKEY+D:這是高手最常用的第一快捷組合鍵(木頭按:也是我最喜歡用的哦,好像有點自詡為高手)。這個快捷鍵組合可以將桌面上的所有窗口瞬間最小化,無論是聊天的窗口還是游戲的窗口……只要再次按下這個組合鍵,剛才的所有窗口都回來了,而且激活的也正是你最小化之前在使用的窗口!

           ?。病INKEY + F:不用再去移動鼠標(biāo)點“開始→搜索→文件和文件夾”了,在任何狀態(tài)下,只要一按WINKEY+F就會彈出搜索窗口。

            3、WINKEY + R:在我們的文章中,你經(jīng)常會看到這樣的操作提示:“點擊‘開始→運行’,打開‘運行’對話框……”。其實,還有一個更簡單的辦法,就是按WINKEY + R!

           ?。?、ALT + TAB :如果打開的窗口太多,這個組合鍵就非常有用了,它可以在一個窗口中顯示當(dāng)前打開的所有窗口的名稱和圖標(biāo),選中自己希望要打開的窗口,松開這個組合鍵就可以了。而ALT+TAB+SHIFT鍵則可以反向顯示當(dāng)前打開的窗口。

            5、WINKEY + E:當(dāng)你需要打開資源管理器找文件的時候,這個快捷鍵會讓你感覺非?!八?!再也不用騰出一只手去摸鼠標(biāo)了!
          ?????????6、WINKEY+L,鎖定計算機

          小提示:
            WINKEY指的是鍵盤上刻有Windows徽標(biāo)的鍵。WINKEY主要出現(xiàn)在104鍵和107鍵的鍵盤中。104鍵盤又稱Win95鍵盤,這種鍵盤在原來101鍵盤的左右兩邊、Ctrl和Alt鍵之間增加了兩個Windwos鍵和一個屬性關(guān)聯(lián)鍵。107鍵盤又稱為Win98鍵盤,比104鍵多了睡眠、喚醒、開機等電源管理鍵,這3個鍵大部分位于鍵盤的右上方。
          posted @ 2007-02-15 15:30 surffish 閱讀(165) | 評論 (0)編輯 收藏
          不論你是單一團隊的領(lǐng)導(dǎo)者還是多個團隊的管理人,團隊管理工作都是你職權(quán)范圍內(nèi)一個重要的組成部分。在今日,集多重技術(shù)于一身的工作方法已逐漸取代階層式的、缺乏彈性的傳統(tǒng)工作體制,團隊合作因而很快就成為了一種很受歡迎的工作方式。對于每一位參與團隊管理工作的人而言,《團隊管理》是一本不可或缺的重要讀物。它向你提供了達成計劃所需的技巧、建立團隊成員間的信任、激發(fā)團隊最大的潛能等方面的知識,為你能專業(yè)化地管理好你的團隊創(chuàng)造了有利條件。另外,全書還散布了101條簡明提示,為你提供重要而實用的訊息。后半部分有個自我評估練習(xí),使你能正確地評估自己的領(lǐng)導(dǎo)能力,并針對自己的不足加以改進。

          了解團隊運作

            團隊合作是所有成功管理的根基。無論你是新手還是資深管理人,對你而言,管理好團隊都是重要且具激勵性的挑戰(zhàn)。

          1.切記:每位成員都能為團隊作出一些貢獻。

          2.謹(jǐn)慎地設(shè)定團隊目標(biāo),且認(rèn)真嚴(yán)肅地對待它們。

          3.切記成員間要彼此扶持。

          4.將長程目標(biāo)打散成許多短程計劃。

          5.為每個計劃設(shè)定明確的期限。

          6.盡早決定何種形態(tài)的團隊適合你的目標(biāo)。

          7.努力與其它團隊的成員建立強有力的緊密關(guān)系。

          8.找一位可提升團隊工作士氣的重量級人物。

          9.時時提醒團隊成員:他們都是團隊的一份子。

          10.將團隊的注意力集中在固定可衡量的目標(biāo)上。

          11.利用友誼的強大力量強化團隊。

          12.選擇領(lǐng)導(dǎo)者時要把握用人唯才原則。

          13.領(lǐng)導(dǎo)者需具備強烈的團隊使命感。

          14.獎賞優(yōu)異的表現(xiàn),但絕不姑息錯誤。

          15.記住每位團隊成員看事情的角度都不一樣。

          16.征召團隊成員時,應(yīng)注重他們的成長潛能。

          17.密切注意團隊成員缺少的相關(guān)經(jīng)驗。

          18.應(yīng)使不適任的成員退出團隊。

          19.找到能將人際關(guān)系處理得很好的人,并培養(yǎng)他們。

          設(shè)立一支團隊

            成立一支團隊是領(lǐng)導(dǎo)者的主要工作。確保你的團隊有清楚明確的目的和足夠達成目標(biāo)的資源。要以開放和公正無私的態(tài)度對待團隊成員。

          20.設(shè)定具挑戰(zhàn)性的目標(biāo)須根據(jù)限期來考量是否合理。

          21.設(shè)定目標(biāo)時,考量個別成員的工作目標(biāo)。

          22.計劃的失敗危及整體計劃的成功。

          23.堅持得到信息技術(shù)支持,它能為你提供確實需要的東西。

          24.對待團隊外的顧問要如同對待團隊成員一般。

          25.讓團隊的贊助者隨時知道工作進展情形。

          26.除非你確定沒有人能夠勝任,否則應(yīng)避免“事必躬親”。

          27.不要委托不必要的工作,最好將其去除掉。

          28.賦予團隊自己作決策的權(quán)力。

          29.鼓勵團隊成員正面積極的貢獻。

          30.肯定、宣揚和慶祝團隊每次的成功。

          31.找到易于讓成員及團隊了解每日工作進度的展現(xiàn)方式。

          32.鼓勵成員之間建立工作上的伙伴關(guān)系。

          33.鼓勵天生具有領(lǐng)導(dǎo)才能的人,并引導(dǎo)和培養(yǎng)他們的領(lǐng)導(dǎo)技巧。

          34.絕對不能沒有解釋就駁回團隊的意見,與此相反,解釋要坦白,理由要充分。

          35.確定團隊和客戶經(jīng)常保持聯(lián)系。

          36.以自信肯定的態(tài)度讓團隊知道誰當(dāng)家,但要預(yù)防予人來勢洶洶的感覺。

          37.想辦法給新團隊留下一個實時的好印象,但切忌操之過急。

          38.倘若你要求別人的建議,抱持的心態(tài)不能只是歡迎就行了,也要依循建議有所行動。

          提升團隊效率

            團隊要達到應(yīng)有的效率,唯一的條件是每個成員都要學(xué)會集中力量。你必須了解團隊的能力,以確保團隊的成功。

          39.協(xié)助團隊找出方法以改變有礙任務(wù)推展的團體行為。

          40.找出可建設(shè)性地利用沖突的方法。

          41.記住要在工作中穿插安排娛樂調(diào)劑身心──這是每個人應(yīng)得的福利。

          42.若有計劃出錯,一定要作全面性、公開化的分析。

          43.如果你希望團隊成員有問題時能毫不猶疑地找你談,就要實施“開門政策”。

          44.要求提出問題的人解決問題。

          45.安排正式的和非正式的會面,討論團隊的工作進展。

          46.使用不帶感情只問事實的態(tài)度,是化解紛爭的最好方法。

          47.保持團隊成員間的熟稔,以易于溝通。

          48.設(shè)立交誼場所,讓團隊成員可作非正式的碰面交談。

          49.鼓勵同事間自由的溝通活動。

          50.建立最適合的通訊科技系統(tǒng),并經(jīng)常更新。

          51.實施會議主席輪流制,讓每個人都有機會主持會議。

          52.盡可能多地授權(quán)給團隊成員。

          53.事先于會前發(fā)出議程,預(yù)留時間給與會者準(zhǔn)備。

          54.培養(yǎng)所有對團隊有益的關(guān)系。

          55.努力保持團隊內(nèi)外關(guān)系的均衡與平穩(wěn)。

          56.確定所有相關(guān)人士都能聽到、了解好消息。

          57.倘有麻煩在團隊關(guān)系中發(fā)酵蘊釀,要盡快處理。

          58.安排團隊與機構(gòu)的其它部門作社交聯(lián)誼。

          59.找出你與“大佬”保持聯(lián)系的最佳通訊科技。

          60.要對你在團隊或辦公室外接觸過的重要人士作聯(lián)系記錄。

          61.謹(jǐn)慎分派角色以避免任務(wù)重復(fù)。

          62.找尋建議中的精華,且絕不在公開場合批評任何建議。

          63.一定要找有經(jīng)驗的人解決問題。

          64.分析團隊成員每個人所扮演的角色。

          65.腦力激發(fā)出的意見,就算不采用,亦不得輕視。否則,會打擊人的積極性,創(chuàng)意的流動也會因此停止。

          66.公平對待每個成員才能避免怨恨。

          67.確定團隊成員真正有錯之前,都須視他們沒有錯。

          68.告訴同事他們做得很好,這有助于激勵團隊士氣。

          69.尊重每一位成員,包括那些給你制造麻煩的人。

          70.避免和團隊成員有直接的沖突。

          71.記住采用對事不對人的處事態(tài)度。

          72.確定整個團隊都能夠從解決問題中學(xué)習(xí)經(jīng)驗。

          73.先選擇完成一些規(guī)模大的、可快速達成及有成就感的任務(wù),以激勵成員再接再勵。

          74.確信團隊成員皆了解團隊中的其它角色。

          75.計算品質(zhì)的成本之前,先計算失敗的成本。

          76.針對每筆預(yù)算及每項團隊行動計劃,設(shè)定重大的改進目標(biāo)。

          為未來努力

          為團隊設(shè)定新的、更高的挑戰(zhàn)目標(biāo)是團隊工作中最令人興奮的事情之一??蛇\用一些適當(dāng)?shù)募记?,推動團隊向更大、更好的目標(biāo)前進。

          77.告知團隊每位成員,在設(shè)定的標(biāo)準(zhǔn)中有哪些評量的項目。

          78.確定所有改善措施及新訂目標(biāo)都持續(xù)進行著。

          79.召開檢討會議前傳閱所有相關(guān)資料及資料。

          80.開檢討會時一定要避諱人身攻擊。

          81.記住關(guān)系會隨時間改變。

          82.避開低估或忽視壞消息的陷井。

          83.每天結(jié)束時自問團隊今天是否又向前跨出了一步。

          84.傾聽受訓(xùn)者關(guān)于訓(xùn)練課程的回饋意見。

          85.找到有最好設(shè)備的最佳訓(xùn)練場所。

          86.聘請顧問設(shè)立公司內(nèi)部的訓(xùn)練課程。

          87.利用移地訓(xùn)練時的用餐時間作非正式的計劃。

          88.每位團隊成員都必須參與設(shè)定目標(biāo)的工作,以促進團隊合作及達成共識。

          89.允許團隊自行決定達成目標(biāo)的方法,可激勵團隊努力工作。

          90.確定目標(biāo)能激發(fā)團隊的斗志,如果不行,請改變目標(biāo)。

          91.一支沒有“嚴(yán)峻”目標(biāo)的團隊,工作表現(xiàn)將不如接受過此類考驗的團隊。

          92.設(shè)定獎勵標(biāo)準(zhǔn)時,允許團隊成員有發(fā)言權(quán)。

          93.避免使用名次表,因為落后的團隊成員將會感到自尊心受創(chuàng)。

          94.指定某人監(jiān)視市場上每一個相關(guān)變化。

          95.隨時準(zhǔn)備作改變,甚至計劃的根本要素亦包含在改變的范圍內(nèi)。

          96.記住有某些人很害怕變革。

          97.尋找能推動改革的團隊成員。

          98.每隔一段時間作一次生涯發(fā)展的評量。

          99.記?。汗膭顖F隊成員即是在幫助團隊。

          100.與團隊同事就生涯規(guī)劃達成一致意見,并給他們提供必要的協(xié)助。

          101.團隊解散后仍舊要與團隊成員保持聯(lián)系,因為你可能還會與他們再次合作

          posted @ 2006-09-21 08:05 surffish 閱讀(206) | 評論 (0)編輯 收藏

          LEFT JOIN 和 RIGHT JOIN 運算

          用于 FROM 子句時,把源表記錄組合起來。

          語法

          FROM1 [ LEFT | RIGHT ] JOIN2
          ????ON 1.字段1compopr 2. 字段2

          LEFT JOIN 及 RIGHT JOIN 運算可分為以下幾個部分:

          部分 說明
          table1, table2 記錄被組合的表的名稱。
          field1, field2 被聯(lián)接的字段的名稱。且這些字段必須有相同的數(shù)據(jù)類型及包含相同類型的數(shù)據(jù),但它們不需要有相同的名稱。
          compopr 任何的關(guān)系比較運算子:"=," "<," ">," "<=," ">=," 或 "<>."

          說明

          用 LEFT JOIN 運算 創(chuàng)建左邊外部聯(lián)接.左邊外部聯(lián)接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中并沒有相符值的記錄。

          用RIGHT JOIN 運算 創(chuàng)建 右邊外部聯(lián)接.右邊外部聯(lián)接將包含了從第二個(右邊)開始的兩個表中的全部記錄,即使在第一個(左邊)表中并沒有匹配值的記錄。

          例如,可以使用 LEFT JOIN 與部門(左邊)及員工(右邊)表來選擇所有的部門,包含了沒有分配到員工的部門。可以使用 RIGHT JOIN 選擇所有的員工,包含了沒有分配到部門的員工。

          下列示例顯示如何在類標(biāo)識符字段中聯(lián)接類表及產(chǎn)品表。查詢將會列出所有種類的列表,包含那些沒有產(chǎn)品在其中的種類:

          SELECT CategoryName,

          ProductName

          FROM Categories LEFT JOIN Products

          ON Categories.CategoryID = Products.CategoryID;

          在本例中,CategoryID 是聯(lián)接的字段,但由于它不包含在 SELECT 語句中,因此,也不包含在查詢結(jié)果中。要包含聯(lián)接的字段,請在 SELECT 語句中輸入字段名 — 在這個示例中為 Categories.CategoryID。


          注意

          欲創(chuàng)建只包含聯(lián)接字段中數(shù)據(jù)相同的記錄的查詢,請用 INNER JOIN 運算。

          • 在 INNER JOIN 之中可以寫一個嵌套的 LEFT JOIN 或一個 RIGHT JOIN,但是在一個 LEFT JOIN 或一個 RIGHT JOIN 之中不能寫嵌套的 INNER JOIN。請參閱 INNER JOIN 主題中有關(guān)使用嵌套的討論,從其中可獲知如何在其它聯(lián)接中編寫嵌套聯(lián)接的信息。
          • 可以鏈接多個 ON 子句。若需更多信息,請參閱在 INNER JOIN 主題中的子句鏈接的討論。

          若試圖聯(lián)接包含 MemoOLE Object數(shù)據(jù)的字段,會導(dǎo)致錯誤。


          請參閱
          FROM 子句 (Microsoft Jet SQL) UNION 運算 (Microsoft Jet SQL)
          INNER JOIN 運算 (Microsoft Jet SQL) ?

          示例

          LEFT JOIN 和 RIGHT JOIN 運算示例

          posted @ 2006-09-03 11:52 surffish 閱讀(242) | 評論 (0)編輯 收藏
          關(guān)閉msn,在開始->運行中分別輸入
          regsvr32 softpub.dll

          regsvr32 mssip32.dll

          regsvr32 intipki.dll

          regsvr32 MSXML3.dll

          11221399B
          再重新啟動msn即可
          posted @ 2006-08-21 08:03 surffish 閱讀(219) | 評論 (0)編輯 收藏
          1. 在業(yè)務(wù)層使用JDBC直接操作數(shù)據(jù)庫-最簡單,最直接的操作

          1)數(shù)據(jù)庫url,username,password寫死在代碼中
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String url="jdbc:oracle:thin:@localhost:1521:orcl";
          String user="scott";
          String password="tiger";
          Connection conn= DriverManager.getConnection(url,user,password);
          Statement stmt=conn.createStatement(
          ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          String sql="select * from test";
          ResultSet rs=stmt.executeQuery(sql);

          2)采用Facade和Command模式,使用DBUtil類封裝JDBC操作;
          數(shù)據(jù)庫url,username,password可以放在配置文件中(如xml,properties,ini等)。
          這種方法在小程序中應(yīng)用較多。

          2.DAO(Data Accessor Object)模式-松耦合的開始
          DAO = data + accessor + domain object

          例如User類-domain object (javabean)
          UserDAO類-accessor ,提供的方法getUser(int id),save(User user)內(nèi)包含了JDBC操作
          在業(yè)務(wù)邏輯中使用這兩個類來完成數(shù)據(jù)操作。

          使用Factory模式可以方便不同數(shù)據(jù)庫連接之間的移植。

          3.數(shù)據(jù)庫資源管理模式
          3.1 數(shù)據(jù)庫連接池技術(shù)
          資源重用,避免頻繁創(chuàng)建,釋放連接引起大大量性能開銷;
          更快的系統(tǒng)響應(yīng)速度;

          通過實現(xiàn)JDBC的部分資源對象接口( Connection, Statement, ResultSet ),可以使用Decorator設(shè)計模式分別產(chǎn)生三種邏輯資源對象: PooledConnection, PooledStatement和 PooledResultSet。


          一個最簡單地數(shù)據(jù)庫連接池實現(xiàn):
          public class ConnectionPool {

          private static Vector pools;
          private final int POOL_MAXSIZE = 25;
          /**
          * 獲取數(shù)據(jù)庫連接
          * 如果當(dāng)前池中有可用連接,則將池中最后一個返回;若沒有,則創(chuàng)建一個新的返回
          */
          public synchronized Connection getConnection() {
          Connection conn = null;
          if (pools == null) {
          pools = new Vector();
          }

          if (pools.isEmpty()) {
          conn = createConnection();
          } else {
          int last_idx = pools.size() - 1;
          conn = (Connection) pools.get(last_idx);
          pools.remove(last_idx);
          }

          return conn;
          }

          /**
          * 將使用完畢的數(shù)據(jù)庫連接放回池中
          * 若池中連接已經(jīng)超過閾值,則關(guān)閉該連接;否則放回池中下次再使用
          */
          public synchronized void releaseConnection(Connection conn) {
          if (pools.size() >= POOL_MAXSIZE)
          try {
          conn.close();
          } catch (SQLException e) {
          // TODO自動生成 catch 塊
          e.printStackTrace();
          } else
          pools.add(conn);
          }

          public static Connection createConnection() {
          Connection conn = null;
          try {
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String url = "jdbc:oracle:thin:@localhost:1521:orcl";
          String user = "scott";
          String password = "tiger";
          conn = DriverManager.getConnection(url, user, password);
          } catch (InstantiationException e) {
          // TODO自動生成 catch 塊
          e.printStackTrace();
          } catch (IllegalAccessException e) {
          // TODO自動生成 catch 塊
          e.printStackTrace();
          } catch (ClassNotFoundException e) {
          // TODO自動生成 catch 塊
          e.printStackTrace();
          } catch (SQLException e) {
          // TODO自動生成 catch 塊
          e.printStackTrace();
          }
          return conn;
          }
          }

          注意:利用getConnection()方法得到的Connection,程序員很習(xí)慣地調(diào)用conn.close()方法關(guān)閉了數(shù)據(jù)庫連接,那么上述的數(shù)據(jù)庫連接機制便形同虛設(shè)。在調(diào)用conn.close()方法方法時如何調(diào)用releaseConnection()方法?這是關(guān)鍵。這里,我們使用Proxy模式和java反射機制。

          public synchronized Connection getConnection() {
          Connection conn = null;
          if (pools == null) {
          pools = new Vector();
          }

          if (pools.isEmpty()) {
          conn = createConnection();
          } else {
          int last_idx = pools.size() - 1;
          conn = (Connection) pools.get(last_idx);
          pools.remove(last_idx);
          }

          ConnectionHandler handler=new ConnectionHandler(this);
          return handler.bind(con);
          }

          public class ConnectionHandler implements InvocationHandler {
          private Connection conn;
          private ConnectionPool pool;

          public ConnectionHandler(ConnectionPool pool){
          this.pool=pool;
          }

          /**
          * 將動態(tài)代理綁定到指定Connection
          * @param conn
          * @return
          */
          public Connection bind(Connection conn){
          this.conn=conn;
          Connection proxyConn=(Connection)Proxy.newProxyInstance(
          conn.getClass().getClassLoader(), conn.getClass().getInterfaces(),this);
          return proxyConn;
          }

          /* (非 Javadoc)
          * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
          */
          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          // TODO自動生成方法存根
          Object obj=null;
          if("close".equals(method.getName())){
          this.pool.releaseConnection(this.conn);
          }
          else{
          obj=method.invoke(this.conn, args);
          }

          return obj;
          }
          }

          在實際項目中,并不需要你來從頭開始來設(shè)計數(shù)據(jù)庫連接池機制,現(xiàn)在成熟的開源項目,如C3P0,dbcp,Proxool等提供了良好的實現(xiàn)。一般推薦使用Apache dbcp,基本使用實例:
          DataSource ds = null;
          try{
          Context initCtx = new InitialContext();
          Context envCtx = (Context) initCtx.lookup("java:comp/env");
          ds = (DataSource)envCtx.lookup("jdbc/myoracle");
          if(ds!=null){
          out.println("Connection is OK!");
          Connection cn=ds.getConnection();
          if(cn!=null){
          out.println("cn is Ok!");
          Statement stmt = cn.createStatement();
          ResultSet rst = stmt.executeQuery("select * from BOOK");
          out.println("

          rst is Ok!" + rst.next());
          while(rst.next()){
          out.println("

          BOOK_CODE:" + rst.getString(1));
          }
          cn.close();
          }else{
          out.println("rst Fail!");
          }
          }
          else
          out.println("Fail!");
          }catch(Exception ne){ out.println(ne);
          }


          3.2 Statement Pool
          普通預(yù)編譯代碼:
          String strSQL=”select name from items where id=?”;
          PreparedStatement ps=conn.prepareStatement(strSQL);
          ps.setString(1, “2”);
          ResultSet rs=ps.executeQuery();

          但是PreparedStatement 是與特定的Connection關(guān)聯(lián)的,一旦Connection關(guān)閉,則相關(guān)的PreparedStatement 也會關(guān)閉。
          為了創(chuàng)建PreparedStatement 緩沖池,可以在invoke方法中通過sql語句判斷池中還有沒有可用實例。

          4. 持久層設(shè)計與O/R mapping 技術(shù)
          1) Hernate:適合對新產(chǎn)品的開發(fā),進行封閉化的設(shè)計
          Hibernate 2003年被Jboss接管,通過把java pojo對象映射到數(shù)據(jù)庫的table中,采用了xml/javareflection技術(shù)等。3.0提供了對存儲過程和手寫sql的支持,本身提供了hql語言。
          開發(fā)所需要的文件:
          hibernate配置文件: hibernate.cfg.xml 或 hibernate.properties
          hibernate 映射文件: a.hbm.xml
          pojo類源文件: a.java  

          導(dǎo)出表與表之間的關(guān)系:
          a. 從java對象到hbm文件:xdoclet
          b. 從hbm文件到j(luò)ava對象:hibernate extension
          c. 從數(shù)據(jù)庫到hbm文件:middlegen
          d. 從hbm文件到數(shù)據(jù)庫:SchemaExport

          2)Iatis :適合對遺留系統(tǒng)的改造和對既有數(shù)據(jù)庫的復(fù)用,有很強的靈活性 3) Apache OJB:優(yōu)勢在于對標(biāo)準(zhǔn)的全面支持 4)EJB:適合集群服務(wù)器,其性能也不象某些人所詬病的那么差勁 5) JDO (java data object)
          設(shè)置一個Properties對象,從而獲取一個JDO的PersistenceManagerFactory(相當(dāng)于JDBC連接池中的DataSource),進而獲得一個PersistenceManager對象(相當(dāng)于JDBC中的Connection對象),之后,你可以用這個PersistenceManager對象來增加、更新、刪除、查詢對象。
          JDOQL是JDO的查詢語言;它有點象SQL,但卻是依照J(rèn)ava的語法的。

          5. 基于開源框架的Struts+Spring+Hibernate實現(xiàn)方案
          示例:這是一個3層架構(gòu)的web 程序,通過一個Action 來調(diào)用業(yè)務(wù)代理,再通過它來回調(diào) DAO類。下面的流程圖表示了MyUsers是如何工作的。數(shù)字表明了流程的先后順序,從web層(UserAction)到中間層(UserManager),再到數(shù)據(jù)層(UserDAO),然后返回。
          Spring是AOP, UserManager和UserDAO都是接口.
          1) web層(UserAction) :調(diào)用中間層的接口方法,將UserManager作為屬性注入。
          采用流行的Struts框架,雖然有很多人不屑一顧,但是這項技術(shù)在業(yè)界用的比較普遍,能滿足基本的功能,可以減少培訓(xùn)學(xué)習(xí)成本。
          2) 中間層(UserManager):將UserDAO作為屬性注入,其實現(xiàn)主要是調(diào)用數(shù)據(jù)層接口的一些方法;它處于事務(wù)控制中。
          采用Spring框架實現(xiàn),IOC與AOP是它的代名詞,功能齊全,非常棒的一個架構(gòu)。
          3) 數(shù)據(jù)層(UserDAO):實現(xiàn)類繼承HibernateDaoSupport類,在該類中可以調(diào)用getHibernateTemplate()的一些方法執(zhí)行具體的數(shù)據(jù)操作。
          采用Hibernate做O/R mapping,從種種跡象可以看出,Hibernate就是EJB3.0的beta版。 (轉(zhuǎn)載文章請保留出處:Java家(www.javajia.com))

          posted @ 2006-04-18 11:05 surffish 閱讀(264) | 評論 (0)編輯 收藏
          【品名】民間俗稱老婆,正式場合可稱妻子或夫人;古稱內(nèi)人,現(xiàn)亦可叫愛人。
          【成分】水、血液和脂肪類碳水化合物。
          【性狀】本品為細長條塊狀糖衣片,表面涂層一般為粉底、口紅等化妝物,除去後呈淺黃色,外觀與除去前略有差異;本品隨時間推移,形狀會有所改變,出現(xiàn)發(fā)胖、起皺等現(xiàn)象,但不影響繼續(xù)使用。
          【功能主治】主治單身恐懼癥及傳宗接代等頑疾,對失戀和相思病也有明顯效果。
          【用法用量】口服兼外用,一次限一片。對無效者,可暫時停用并向婚姻專家咨詢,或間隔一段時間後重復(fù)使用。
          【注意事項】本品僅適用于單身之成年男性。服用時 小心謹(jǐn)慎,細心觀察有無不良反應(yīng),如有必須馬上停止服用,沒有則可繼續(xù)使用。若忌煙酒等不良習(xí)慣,會使療效更佳。
          【規(guī)格】通常為45千克至55千克,特殊情況下亦有例外。
          【貯藏】常溫下妥善保存,室內(nèi)陰涼處最佳;如在室外,則 避免強烈陽光直射。 貯藏期間,尤忌隨意棄置一旁不管
          posted @ 2006-03-23 12:00 surffish 閱讀(268) | 評論 (0)編輯 收藏

          用java寫服務(wù)端代碼

          import java.io.*;
          import java.net.*;
          public class test {
            public test() {
            }
            public static final int PORT = 8080;
            public static final String ip = "10.194.111.222";

            public static void main(String[] args) throws IOException {
              ServerSocket s = new ServerSocket(51,2,InetAddress.getByName(ip));
              System.out.println("Started: " + s);
              try {
                // Blocks until a connection occurs:
                Socket socket = s.accept();
                try {
                  System.out.println(
                    "Connection accepted: "+ socket);
                  BufferedReader in =
                    new BufferedReader(
                      new InputStreamReader(
                        socket.getInputStream()));
                  // Output is automatically flushed
                  // by PrintWriter:
                  PrintWriter out =
                    new PrintWriter(
                      new BufferedWriter(
                        new OutputStreamWriter(
                          socket.getOutputStream())),true);
                  while (true) {
                    String str = in.readLine();
                    if (str.equals("END")) break;
                    System.out.println("Echoing: " + str);
                    out.println(str);
                  }
                // Always close the two sockets...
                } finally {
                  System.out.println("closing...");
                  socket.close();
                }
              } finally {
                s.close();
              }
            }
          }

          .net寫客戶端代碼
          private void button2_Click(object sender, System.EventArgs e)
            {
             try
             {
              stSend = new Socket ( AddressFamily.InterNetwork ,
               SocketType.Stream , ProtocolType.Tcp ) ;
              //初始化一個Socket實例
              IPEndPoint tempRemoteIP = new IPEndPoint(IPAddress.Parse("10.194.111.222"),51);
              //根據(jù)IP地址和端口號創(chuàng)建遠程終結(jié)點
              EndPoint epTemp =  ( EndPoint ) tempRemoteIP;
              stSend.Connect ( epTemp ) ;

             }
             catch ( Exception err)
             {
              string s = err.ToString();
             }
            }

          posted @ 2005-12-09 16:36 surffish 閱讀(1183) | 評論 (0)編輯 收藏

          1.工作區(qū): (顯隱)

          項目面板:ctrl + Alt + p (Project)
          設(shè)計面板: ctrl + Alt + c (content)
          結(jié)構(gòu)面板: ctrl + Alt + s (Structure)
          信息面板: ctrl + Alt + M (Message)
          狀態(tài)面板: ctrl + Alt + Z


          2.主面板:(代碼面板和設(shè)計面板)

          激活代碼模塊: ctrl + J (@1)
          參數(shù)提示信息的激活: ctrl + shift + H
          打開查詢、替換窗口: ctrl + F
          類的查詢: ctrl + -


          3.F 鍵的用法

          F1: 幫助快捷
          F4: 運行多行
          F5: 加入斷點
          F7: 當(dāng)遇到方法時會運行方法內(nèi)的代碼
          F8: 逐步運行代碼
          F12: 代碼面板和設(shè)計面板切換


          4. Shift 鍵的用法

          添加多個相同組件: 按shift鍵在選項上選取組件,把組件添加到窗口即可
          調(diào)整組件間間隔和對齊: 假設(shè)有組件JPanel 1/2/3;(要達到3個組件寬度相同,組件間隔相等,并且都是依據(jù)JPanel1左對齊),按shift鍵,用鼠標(biāo)選中需要調(diào)整的組件,(第一個選中的組件是其他的基準(zhǔn))然后右鍵。


          5: codeInsight 和 Codetemplates
          MemberInsight -- 根據(jù)當(dāng)前的代碼提示可用的類成員或方法(說明)
          ParameterInsight -- 提示當(dāng)前的方法需要使用的參數(shù)
          SymbolInsigh -- 查看當(dāng)前的變量、方法或者類的愿代碼。

          MemberInsight: ctrl + space 或 ctrl + H
          ParameterInsight: ctrl + shift + space 或 ctrl + shift + H
          SymbolInsight: ctrl + Enter 或 Alt + shift + H
          ClassInsight : ctrl + alt + space 或 ctrl + alt + H




          注: (@1):使用代碼功能:(ctrl + J)
          1、 在想要輸入代碼的位置輸入代碼摸板名,然后按 ctrl + J(開發(fā)人員可以用主菜單上的Tools/Editor/Templates命令來查看代碼摸板的名字)
          2、把光標(biāo)定位于想要輸入代碼的位置,然后按ctrl + J

          posted @ 2005-12-09 11:40 surffish 閱讀(293) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 浙江省| 宁南县| 龙泉市| 洛隆县| 玉田县| 六枝特区| 宁国市| 九龙坡区| 洪泽县| 专栏| 景宁| 武胜县| 岑巩县| 遂宁市| 肥东县| 鄂托克前旗| 莲花县| 屏东市| 武功县| 沈丘县| 呼伦贝尔市| 榆社县| 建瓯市| 荥经县| 武强县| 云安县| 收藏| 合肥市| 武平县| 宁乡县| 京山县| 循化| 阳山县| 曲松县| 平武县| 修水县| 邢台市| 恭城| 宜州市| 连城县| 平泉县|