amp@java

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  99 随笔 :: 0 文章 :: 228 评论 :: 0 Trackbacks

#

使用AVG,SUM等SQL聚合函数在Access查询,速度慢得要命,7个整数的求和或平均居然要几秒才能算出来;通过JDBC连接,把数据查出来后再自己求和或求平均,速度不知道要快多少。
奇怪,不知道Access是怎么搞的,求平均可能因为浮点运算慢,但整数求和为什么也会慢呢?
posted @ 2007-07-09 22:26 amp@java 阅读(1563) | 评论 (3)编辑 收藏

更新了某个webapp,把新的WAR包放到webapps目录下,Tomcat就会自动把原来的同名webapp删除,并把WAR包解压,运行新的webapp。但是,有时候Tomcat并不能把旧的webapp完全删除,通常会留下WEB-INF/lib下的某个jar包,必须关闭Tomcat才能删除,这就导致自动部署失败。
解决方法是在<Context>元素中增加一个属性antiResourceLocking="true",默认是"false"。但是这样会带来一个问题,Tomcat在运行对应的webapp时,会把下面的文件复制到一个临时目录里,所以如果你在服务器运行的时候修改了某个JSP,Tomcat并不会发现,看到的还是修改前的那个页面。

以下内容来自Tomcat文档:Context标签的位置

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
关于antiResourceLocking的bug:http://issues.apache.org/bugzilla/show_bug.cgi?id=37668
posted @ 2007-06-27 09:35 amp@java 阅读(1460) | 评论 (1)编辑 收藏


Google ADSense

posted @ 2007-05-08 18:07 amp@java 阅读(584) | 评论 (6)编辑 收藏

数据库服务器更换时,要把数据库整个备份出来,转移到另外的服务器上,在SQL Server 2000中,一般通过数据库的备份生成一个文件,然后在新的服务器上通过数据库的还原把数据导回来,整个过程都有图形界面,操作简单直观。
在ORACLE里,有相似功能的工具,但却是通过命令行方式。
首先,数据库的备份可以通过exp命令进行。exp命令有三种运行方式:交互式、命令行和参数文件。使用交互式一步步提示,用户只需简单输入即可进行,它的使用方法如下:
1、输入exp命令;
2、提示输入用户名,可以使用SYSTEM帐号,不能使用SYS帐号;
3、提示输入密码;
4、依次提示导出文件名及其他选项。

备份出一个文件之后,可以通过imp命令导入到新的服务器中,imp命令与exp命令有很多相似的地方,有些选项是相同的。采用全库导出之后的文件,通过imp完全导入的时候会出现表创建错误的提示,如果新的数据库中没有旧库中对应的用户,也会出现无法导入的提示,解决方法就是在新的数据库中建立同样的用户,并赋予同样权限(?)。

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

posted @ 2007-04-17 17:23 amp@java 阅读(514) | 评论 (0)编辑 收藏

JavaScript里的Array有一个sort方法:

来自微软的Jscript文档

返回一个元素已经进行了排序的 Array 对象。

arrayobj.sort(sortfunction) 

参数

arrayObj
必选项。任意 Array 对象。
sortFunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

说明

sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

  • 负值,如果所传递的第一个参数比第二个参数小。
  • 零,如果两个参数相等。
  • 正值,如果第一个参数比第二个参数大。


因此,排序的关键就在于如何设置sortfunction这个函数了。
在JavaScript中,字符串有一个localeCompare方法,能够根据区域设置来排序,中文的话就是按照拼音排序了。

来自微软的Jscript文档

返回一个值,指出在当前的区域设置中两个字符串是否相同。

stringVar.localeCompare(stringExp)

参数

stringVar
必选项。一个 String 对象文字。
stringExp
必选项。将与 stringVar 进行比较的字符串。

说明

localeCompare 可以对 stringVarstringExp 进行一个区分区域设置的字符串比较并返回 –1、0 或 +1,这取决于系统中缺省区域设置的排序。

如果 stringVar 排序在 stringExp 之前,那么 localeCompare 返回 –1;如果 stringVar 排序在 stringExp 之后,则返回 +1。如果返回值为 0,那就说明这两个字符串是相同的。


把以上两个方法结合,就可以轻松实现按照拼音顺序对多个字符串进行排序了。

例子可以见这里:
http://hi.baidu.com/aaxh/blog/item/eb6ddaf953327858252df218.html
posted @ 2007-04-16 15:08 amp@java 阅读(987) | 评论 (0)编辑 收藏

