amp@java

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

          #

          使用AVG,SUM等SQL聚合函數(shù)在Access查詢,速度慢得要命,7個整數(shù)的求和或平均居然要幾秒才能算出來;通過JDBC連接,把數(shù)據(jù)查出來后再自己求和或求平均,速度不知道要快多少。
          奇怪,不知道Access是怎么搞的,求平均可能因?yàn)楦↑c(diǎn)運(yùn)算慢,但整數(shù)求和為什么也會慢呢?
          posted @ 2007-07-09 22:26 amp@java 閱讀(1577) | 評論 (3)編輯 收藏

          更新了某個webapp,把新的WAR包放到webapps目錄下,Tomcat就會自動把原來的同名webapp刪除,并把WAR包解壓,運(yùn)行新的webapp。但是,有時候Tomcat并不能把舊的webapp完全刪除,通常會留下WEB-INF/lib下的某個jar包,必須關(guān)閉Tomcat才能刪除,這就導(dǎo)致自動部署失敗。
          解決方法是在<Context>元素中增加一個屬性antiResourceLocking="true",默認(rèn)是"false"。但是這樣會帶來一個問題,Tomcat在運(yùn)行對應(yīng)的webapp時,會把下面的文件復(fù)制到一個臨時目錄里,所以如果你在服務(wù)器運(yùn)行的時候修改了某個JSP,Tomcat并不會發(fā)現(xiàn),看到的還是修改前的那個頁面。

          以下內(nèi)容來自Tomcat文檔:Context標(biāo)簽的位置

          Context elements may be explicitly defined:

          • in the $CATALINA_HOME/conf/context.xml file: the Context element information will be loaded by all webapps
          • in the $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default file: the Context element information will be loaded by all webapps of that host
          • in individual files (with a ".xml" extension) in the $CATALINA_HOME/conf/[enginename]/[hostname]/ directory. The name of the file (less the .xml) extension will be used as the context path. Multi-level context paths may be defined using #, e.g. context#path.xml. The default web application may be defined by using a file called ROOT.xml.
          • if the previous file was not found for this application, in an individual file at /META-INF/context.xml inside the application files
          • inside a Host element in the main conf/server.xml


          參考資料:
          Tomcat 5.5 文檔:http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
          關(guān)于antiResourceLocking的bug:http://issues.apache.org/bugzilla/show_bug.cgi?id=37668
          posted @ 2007-06-27 09:35 amp@java 閱讀(1470) | 評論 (1)編輯 收藏


          Google ADSense

          posted @ 2007-05-08 18:07 amp@java 閱讀(593) | 評論 (6)編輯 收藏

          數(shù)據(jù)庫服務(wù)器更換時,要把數(shù)據(jù)庫整個備份出來,轉(zhuǎn)移到另外的服務(wù)器上,在SQL Server 2000中,一般通過數(shù)據(jù)庫的備份生成一個文件,然后在新的服務(wù)器上通過數(shù)據(jù)庫的還原把數(shù)據(jù)導(dǎo)回來,整個過程都有圖形界面,操作簡單直觀。
          在ORACLE里,有相似功能的工具,但卻是通過命令行方式。
          首先,數(shù)據(jù)庫的備份可以通過exp命令進(jìn)行。exp命令有三種運(yùn)行方式:交互式、命令行和參數(shù)文件。使用交互式一步步提示,用戶只需簡單輸入即可進(jìn)行,它的使用方法如下:
          1、輸入exp命令;
          2、提示輸入用戶名,可以使用SYSTEM帳號,不能使用SYS帳號;
          3、提示輸入密碼;
          4、依次提示導(dǎo)出文件名及其他選項(xiàng)。

          備份出一個文件之后,可以通過imp命令導(dǎo)入到新的服務(wù)器中,imp命令與exp命令有很多相似的地方,有些選項(xiàng)是相同的。采用全庫導(dǎo)出之后的文件,通過imp完全導(dǎo)入的時候會出現(xiàn)表創(chuàng)建錯誤的提示,如果新的數(shù)據(jù)庫中沒有舊庫中對應(yīng)的用戶,也會出現(xiàn)無法導(dǎo)入的提示,解決方法就是在新的數(shù)據(jù)庫中建立同樣的用戶,并賦予同樣權(quán)限(?)。

          exp和imp的使用方法見:
          http://oracle.chinaitlab.com/backup/36902.html
          http://oracle.chinaitlab.com/backup/36901.html

          posted @ 2007-04-17 17:23 amp@java 閱讀(523) | 評論 (0)編輯 收藏

          JavaScript里的Array有一個sort方法:

          來自微軟的Jscript文檔

          返回一個元素已經(jīng)進(jìn)行了排序的 Array 對象。

          arrayobj.sort(sortfunction) 

          參數(shù)

          arrayObj
          必選項(xiàng)。任意 Array 對象。
          sortFunction
          可選項(xiàng)。是用來確定元素順序的函數(shù)的名稱。如果這個參數(shù)被省略,那么元素將按照 ASCII 字符順序進(jìn)行升序排列。

          說明

          sort 方法將 Array 對象進(jìn)行適當(dāng)?shù)呐判颍辉趫?zhí)行過程中并不會創(chuàng)建新的 Array 對象。

          如果為 sortfunction 參數(shù)提供了一個函數(shù),那么該函數(shù)必須返回下列值之一:

          • 負(fù)值,如果所傳遞的第一個參數(shù)比第二個參數(shù)小。
          • 零,如果兩個參數(shù)相等。
          • 正值,如果第一個參數(shù)比第二個參數(shù)大。


          因此,排序的關(guān)鍵就在于如何設(shè)置sortfunction這個函數(shù)了。
          在JavaScript中,字符串有一個localeCompare方法,能夠根據(jù)區(qū)域設(shè)置來排序,中文的話就是按照拼音排序了。

          來自微軟的Jscript文檔

          返回一個值,指出在當(dāng)前的區(qū)域設(shè)置中兩個字符串是否相同。

          stringVar.localeCompare(stringExp)

          參數(shù)

          stringVar
          必選項(xiàng)。一個 String 對象文字。
          stringExp
          必選項(xiàng)。將與 stringVar 進(jìn)行比較的字符串。

          說明

          localeCompare 可以對 stringVarstringExp 進(jìn)行一個區(qū)分區(qū)域設(shè)置的字符串比較并返回 –1、0 或 +1,這取決于系統(tǒng)中缺省區(qū)域設(shè)置的排序。

          如果 stringVar 排序在 stringExp 之前,那么 localeCompare 返回 –1;如果 stringVar 排序在 stringExp 之后,則返回 +1。如果返回值為 0,那就說明這兩個字符串是相同的。


          把以上兩個方法結(jié)合,就可以輕松實(shí)現(xiàn)按照拼音順序?qū)Χ鄠€字符串進(jìn)行排序了。

          例子可以見這里:
          http://hi.baidu.com/aaxh/blog/item/eb6ddaf953327858252df218.html
          posted @ 2007-04-16 15:08 amp@java 閱讀(997) | 評論 (0)編輯 收藏

          打開了連接服務(wù)器的一個Socket后,隔了一段時間沒用,Socket就會自動關(guān)閉(為什么?),這時候如果獲取該Socket的OutputStream,并往里面寫東西,在flush的時候就會出現(xiàn):
          java.net.SocketException: Software caused connection abort: socket write error
          的異常。因此,如果隔了一段時間沒有使用某個Socket,需要重新使用它的時候,就要先判斷它究竟是否還在連接當(dāng)中,一共嘗試了Socket的三個方法:
          1、isClosed()
          2、isOutputShutdown()
          3、isConnected()
          發(fā)現(xiàn)前兩個都沒用,即使已經(jīng)斷開了,返回的還是false,只有第三個可以解決問題。
          具體原因未知。

          2007-4-19更新:
          第三個也解決不了問題,還會出現(xiàn)同樣的異常,目前的解決方法是catch SocketException,不管socket的狀態(tài)如何,都把它關(guān)閉了重新再連,但是SocketException的種類有很多,不一定是因?yàn)镾ocket已關(guān)閉,所以這種方法有點(diǎn)粗魯,但找不到更好的方法。

          posted @ 2007-04-12 12:21 amp@java 閱讀(13143) | 評論 (8)編輯 收藏

          通過
          Runtime.getRuntime().addShutdownHook(Thread hook)
          方法可以給當(dāng)前的進(jìn)程注冊一個清理線程,當(dāng)進(jìn)程退出的時候,會執(zhí)行線程中的代碼。

          1、為了統(tǒng)一清理線程的實(shí)現(xiàn),可以做一個Destroyable接口,實(shí)現(xiàn)此接口的類都有一個destroy()方法,里面包含了該類的清理過程,例如關(guān)閉數(shù)據(jù)庫連接、關(guān)閉Socket連接等。
          Destroyable接口的代碼:
           1 package net.blogjava.amplifier;
           2 
           3 /**
           4  * 建立此接口的目的是為了實(shí)現(xiàn)程序退出時的清理
           5  * 在Java控制臺程序中,用戶可以通過關(guān)閉命令行窗口或按下Ctrl+C來結(jié)束程序的運(yùn)行
           6  * 這時候應(yīng)該保證資源能夠被正確釋放,例如數(shù)據(jù)庫的連接、Socket的連接應(yīng)該關(guān)閉
           7  * 實(shí)現(xiàn)了本接口的類的實(shí)例引用可以由一個ShutdownHook線程來操作
           8  * 此線程在虛擬機(jī)退出時執(zhí)行,詳見Runtime.addShutdownHook()方法
           9  * @author amplifier
          10  *
          11  */
          12 public interface Destroyable {
          13     /**
          14      * 實(shí)現(xiàn)本接口的類需要實(shí)現(xiàn)此方法,方法中包含該類的清理代碼,
          15      * 例如關(guān)閉數(shù)據(jù)庫連接、關(guān)閉Socket連接等
          16      *
          17      */
          18     void destroy();
          19 }

          2、建立一個繼承于Thread的類ShutdownHook,里面的一個域是Destroyable實(shí)現(xiàn)類的引用,在該類的構(gòu)造函數(shù)中可以傳入該Destroyable實(shí)現(xiàn)類。
          ShutdownHook的代碼:
           1 package net.blogjava.amplifier;
           2 
           3 public class ShutdownHook extends Thread {
           4 
           5     private Destroyable desObj;
           6     
           7     public ShutdownHook(Destroyable desObj){
           8         this.desObj = desObj;
           9             }
          10     
          11     @Override
          12     public void run() {
          13         if(this.desObj!=null){
          14             try{
          15                 this.desObj.destroy();
          16             }
          17             catch (Exception e) {
          18             }
          19         }
          20     }
          21 
          22     /** *//**
          23      * @param args
          24      */
          25     public static void main(String[] args) {
          26     
          27 
          28     }
          29 
          30 }

          3、在main()方法中注冊ShutdownHook。
           1     public static void main(String[] args){
           2         DestroyableImpl di = new DestroyableImpl();
           3         ShutdownHook sh = new ShutdownHook(di);
           4         Runtime.getRuntime().addShutdownHook(sh);
           5         Runtime.getRuntime().addShutdownHook(new Thread(){
           6             public void run(){
           7                 System.out.println("正在退出……");
           8             }
           9         });
          10         di.otherMethod();
          11     }
          posted @ 2007-04-12 10:08 amp@java 閱讀(2652) | 評論 (0)編輯 收藏

             原來用的是搜狗拼音輸入法,1.0還好,速度比較快,詞庫也比較全,到了2.0,速度慢得受不了,可能我的破電腦跟不上時代發(fā)展了,每次輸入一個詞都要等一會才能看到字,這樣用起來太沒意思了,于是把它卸了,裝了個最近新出的google拼音輸入法,還是1.0的,開始的時候居然和搜狗2.0一樣慢,差點(diǎn)就心涼了,不過用了一會發(fā)現(xiàn)速度快了很多,輸入的準(zhǔn)確率也比較高,有一個搜狗拼音輸入法不具備的特點(diǎn)是它跟google賬戶聯(lián)系起來了,可以同步詞庫,所以到了其他電腦上也可以用自己的詞庫了,這個特點(diǎn)不錯,Google不愧是互聯(lián)網(wǎng)公司,什么都跟互聯(lián)網(wǎng)聯(lián)系起來,呵呵。
          Google,我看行!
          posted @ 2007-04-12 01:11 amp@java 閱讀(267) | 評論 (0)編輯 收藏

          在Tomcat 5.5.20里,把一個war包丟在Tomcat的webapps目錄下,啟動Tomcat后并不會自動啟動那個應(yīng)用,需要進(jìn)入Tomcat manager,手動啟動那個應(yīng)用。為了實(shí)現(xiàn)應(yīng)用的自動啟動,需要在Tomcat的conf/server.xml里的
          <Host></Host>
          之間加入一個
          <Context?docBase="應(yīng)用的根"?path="應(yīng)用程序相對webapps的目錄"?reloadable="當(dāng)配置修改時是否需要自動重新加載,是則為true,否則為false"></Context>

          特此備忘!
          posted @ 2007-03-19 21:59 amp@java 閱讀(720) | 評論 (0)編輯 收藏

          JFreeChart的lib里有g(shù)nujaxp.jar包,添加到WEB-INF/lib里之后,解析faces-configv.xml的時候就會使用gnujaxp包里面的東西,會出現(xiàn)java.net.MalformedURLException: no protocol的異常,google也找不到相關(guān)的例子,仔細(xì)看了一下錯誤輸出,看到有個org.gnu.jaxp...之類的語句,才知道是這個包引起的錯誤,把它刪掉就好了。

          posted @ 2007-01-23 15:01 amp@java 閱讀(535) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 
          主站蜘蛛池模板: 沙田区| 武功县| 湘阴县| 呼伦贝尔市| 绥中县| 游戏| 太白县| 秭归县| 三原县| 阿拉善右旗| 乌鲁木齐县| 衡阳县| 娱乐| 益阳市| 彭山县| 绿春县| 科尔| 安西县| 波密县| 石屏县| 云安县| 鸡西市| 原阳县| 庆元县| 衡水市| 历史| 叶城县| 潼南县| 海宁市| 正定县| 上蔡县| 丹东市| 西峡县| 平罗县| 高要市| 南华县| 乌苏市| 北票市| 武宁县| 临朐县| 马龙县|