sharky的點滴積累

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            56 隨筆 :: 104 文章 :: 10 評論 :: 0 Trackbacks

          #

          有空需要好好讀讀的書:
          《程序員修煉之道》
          《Effective Java 中文版》Java經(jīng)典之作
          《高級TCP/IP編程》雖然很老,但是很有價值。
          《Java Development with Spring Framework》








          --------------------------------------------------------------------------------

          很多人推薦的書,現(xiàn)在出了中文版
          s1095559.jpg


          經(jīng)典的J2ee design patterns方面的書
          s1371848.jpg


          -------------------
          很少看到關(guān)于寫CSS的書,不知道這本書給CSS設(shè)計帶來什么
          Zen:禪,我想是一些CSS設(shè)計的規(guī)律
          s1429062.jpg


          ---------------------------
          無意之間知道的書,看封面不錯,有空找來看看
          s1327824.jpg

          posted @ 2005-10-13 20:58 sharky的點滴積累 閱讀(149) | 評論 (0)編輯 收藏

          Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。
          
          方法 executeQuery 用于產(chǎn)生單個結(jié)果集的語句,例如 SELECT 語句。
          
          方法 executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。對于 CREATE TABLE 或DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
          
          方法 execute 用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。因為多數(shù)程序員不會需要該高級功能,所以本概述后面將在單獨一節(jié)中對其進行介紹。
          
          執(zhí)行語句的所有方法都將關(guān)閉所調(diào)用的 Statement 對象的當前打開結(jié)果集(如果存在)。這意味著在重新執(zhí)行 Statement 對象之前,需要完成對當前ResultSet 對象的處理。
          
          應(yīng)注意,繼承了 Statement 接口中所有方法的 PreparedStatement 接口都有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 對象本身不包
          SQL 語句,因而必須給 Statement.execute 方法提供 SQL 語句作為參數(shù)。PreparedStatement 對象并不將 SQL 語句作為參數(shù)提供給這些方法,因為它們已
          經(jīng)包含預(yù)編譯 SQL 語句。CallableStatement 對象繼承這些方法的
          PreparedStatement 形式。對于這些方法的 PreparedStatement 或CallableStatement 版本,使用查詢參數(shù)將拋出 SQLException。
          
          
          4.1.3 語句完成
          
          當連接處于自動提交模式時,其中所執(zhí)行的語句在完成時將自動提交或還原。語句在已執(zhí)行且所有結(jié)果返回時,即認為已完成。對于返回一個結(jié)果集的 executeQuery 方法,在檢索完 ResultSet 對象的所有行時該語句完成。對于方法executeUpdate,當它執(zhí)行時語句即完成。但在少數(shù)調(diào)用方法 execute 的情況中,在檢索所有結(jié)果集或它生成的更新計數(shù)之后語句才完成。
          
          有些 DBMS 將已存儲過程中的每條語句視為獨立的語句;而另外一些則將整個過程視為一個復(fù)合語句。在啟用自動提交時,這種差別就變得非常重要,因為它影響什么時候調(diào)用 commit 方法。在前一種情況中,每條語句單獨提交;在后一種情況中,所有語句同時提交。
          
          
          4.1.4 關(guān)閉 Statement 對象
          
          Statement 對象將由 Java 垃圾收集程序自動關(guān)閉。而作為一種好的編程風格,應(yīng)在不需要 Statement 對象時顯式地關(guān)閉它們。這將立即釋放 DBMS 資源,有助于避免潛在的內(nèi)存問題。
          
          
          4.1.5 Statement 對象中的 SQL 轉(zhuǎn)義語法
          
          Statement 可包含使用 SQL 轉(zhuǎn)義語法的 SQL 語句。轉(zhuǎn)義語法告訴驅(qū)動程序其中的代碼應(yīng)該以不同方式處理。驅(qū)動程序?qū)呙枞魏无D(zhuǎn)義語法,并將它轉(zhuǎn)換成特定數(shù)據(jù)庫可理解的代碼。這使得轉(zhuǎn)義語法與 DBMS 無關(guān),并允許程序員使用在沒有轉(zhuǎn)義語法時不可用的功能。
          
          
          轉(zhuǎn)義子句由花括號和關(guān)鍵字界定:
          
          {keyword . . . parameters . . . }
          
          該關(guān)鍵字指示轉(zhuǎn)義子句的類型,如下所示。
          
          
          escape 表示 LIKE 轉(zhuǎn)義字符
          
          字符“%”和“_”類似于 SQL LIKE 子句中的通配符(“%”匹配零個或多個字符,而“_”則匹配一個字符)。為了正確解釋它們,應(yīng)在其前面加上反斜杠(“”),它是字符串中的特殊轉(zhuǎn)義字符。在查詢末尾包括如下語法即可指定用作轉(zhuǎn)義字符的字符:
          
          {escape 'escape-character'}
          
          
          例如,下列查詢使用反斜杠字符作為轉(zhuǎn)義字符,查找以下劃線開頭的標識符名:
          
          stmt.executeQuery("SELECT name FROM Identifiers WHERE Id LIKE `\_%' {escape `'};
          
          fn 表示標量函數(shù)
          
          
          幾乎所有 DBMS 都具有標量值的數(shù)值、字符串、時間、日期、系統(tǒng)和轉(zhuǎn)換函數(shù)。要使用這些函數(shù),可使用如下轉(zhuǎn)義語法:關(guān)鍵字 fn 后跟所需的函數(shù)名及其參數(shù)。例如,下列代碼調(diào)用函數(shù) concat 將兩個參數(shù)連接在一起:
          
          {fn concat("Hot", "Java")};
          
          可用下列語法獲得當前數(shù)據(jù)庫用戶名:
          
          {fn user()};
          
          
          標量函數(shù)可能由語法稍有不同的 DBMS 支持,而它們可能不被所有驅(qū)動程序支持。各種 DatabaseMetaData 方法將列出所支持的函數(shù)。例如,方法getNumericFunctions 返回用逗號分隔的數(shù)值函數(shù)列表,而方法getStringFunctions 將返回字符串函數(shù),等等。
          
          驅(qū)動程序?qū)⑥D(zhuǎn)義函數(shù)調(diào)用映射為相應(yīng)的語法,或直接實現(xiàn)該函數(shù)。
          
          
          d、t 和 ts 表示日期和時間文字
          
          DBMS 用于日期、時間和時間標記文字的語法各不相同。JDBC 使用轉(zhuǎn)義子句支持這些文字的語法的 ISO 標準格式。驅(qū)動程序必須將轉(zhuǎn)義子句轉(zhuǎn)換成 DBMS 表示。
          
          例如,可用下列語法在 JDBC SQL 語句中指定日期:
          
          {d `yyyy-mm-dd'}
          
          
          在該語法中,yyyy 為年代,mm 為月份,而 dd 則為日期。驅(qū)動程序?qū)⒂玫葍r的特定于 DBMS 的表示替換這個轉(zhuǎn)義子句。例如,如果 '28- FEB-99' 符合基本數(shù)據(jù)庫的格式,則驅(qū)動程序?qū)⒂盟鎿Q {d 1999-02-28}。
          
          對于 TIME 和 TIMESTAMP 也有類似的轉(zhuǎn)義子句:
          
          {t `hh:mm:ss'}
          {ts `yyyy-mm-dd hh:mm:ss.f . . .'}
          
          TIMESTAMP 中的小數(shù)點后的秒(.f . . .)部分可忽略。
          
          
          call 或 ? = call 表示已存儲過程
          
          
          
          如果數(shù)據(jù)庫支持已存儲過程,則可從 JDBC 中調(diào)用它們,語法為:
          
          {call procedure_name[(?, ?, . . .)]}
          
          
          或(其中過程返回結(jié)果參數(shù)):
          
          {? = call procedure_name[(?, ?, . . .)]}
          
          
          方括號指示其中的內(nèi)容是可選的。它們不是語法的必要部分。
          
          輸入?yún)?shù)可以為文字或參數(shù)。有關(guān)詳細信息,參見 JDBC 指南中第 7 節(jié),“CallableStatement”。
          
          
          可通過調(diào)用方法 DatabaseMetaData.supportsStoredProcedures 檢查數(shù)據(jù)庫是否支持已存儲過程。
          
          
          
          oj 表示外部連接
          
          
          
          外部連接的語法為
          
          {oj outer-join}
          
          
          其中 outer-join 形式為
          
          table LEFT OUTER JOIN {table / outer-join} ON search-condition
          
          
          外部連接屬于高級功能。有關(guān)它們的解釋可參見 SQL 語法。JDBC 提供了三種DatabaseMetaData 方法用于確定驅(qū)動程序支持哪些外部連接類型:supportsOuterJoins、supportsFullOuterJoins 和supportsLimitedOuterJoins
          。
          
          
          方法 Statement.setEscapeProcessing 可打開或關(guān)閉轉(zhuǎn)義處理;缺省狀態(tài)為打開。當性能極為重要時,程序員可能想關(guān)閉它以減少處理時間。但通常它將出于打開狀態(tài)。應(yīng)注意: setEscapeProcessing 不適用于 PreparedStatement 對象,因為在調(diào)用該語句前它就可能已被發(fā)送到數(shù)據(jù)庫。有關(guān)預(yù)編譯的信息,參見PreparedStatement。
          
          
          4.1.6 使用方法 execute
          
          execute 方法應(yīng)該僅在語句能返回多個 ResultSet 對象、多個更新計數(shù)或ResultSet 對象與更新計數(shù)的組合時使用。當執(zhí)行某個已存儲過程或動態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時未知)時,有可能出現(xiàn)多個結(jié)果的情況,盡管這種情況很少見。例如,用戶可能執(zhí)行一個已存儲過程(使用 CallableStatement 對象 - 參見第 135 頁的 CallableStatement),并且該已存儲過程可執(zhí)行更新,然后執(zhí)行選擇,再進行更新,再進行選擇,等等。通常使用已存儲過程的人應(yīng)知道它所返回的內(nèi)容。
          
          因為方法 execute 處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。例如,假定已知某個過程返回兩個結(jié)果集,則在使用方法 execute 執(zhí)行該過程后,必須調(diào)用方法 getResultSet 獲得第一個結(jié)果集,然后調(diào)用適當?shù)膅etXXX 方法獲取其中的值。要獲得第二個結(jié)果集,需要先調(diào)用 getMoreResults方法,然后再調(diào)用 getResultSet 方法。如果已知某個過程返回兩個更新計數(shù),則首先調(diào)用方法 getUpdateCount,然后調(diào)用 getMoreResults,并再次調(diào)用getUpdateCount。
          
          對于不知道返回內(nèi)容,則情況更為復(fù)雜。如果結(jié)果是 ResultSet 對象,則方法execute 返回 true;如果結(jié)果是 Java int,則返回 false。如果返回 int,則意味著結(jié)果是更新計數(shù)或執(zhí)行的語句是 DDL 命令。在調(diào)用方法 execute 之后要做的第一件事情是調(diào)用 getResultSet 或 getUpdateCount。調(diào)用方法 getResultSet可以獲得兩個或多個 ResultSet 對象中第一個對象;或調(diào)用方法 getUpdateCount 可以獲得兩個或多個更新計數(shù)中第一個更新計數(shù)的內(nèi)容。
          
          當 SQL 語句的結(jié)果不是結(jié)果集時,則方法 getResultSet 將返回 null。這可能意味著結(jié)果是一個更新計數(shù)或沒有其它結(jié)果。在這種情況下,判斷 null 真正含義的唯一方法是調(diào)用方法 getUpdateCount,它將返回一個整數(shù)。這個整數(shù)為調(diào)用語句所影響的行數(shù);如果為 -1 則表示結(jié)果是結(jié)果集或沒有結(jié)果。如果方法getResultSet 已返回 null(表示結(jié)果不是 ResultSet 對象),則返回值 -1 表示沒有其它結(jié)果。也就是說,當下列條件為真時表示沒有結(jié)果(或沒有其它結(jié)果):
          
          ((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))
          如果已經(jīng)調(diào)用方法 getResultSet 并處理了它返回的 Resul
          posted @ 2005-10-12 20:24 sharky的點滴積累 閱讀(1033) | 評論 (0)編輯 收藏

          首先我們要明白用response.sendRedirect做轉(zhuǎn)向的原理,它其實是向瀏覽器發(fā)送一個特殊的Header,
          然后由瀏覽器來做轉(zhuǎn)向,轉(zhuǎn)到指定的頁面,所以用sendRedirect時,瀏覽器的地址欄上可以看到地址的變化。
          用則不同,它是直接在server做的,瀏覽器并不知道,也不和瀏覽器打交道,
          這從瀏覽器的地址并不變化可以看出。
          所以使用response.sendRedirect時就需要注意以下兩點:
          1,在使用response.sendRedirect時,前面不能有HTML輸出。
          這并不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器。事實上現(xiàn)在的server都有cache機制
          ,一般在8K(我是說JSP  SERVER),這就意味著,除非你關(guān)閉了cache,
          或者你使用了out.flush()強制刷新,那么在使用sendRedirect之前,
          有少量的 HTML輸出也是允許的。
          如果報錯說,“一些信息已經(jīng)被submitted”(原文忘了),那么,你就要注意看了,前面是不是有過多的HTML輸出了。
          
          2,在response.sendRedirect之后,應(yīng)該緊跟一句return;
          我們已經(jīng)知道response.sendRedirect是通過瀏覽器來做轉(zhuǎn)向的,所以只有在頁面處理完成后,
          才會有實際的動作。既然你已經(jīng)要做轉(zhuǎn)向了,那么后的輸出還有什么意義呢?而且有可能會因為后面的輸出導(dǎo)致轉(zhuǎn)向失敗。
          
          # posted by lazio1900 @ 2005-09-08 08:10 評論(0)
          posted @ 2005-10-12 20:22 sharky的點滴積累 閱讀(1344) | 評論 (0)編輯 收藏

          POST是表單提交,GET是字符串提交
          
          post是隱式地提交你的表單數(shù)據(jù)
          get是顯示地提交你的表單數(shù)據(jù)所有數(shù)據(jù)都在url里會顯示出來
          
          Post 與Get的真正區(qū)別是其作用上的不同,Post是被設(shè)計用來向上放東西的(就像其名字所暗示的那樣);而Get是被設(shè)計用來從服務(wù)器取東西的,它所以也能夠向服務(wù)器傳送較少的數(shù)據(jù),是以為當你取東西時,你需要指明取什么,而我們有時候利用指明取什么的機制來向服務(wù)器放東西。
          基于以上原因,Post與Get在http中傳送的方式是不同的,Get的參數(shù)是在http的頭部傳送的,而Post的數(shù)據(jù)則是在http請求的內(nèi)容里傳送的,一般來說,我們沒有看到這中間的差別,那是因為編程環(huán)境幫(如servlet)我們隱藏了其不同
          GET方法將數(shù)據(jù)打包放置在環(huán)境變量QUERY_STRING中作為URL整體的一部分傳遞給服務(wù)器。 POST做很多類似GET同樣的事情, 不同的地方就是它是分離地傳遞數(shù)據(jù)給腳本. 你的腳本通過標準輸入獲取這些數(shù)據(jù). QUERY_STRING環(huán)境變量將不再設(shè)置.因此POST有更好的安全性,尤其如果你的表單中有很多數(shù)據(jù)的話. 當你用GET, 這個服務(wù)器就分配變量QUERY_STRING給所有的表單數(shù)據(jù), 但是這個變量可存儲量是有限的. 換句話說,如果你有很多數(shù)據(jù)但是你又用GET,你會丟失很多數(shù)據(jù)。 如果你用POST, 你可以盡可能多地使用數(shù)據(jù), 因為這些數(shù)據(jù)從來也不分配到一個變量里。此外用post傳遞數(shù)據(jù)還有一個好處,它不會象get那樣把你傳送的數(shù)據(jù)暴露在瀏覽器的地址欄中,而且由于 HTTP/GET常見于Web鏈接,懷有惡意的人可能利用它實施欺騙,使別人在不知不覺中用自己的安全標識調(diào)用Web服務(wù),卻還以為自己在點擊Web鏈接。比如象下面這種:form.php?name=genius&pwd=123456 ,明白了吧?所以還是用post讓人安心一點啦
          posted @ 2005-10-12 20:20 sharky的點滴積累 閱讀(639) | 評論 (2)編輯 收藏

          Vector和ArrayList在使用上非常相似,都可用來表示一組數(shù)量可變的對象應(yīng)用的集合,并且可以隨機地訪問其中的元素。
           Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,由于線程的同步必然要影響性能,因此,ArrayList的性能比Vector好。
           當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利于節(jié)約內(nèi)存空間。


            Hashtable和HashMap區(qū)別
           Hashtable和HashMap它們的性能方面的比較類似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。


          ArrayList和LinkedList區(qū)別
           對于處理一列數(shù)據(jù)項,Java提供了兩個類ArrayList和LinkedList,ArrayList的內(nèi)部實現(xiàn)是基于內(nèi)部數(shù)組Object[],所以從概念上講,它更象數(shù)組,但LinkedList的內(nèi)部實現(xiàn)是基于一組連接的記錄,所以,它更象一個鏈表結(jié)構(gòu),所以,它們在性能上有很大的差別。
           從上面的分析可知,在ArrayList的前面或中間插入數(shù)據(jù)時,你必須將其后的所有數(shù)據(jù)相應(yīng)的后移,這樣必然要花費較多時間,所以,當你的操作是在一列數(shù)據(jù)的后面添加數(shù)據(jù)而不是在前面或中間,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能
           而訪問鏈表中的某個元素時,就必須從鏈表的一端開始沿著連接方向一個一個元素地去查找,直到找到所需的元素為止,所以,當你的操作是在一列數(shù)據(jù)的前面或中間添加或刪除數(shù)據(jù),并且按照順序訪問其中的元素時,就應(yīng)該使用LinkedList了。
           如果在編程中,1,2兩種情形交替出現(xiàn),這時,你可以考慮使用List這樣的通用接口,而不用關(guān)心具體的實現(xiàn),在具體的情形下,它的性能由具體的實現(xiàn)來保證。

           配置集合類的初始大小
           在Java集合框架中的大部分類的大小是可以隨著元素個數(shù)的增加而相應(yīng)的增加的,我們似乎不用關(guān)心它的初始大小,但如果我們考慮類的性能問題時,就一定要考慮盡可能地設(shè)置好集合對象的初始大小,這將大大提高代碼的性能。
           比如,Hashtable缺省的初始大小為101,載入因子為0.75,即如果其中的元素個數(shù)超過75個,它就必須增加大小并重新組織元素,所以,如果你知道在創(chuàng)建一個新的Hashtable對象時就知道元素的確切數(shù)目如為110,那么,就應(yīng)將其初始大小設(shè)為110/0.75=148,這樣,就可以避免重新組織內(nèi)存并增加大小。
          posted @ 2005-10-12 19:40 sharky的點滴積累 閱讀(2991) | 評論 (1)編輯 收藏

          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 
          主站蜘蛛池模板: 石台县| 柘城县| 芮城县| 武功县| 赫章县| 安阳县| 莫力| 寿光市| 隆德县| 克什克腾旗| 开化县| 石门县| 皮山县| 台东市| 隆德县| 维西| 富平县| 壤塘县| 潜江市| 黄石市| 慈溪市| 突泉县| 临夏县| 延津县| 太原市| 巧家县| 项城市| 板桥市| 通山县| 仲巴县| 五常市| 岳阳市| 安西县| 余姚市| 天全县| 昭通市| 崇信县| 沧州市| 保定市| 丹阳市| 孙吴县|