打开了连接服务器的一个Socket后,隔了一段时间没用,Socket就会自动关闭(为什么?),这时候如果获取该Socket的OutputStream,并往里面写东西,在flush的时候就会出现:
java.net.SocketException: Software caused connection abort: socket write error
的异常。因此,如果隔了一段时间没有使用某个Socket,需要重新使用它的时候,就要先判断它究竟是否还在连接当中,一共尝试了Socket的三个方法:
1、isClosed()
2、isOutputShutdown()
3、isConnected()
发现前两个都没用,即使已经断开了,返回的还是false,只有第三个可以解决问题。
具体原因未知。

2007-4-19更新:
第三个也解决不了问题,还会出现同样的异常,目前的解决方法是catch SocketException,不管socket的状态如何,都把它关闭了重新再连,但是SocketException的种类有很多,不一定是因为Socket已关闭,所以这种方法有点粗鲁,但找不到更好的方法。

posted @ 2007-04-12 12:21 amp@java 阅读(13118) | 评论 (8)编辑 收藏

通过
Runtime.getRuntime().addShutdownHook(Thread hook)
方法可以给当前的进程注册一个清理线程,当进程退出的时候,会执行线程中的代码。

1、为了统一清理线程的实现,可以做一个Destroyable接口,实现此接口的类都有一个destroy()方法,里面包含了该类的清理过程,例如关闭数据库连接、关闭Socket连接等。
Destroyable接口的代码:
 1 package net.blogjava.amplifier;
 2 
 3 /**
 4  * 建立此接口的目的是为了实现程序退出时的清理
 5  * 在Java控制台程序中,用户可以通过关闭命令行窗口或按下Ctrl+C来结束程序的运行
 6  * 这时候应该保证资源能够被正确释放,例如数据库的连接、Socket的连接应该关闭
 7  * 实现了本接口的类的实例引用可以由一个ShutdownHook线程来操作
 8  * 此线程在虚拟机退出时执行,详见Runtime.addShutdownHook()方法
 9  * @author amplifier
10  *
11  */
12 public interface Destroyable {
13     /**
14      * 实现本接口的类需要实现此方法,方法中包含该类的清理代码,
15      * 例如关闭数据库连接、关闭Socket连接等
16      *
17      */
18     void destroy();
19 }

2、建立一个继承于Thread的类ShutdownHook,里面的一个域是Destroyable实现类的引用,在该类的构造函数中可以传入该Destroyable实现类。
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 阅读(2636) | 评论 (0)编辑 收藏

   原来用的是搜狗拼音输入法,1.0还好,速度比较快,词库也比较全,到了2.0,速度慢得受不了,可能我的破电脑跟不上时代发展了,每次输入一个词都要等一会才能看到字,这样用起来太没意思了,于是把它卸了,装了个最近新出的google拼音输入法,还是1.0的,开始的时候居然和搜狗2.0一样慢,差点就心凉了,不过用了一会发现速度快了很多,输入的准确率也比较高,有一个搜狗拼音输入法不具备的特点是它跟google账户联系起来了,可以同步词库,所以到了其他电脑上也可以用自己的词库了,这个特点不错,Google不愧是互联网公司,什么都跟互联网联系起来,呵呵。
Google,我看行!
posted @ 2007-04-12 01:11 amp@java 阅读(262) | 评论 (0)编辑 收藏

在Tomcat 5.5.20里,把一个war包丢在Tomcat的webapps目录下,启动Tomcat后并不会自动启动那个应用,需要进入Tomcat manager,手动启动那个应用。为了实现应用的自动启动,需要在Tomcat的conf/server.xml里的
<Host></Host>
之间加入一个
<Context docBase="应用的根" path="应用程序相对webapps的目录" reloadable="当配置修改时是否需要自动重新加载,是则为true,否则为false"></Context>

特此备忘!
posted @ 2007-03-19 21:59 amp@java 阅读(709) | 评论 (0)编辑 收藏

JFreeChart的lib里有gnujaxp.jar包,添加到WEB-INF/lib里之后,解析faces-configv.xml的时候就会使用gnujaxp包里面的东西,会出现java.net.MalformedURLException: no protocol的异常,google也找不到相关的例子,仔细看了一下错误输出,看到有个org.gnu.jaxp...之类的语句,才知道是这个包引起的错误,把它删掉就好了。

posted @ 2007-01-23 15:01 amp@java 阅读(522) | 评论 (0)编辑 收藏

仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10 下一页