ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕在线中文字幕日亚韩一区 ,欧美自拍视频,97国产在线观看http://www.aygfsteel.com/wangxq/共同努力,共造辉ç…?zh-cnFri, 25 Jul 2025 22:50:48 GMTFri, 25 Jul 2025 22:50:48 GMT60命ä×o模式学习½W”è®°http://www.aygfsteel.com/wangxq/archive/2008/05/05/198311.html扭è{乑֝¤æ‰­è{乑֝¤Mon, 05 May 2008 01:28:00 GMThttp://www.aygfsteel.com/wangxq/archive/2008/05/05/198311.htmlhttp://www.aygfsteel.com/wangxq/comments/198311.htmlhttp://www.aygfsteel.com/wangxq/archive/2008/05/05/198311.html#Feedback1http://www.aygfsteel.com/wangxq/comments/commentRss/198311.htmlhttp://www.aygfsteel.com/wangxq/services/trackbacks/198311.html 优点åQšè§£è€¦äº†å‘送者和接受者之间联¾p…R€?发送者调用一个操作,接受者接受请求执行相应的动作åQŒå› ä¸ÞZ‹É用Command模式解耦,发送者无需知道接受者ä“Q何接口ã€?br /> 1. ½Ž€å•的命ä×o模式
命ä×o接口åQ?br />
public interface Command {
    
public void execute();
}

关闭灯命令:
public class LightOffCommand implements Command {
 Light light;
 
 
public LightOffCommand(Light light) {
  
this.light = light;
 }

 
 
public void execute() {
  light.off();
 }

}

打开灯命令:
public class LightOnCommand implements Command {
    Light light;
  
    
public LightOnCommand(Light light) {
        
this.light = light;
    }

 
    
public void execute() {
        light.on();
    }

}

灯:
public class Light {

    
public Light() {
    }


    
public void on() {
        System.out.println(
"Light is on");
    }


    
public void off() {
        System.out.println(
"Light is off");
    }

}
命ä×o调用者:
public class SimpleRemoteControl {
    Command slot;
 
    
public SimpleRemoteControl() {}
 
    
public void setCommand(Command command) {
        slot 
= command;
    }

 
    
public void buttonWasPressed() {
        slot.execute();
    }

}
‹¹‹è¯•¾c»ï¼š
public class RemoteControlTest {
 
public static void main(String[] args) {
  SimpleRemoteControl remote 
= new SimpleRemoteControl();
  Light light 
= new Light();
  LightOnCommand lightOn 
= new LightOnCommand(light);

  remote.setCommand(lightOn);
  remote.buttonWasPressed();
    }

}
命ä×o模式得特点:
1ã€?分布登记¾lŸä¸€æ‰§è¡ŒåQ?br /> 在作½E‹åºæ—Óž¼Œ¾lå¸¸¼„°åˆ°ä¸€äº›éœ€æ±‚,先注册一些操作,òq¶ä¸é©¬ä¸Šæ‰§è¡ŒåQŒç­‰æœ€¾lˆç¡®å®šåŽ¾lŸä¸€æ‰§è¡Œã€‚如一个具体的例子:用户定制自己的报表,可以订阅é¥û|¼ŒæŸ±ï¼ŒæŠ˜çº¿åQŒæ›²¾U¿å›¾åQŒå®¢æˆ·é€‰æ‹©ç›¸åº”的报表组合,˜q™æ ·å¯¹åº”一个命令集合,在没¼‹®å®šä¹‹å‰ç”¨æˆ·å¯ä»¥å¢žåˆ ˜q™äº›æŠ¥è¡¨åQˆå‘½ä»¤ï¼‰åQŒç­‰æœ€¾lˆç¡®å®šç»Ÿä¸€äº¤ç»™è°ƒç”¨è€…根据命令执行,生成¾l„合报表。实çŽîCº†å‘½ä×o分布提出åQŒç¡®å®šåŽ¾lŸä¸€æ‰§è¡Œçš„功能ã€?br />
2》åŞ如流水线操作åQšè¿˜æ˜¯å‡ºä¹¦çš„例子
//先是一本空白的书:
Book book = new Book();
//扑և ä¸ªä½œè€?br /> Author author1 åQ?new Author();
Author author2 åQ?new Author();
//把写1åQ?章的名类分别¾l™è¿™ä¸¤ä¸ªä½œè€?br /> Command writeCommand = new Write1Command (author1åQŒbook);
Command writeCommand = new Write2Command (author2åQŒbook);
List commands åQ?new List ();
Commands.add(writeCommand);
//调用�br /> Invoker invoker = new invoker();
Invoker.setCommands(commands);
//‹¹æ°´å†™ä¹¦
invoker.action()
实际上在aciton˜q™ä¸€æ–ÒŽ³•中,invoker按照命ä×oåQŒè®©ä¸¤ä¸ªä½œè€…流水写作这本书。(¾cÖM¼¼ä¸€ä¸ªä¹¦çš„æµæ°´çº¿åŠ å·¥å·¥åŽ‚åQ?br /> ˜q™æ ·æˆ‘们的书ž®Þp¢«‹¹æ°´åŠ å·¥æˆåŠŸåQˆå½“然这本书只有两章åQ?br />
˜q™æ ·ž®Þq»™äº†æˆ‘们一¿Uç³»¾lŸè®¾è®¡çš„æ¡†æž¶åQ?br /> 模型åQ‹å·¥å…øP¼‹å‘½ä×o
客户端äñ”生命令,命ä×o调用工具操作模型ã€?br /> Book 相当于模åž?br /> Author 相当于和多工å…ïL±»ä¸­çš„一ä¸?br /> Command 命ä×o

3》系¾lŸéœ€è¦æ”¯æŒå‘½ä»¤çš„æ’¤æ¶ˆ(undo)。提供redo()æ–ÒŽ³•【容易扩展ã€?br /> 我们可以和容易的加入undoå’ŒredoåQŒè¿™ä¸ªä¸éš„¡†è§?br />
4》在Invoker中我们可以实现跟ítªï¼Œå’Œæ—¥å¿—ã€?br />
5》当¾pȝ»Ÿéœ€è¦äؓ某项复制增加形的功能的时候,命ä×o模式使新的功能(表现ä¸ÞZ¸€¿Uå‘½ä»¤ï¼‰å¾ˆå®¹æ˜“地被加入到服务¿Ué‡Œã€?br /> 命ä×o联系了工å…ïL±»åÏx‰§è¡Œç±»å’Œç³»¾lŸé€»è¾‘åQ?br />
½Ž€åŒ?变化的命令模式:
命ä×o模式的角色比较多åQŒåœ¨å®žé™…应用¿Uæˆ‘们可以根据所需要的功能和不需要的功能加以½Ž€åŒ–ã€?br />
1》去æŽ?调用è€?br /> 产生命ä×o集合后,我们可以直接在client中è„P代执行执行操ä½?br /> 2ã€?变化 调用è€?æˆäØ“ 跟踪è€?br /> //调用è€?br /> public class Invoker{
List commands; //已经执行完毕的命令集�br /> public void addCommand (Command command,int i){
commands.add(i,command);
}
public void action(Command command){
//执行操作
command. execute();
//
commands.add(command);
}
}
……………
//˜q˜å¯ä»¥æœ‰ä¸°å¯Œçš„redoå’Œundo操作åQ?当然一些都¾l™åŸºäºŽå‘½ä»¤ç±»æä¾›çš„相应方æ³?
}
˜q™æ ·˜q™ä¸ª¾cÕd°±è®°å½•了所有执行过的操作ã€?br />
3》去æŽ?命ä×o 用map替代
我们完全可以用map代替命ä×oåQŒè¿™æ äh— éœ€å®šä¹‰å„种命ä×o¾c?br /> 我们改进例子
Author author åQ?new Author();
Publisher publisher åQ?new Publisher ();
Map m = new HashMap;
m.put(author, write);
m.put(author, publisherBook);
在Invokerçš„actionæ–ÒŽ³•åQ?br /> 得代map
˜qç”¨java反射来调用方法;

4》去掉执行者:
直接在命令中åQˆexecuteæ–ÒŽ³•¿Uï¼‰åŠ ä¸šåŠ¡é€»è¾‘ã€‚è¿™æ ·åªé€‚åˆäºŽç®€å•çš„ž®çš„¾pȝ»Ÿ.

其他要说的内å®?br /> 1ã€?ž®†æŸäº›å‚æ•îC¼ ¾l™æŸä¸ªæ–¹å‘的方式很多åQŒé™¤äº†å½“作方法的参数外还可以当作¾cÈš„æˆå‘˜ä¾¿ä¿©å˜é‡ä¼ å…¥åQ?br /> ˜q™å°±ä¸ºå‘½ä»¤çš„æŠ½è±¡å¸¦æ¥äº†æžå¤§çš„æ–¹ä¾¿
abstract class Command
{
abstract public void execute();
}
当我们已¾læœ‰äº†æ‰§è¡Œè€…(¾c»TeståQ‰æ–¹æ³•executeåQˆargs1åQŒargs2 ….argsnåQ?br /> 我们不必向Command加入executeåQˆargs1åQŒargs2 ….argsnåQ‰æŠ½è±¡æ–¹æ³•,在说即ä‹É加了åQŒåœ¨æˆ‘们˜q­ä»£çš„æ—¶å€™ä¹Ÿæ— æ³•判断或十分不å®ÒŽ˜“判断哪个命ä×o调用哪个executeæ–ÒŽ³•ã€?br /> 那么我们可以˜q™æ ·
class ConcreteCommand : Command
{
Test test;
args1
args2
…..
argsn
public override void Execute()
{
test. execute (args1åQŒargs2 ….argsn);
}
}
2ã€?åœ¨æƒ³è·Ÿè¸ªæ“ä½œçš„æ—¶å€™ï¼Œä¸€èˆ¬äØ“æ¯ä¸€ä¸ªæ“ä½œå¯¹è±¡åˆ†é…ä¸€ä¸ªè°ƒç”¨è€…ï¼Œæ“ä½œå¯¹è±¡åœ¨è°ƒç”¨è€…ä¸­è®„¡½®ã€‚(可以抽象å‡ÞZ¸€ä¸ªæ€Èš„调用者,来协调调用每一个具体的调用者)
3ã€?命ä×o的抽象粒度我觉得是要注意的ã€?br /> 4ã€?理解思想åQŒä¸è¦æœºæ¢°çš„照搬。消化成自己的,加以灉|´»çš„运用和创造在是根本出路ã€?br /> 所谓命令模式的æ ÒŽœ¬æ€æƒ³ž®±æ˜¯åœ?å…ˆåŞ成命令,在根据命令执行ã€?br />
参考:http://blog.csdn.net/baggio785/archive/2006/05/23/750513.aspx


扭è{乑֝¤ 2008-05-05 09:28 发表评论
]]>
工厂模式学习½W”è®°http://www.aygfsteel.com/wangxq/archive/2008/05/04/198064.html扭è{乑֝¤æ‰­è{乑֝¤Sun, 04 May 2008 06:13:00 GMThttp://www.aygfsteel.com/wangxq/archive/2008/05/04/198064.htmlhttp://www.aygfsteel.com/wangxq/comments/198064.htmlhttp://www.aygfsteel.com/wangxq/archive/2008/05/04/198064.html#Feedback0http://www.aygfsteel.com/wangxq/comments/commentRss/198064.htmlhttp://www.aygfsteel.com/wangxq/services/trackbacks/198064.html1. ½Ž€å•工厂模式又¿U°é™æ€å·¥åŽ‚æ–¹æ³•æ¨¡å¼ã€‚ä»Žå‘½åä¸Šå°±å¯ä»¥çœ‹å‡º˜q™ä¸ªæ¨¡å¼ä¸€å®šå¾ˆ½Ž€å•。它存在的目的很½Ž€å•:定义一个用于创建对象的接口ã€?/font>

1.public class CarFactory{        
       public static Car getCar(int type){
           if(type == 1){
                  return new Car1();
             
} else {
              return new Car2();
           }
       }
}

2. public class CarFactory{
        public static Car getCar(String carClass){
            String className = carClass;
            
Class c = Class.forName(className);
            
Car car = (Car)c.newInstance();
             return car;
        }
}

3. public class CarFactory{
        public static Car getCar(String carJNDIName){         
            InitialContext ic = new InitialContext();
            
String className = ic.lookUp(carJNDIName);
           
Car car = (Car)Class.forName(className).newInstance();
            return car;
        }
}
方式1ï½?适合于工厂所产生的对象都是属于同一个父¾cÕdž‹çš„,而从方式1ï½?来看åQŒæ–¹å¼?无疑是最½Ž€å•çš„åQŒä¹Ÿæ˜¯æœ€å®ÒŽ˜“理解和接受的åQŒè€Œæ–¹å¼?和方å¼?则相å¯ÒŽ¥è¯´è¦é«˜çñ”一炏V€‚高¾U§åœ¨å“ªé‡Œå‘¢ï¼Ÿæˆ‘们可以看到åQŒæ–¹å¼?中对对象的创建是使用Hardcodeçš„åŞ式,也即是程序员需要事先知道系¾lŸé‡Œé¢å­˜åœ¨å¤šž®‘个¾cÕdž‹çš„对象及其对应的¾~–号åQŒä¸€æ—¦å¢žåŠ æˆ–åˆ é™¤ã€ä¿®æ”¹äº†å¯¹è±¡çš„ç±»åž‹ï¼Œåˆ™å¿…ç„¶å¼•èµ·if-else块的改变åQŒé€ æˆäº†ç»´æŠ¤çš„å›°éš¾ã€?br />
而方å¼?则采用了动态类加蝲的方式,方式3在方å¼?的基¼‹€ä¸Šä‹É用了JNDIåQŒæ›´˜q›äº†ä¸€æ­¥ï¼Œå…¶å¥½å¤„是不用出现HardCode的方式,即便你后面的应用增加、删除了对象的类型,我的½E‹åº˜q˜æ˜¯ä¿æŒçŽ°åœ¨çš„æ ·å­ï¼Œè·Ÿè¿›ä¸€æ­¥æ¥è¯ß_¼šå¯ä»¥åŽÀLŽ‰é‚£äº›è®¨åŽŒçš„if-else语句ã€?br /> 2. 工厂æ–ÒŽ³•模式åŽÀLŽ‰äº†ç®€å•å·¥åŽ‚æ¨¡å¼ä¸­å·¥åŽ‚æ–ÒŽ³•的静态属性,使得它可以被子类¾l§æ‰¿ã€‚这样在½Ž€å•工厂模式里集中在工厂方法上的压力可以由工厂æ–ÒŽ³•模式里不同的工厂子类来分担。ã€?font style="background-color: #c7edcc">实质上它是让工厂实现了抽象的工厂接口åQŒå®ƒæŠŠå…·ä½“怎么生äñ”一¿Uä¸œè¥¿ï¼Œæ”‘Öœ¨å…·ä½“的工厂去实现了,所è°?#8221;延迟到子¾cÖM¸­å®žçް“
�/span>
½CÞZ¾‹ä¸€åQ?br /> public interface Driver{
       public Car driverCar();
}
public class BenzDriver implements Driver{
       public Car driverCar(){
              return new Benz();
       }
}
public class BmwDriver implements Driver{
       public Car driverCar()   {

return new Bmw();
       }
}

// 应该和具体äñ”品åŞ成对应关¾p?/span> ...
//
有请暴发户先�/span>

 public class Magnate

{

              public static void main(String[] args)

              {

                     try{ 
                            Driver driver = new BenzDriver();

                            Car car = driver.driverCar();

                            car.drive();

                     }

       ……

}
½CÞZ¾‹äºŒï¼š

public interface Creator
{
  public Prouct factory();
}

public SubCreator1 implent Creator
{
   public Prouct factory()
  {
   return new ConcreteProduct1();
   }
}

public SubCreator2 implent Creator
{
   public Prouct factory()
  {
    return new ConcreteProduct2();
   }
}

è¯äh³¨æ„ï¼š˜q”回¾cÕdž‹æ˜¯Product型的åQï¼
˜q™æ ·å®¢æˆ·ç«¯è°ƒç”¨æ˜¯ç›´æŽ¥new 一个具体工厂的实例åQŒç„¶åŽå‘½ä»¤å®ƒåŽÈ”Ÿäº§ï¼Œè€Œå¯¹äºŽå…·ä½“工厂的父类åQˆæ—¢å·¥åŽ‚æŽ¥å£åQŒæŽ¥å£å®Œå…¨å¯ä»¥æ”¹æˆå­¾cȝ‘ô承父¾cÀL¥å®žçްåQŒåªæ˜¯è¿™æ ·ä¸å¥½ï¼Œä¸ç¬¦åˆOO的原则)åQŒå®ƒå®Œå…¨ä¸çŸ¥é“什么äñ”品被生äñ”了,甚至它连那个具体工厂被实例化它都不知道!

3. 抽象工厂
public abstract class AbstractFactory{
        public abstract Car getCar(String carClass);
       
public abstract Plane getPlane(String planeClass);
}

public class Factory1 extends AbstractFactory{
      public Car getCar(String carClass){
          // å‚考上面的方式1ï½?
          return car1;
      }

      public Plane getPlane(String planeClass){
          // å‚考上面的方式1ï½?
          return plane1;
      }
}

public class Factory2 extends AbstractFactory{
     public Car getCar(String carClass){
          // å‚考上面的方式1ï½?
          return car2;
     }

     public Plane getPlane(String planeClass){
          // 参考上面的方式1ï½?
          return plane2;
     }
}

方式4是最为复杂而且也是最为强大的一¿Uï¼Œå®ƒåœ¨å®žçŽ°äº†å¯¹è±¡å·¥åŽ‚æŠ½è±¡çš„åŸºç¡€ä¸Šï¼Œåˆé›†æˆäº†å·¥åŽ‚æ–ÒŽ³•。ä‹ÉåˆîC¸åŒçš„工厂可以生äñ”相同¾cÕdž‹çš„äñ”品,但äñ”品的子类可能有所不同ã€?/span>ž®±åƒä¸Šé¢çš„å·¥åŽ?和工åŽ?éƒ½å¯ä»¥ç”Ÿäº§æ±½è½¦å’Œé£žæœºä¸€æ øP¼Œä»–们各自之间可以生äñ”不同¾pÕdˆ—çš„äñ”å“?抽象工厂)åQŒè€Œä¸”每个¾pÕdˆ—下面可能有不同的型号(工厂æ–ÒŽ³•)ã€?br />
参考资料:http://www.aygfsteel.com/pengpenglin/archive/2008/01/02/172325.html
http://www.aygfsteel.com/killme2008/archive/2007/03/15/104031.html
http://www.aygfsteel.com/alex/archive/2006/08/29/66479.html

]]>
单实例模式学习笔è®?/title><link>http://www.aygfsteel.com/wangxq/archive/2008/05/04/197967.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Sun, 04 May 2008 00:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2008/05/04/197967.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/197967.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2008/05/04/197967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/197967.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/197967.html</trackback:ping><description><![CDATA[<p><br /> 1. ¾lå…¸çš„单实例模式例子åQˆéž¾U¿ç¨‹å®‰å…¨åQ‰ï¼š<br /> <font style="background-color: #c7edcc">public class Singleton {<br />     private static Singleton uniqueInstance;<br />  <br />     // other useful instance variables here<br />  <br />     private Singleton() {}<br />  <br />     public static Singleton getInstance() {<br />         if (uniqueInstance == null) {<br />         uniqueInstance = new Singleton();<br />      }<br />          return uniqueInstance;<br />     }<br />  <br />     // other useful methods here<br /> }<br /> 本例是最¾lå…¸çš„单实例模式例子åQŒä½†æ˜¯åœ¨å¤šçº¿½E‹çš„æƒ…况下就会äñ”生多个实例!<br /> </font></p> 2. ¾U¿ç¨‹å®‰å…¨çš„例子:<br /> <font style="background-color: #c7edcc">public class Singleton {<br />  private static Singleton uniqueInstance;<br />  <br />  // other useful instance variables here<br />  <br />  private Singleton() {}<br />  <br />  public static synchronized Singleton getInstance() {<br />   if (uniqueInstance == null) {<br />    uniqueInstance = new Singleton();<br />   }<br />   return uniqueInstance;<br />  }<br />  <br />  // other useful methods here<br /> }<br /> </font>增加synchronizedåQŒä¼šè®©è¯¥æ–ÒŽ³•是线½E‹å®‰å…¨çš„åQŒä½†æ˜¯ä¼šå¼•è“v每个¾U¿ç¨‹åœ¨è°ƒç”¨è¯¥æ–ÒŽ³•æ—¶çš„½{‰å¾…åQŒå¦‚æžœgetInstance的性能对应用程序不是很关键åQˆè®°ä½ï¼ŒåŒæ­¥æ–ÒŽ³•可能会ä‹ÉgetInstanceæ–ÒŽ³•得运行效率降ä½?00倍)åQŒæœ¬æ–ÒŽ³•是最好得æ–ÒŽ³•åQ?br /> 3. 提前实例化,不适用延迟实例化(使用于创建和˜qè¡Œæ—¶è´Ÿæ‹…不太繁重或者应用程序æ€ÀL˜¯åˆ›å¾òq¶ä‹É用单件实例)åQŒå®ƒæ˜¯çº¿½E‹å®‰å…¨å¾—åQ?br /> <font style="background-color: #c7edcc">public class Singleton {<br />     private static Singleton uniqueInstance = new Singleton();<br /> <br />     // other useful instance variables here<br />  <br />     private Singleton() {}<br />  <br />     public static Singleton getInstance() {<br />             return uniqueInstance;<br />     }<br />  <br />     // other useful methods here<br /> }<br /> 采用˜q™ç§æ–ÒŽ³•åQŒæˆ‘们依赖JVM在加载这个类时候马上创建此唯一实例åQŒJVM保证在ä“Q何线½E‹è®¿é—®å®ƒä¹‹å‰åQŒä¸€å®šå…ˆåˆ›å¾å®?<br /> </font>4. 在java1.5及以后的版本åQŒå¢žåŠ äº†volatile关键字,可以采用双重‹‚€æŸ¥åŠ é”ï¼<br /> <font style="background-color: #c7edcc">public class Singleton {<br />  private <span style="color: red">volatile </span>static Singleton uniqueInstance;<br />  <br />  private Singleton() {}<br />  <br />  public static Singleton getInstance() {<br />   if (uniqueInstance == null) {<br />    synchronized (Singleton.class) {<br />     if (uniqueInstance == null) {<br />      uniqueInstance = new Singleton();<br />     }<br />    }<br />   }<br />   return uniqueInstance;<br />  }<br /> }<br /> <span style="color: red">volatile关键字确保:当unigueInstance变量在被初始化成实例æ—Óž¼Œå¤šä¸ª¾U¿ç¨‹èƒ½å¤Ÿæ­£ç¡®çš„处理它åQï¼ˆå¯¹äºŽå…Ïx³¨æ€§èƒ½çš„程序,˜q™ç§åšæ³•可以大大减少时耗)<br /> </span><br /> </font><br /> <br /> <img src ="http://www.aygfsteel.com/wangxq/aggbug/197967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2008-05-04 08:38 <a href="http://www.aygfsteel.com/wangxq/archive/2008/05/04/197967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>½Ž€å•çš„oracle备䆾恢复批处理文ä»?/title><link>http://www.aygfsteel.com/wangxq/archive/2007/01/26/96113.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Fri, 26 Jan 2007 03:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2007/01/26/96113.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/96113.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2007/01/26/96113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/96113.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/96113.html</trackback:ping><description><![CDATA[ <p>写个½Ž€å•的批处理文件备份恢复:<br />备䆾åQ?br />@echo off                        不显½Cºå‘½ä»¤è¡Œ <br />     <br />echo 开始备份表.....                       打印信息               <br />D:                                                                      DOS切换到D: ç›?br />cd oracle\ora92\bin                          切换到cd oracle\ora92\bin目录<br />exp <a href="mailto:enpuser/ABC12345@cms30">用户å?密码@</a>数据åº?file=d:\config_bak.dmp tables=(table1,table2)      备䆾表一表二到d:\config_bak.dmp<br />echo 备䆾完毕åQ?br /><br />恢复åQ?br />@echo off           <br />    <br />echo 开始恢复表.....                     <br />D:<br />cd oracle\ora92\bin<br />imp <a href="mailto:enpuser/ABC12345@cms30">用户å?密码@</a>数据åº?file=d:\config_bak.dmp tables=(table1,table2)  ignore=y   <br />sqlplus /nolog @oraStartup.sql>>oraStartup.log 调用sqlæ–‡äšg<br />pause                                                                 执行完sqlæ–‡äšg以后暂停åQŒçœ‹ä¿¡æ¯<br />echo 恢复完毕åQ?br /><br />¾~–写oraStartup.sql<br />conn <a href="mailto:enpuser/ABC12345@cms30">用户å?密码@</a>数据åº?as sysdba<br />select * from table1åQ?br />quitåQ?br />       <br /></p> <p>       <br /><br /><br /> 执行环境åQšå¯ä»¥åœ¨SQLPLUS.EXE或者DOSåQˆå‘½ä»¤è¡ŒåQ‰ä¸­æ‰§è¡ŒåQ?br />  DOS中可以执行时ç”׃ºŽ 在oracle 8i 中Â?安装目录\ora81\BIN被设¾|®äؓ全局路径åQ?br />  该目录下有EXP.EXE与IMP.EXEæ–‡äšg被用来执行导入导出ã€?br />  oracle用java¾~–写åQŒæˆ‘想SQLPLUS.EXE、EXP.EXE、IMP.EXE˜q™ä¿©ä¸ªæ–‡ä»¶æ˜¯è¢«åŒ…装后的类文äšgã€?br />  SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类åQŒå®Œæˆå¯¼å…¥å¯¼å‡ºåŠŸèƒ½ã€?</p> <p>  下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成åQŒå› ä¸ºå¯¼å…¥å¯¼å‡ºå¾ˆ½Ž€å•ã€?br />  数据导出åQ?br />  1 ž®†æ•°æ®åº“TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmpä¸?br />  exp system/manager@TEST file=d:\daochu.dmp full=y<br />  2 ž®†æ•°æ®åº“中system用户与sys用户的表导出<br />  exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)<br />  3 ž®†æ•°æ®åº“中的表table1 、table2导出<br />  exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) <br />  4 ž®†æ•°æ®åº“中的表table1中的字段filed1ä»?00"打头的数据导å‡?br />  exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"<br />  <br />  上面是常用的导出åQŒå¯¹äºŽåŽ‹¾~©æˆ‘不太在意åQŒç”¨winzip把dmpæ–‡äšg可以很好的压¾~©ã€?br />  不过在上面命令后é?加上 compress=y  ž®±å¯ä»¥äº†</p> <p>  数据的导å…?br />  1 ž®†D:\daochu.dmp 中的数据导入 TEST数据库中ã€?br />  imp system/manager@TEST  file=d:\daochu.dmp<br />  上面可能有点问题åQŒå› ä¸ºæœ‰çš„表已经存在åQŒç„¶åŽå®ƒž®±æŠ¥é”™ï¼Œå¯¹è¯¥è¡¨å°±ä¸è¿›è¡Œå¯¼å…¥ã€?br />  在后面加ä¸?ignore=y ž®±å¯ä»¥äº†ã€?br />  2 ž®†d:\daochu.dmp中的表table1 导入<br />  imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) <br /></p> <p>        导入<br />  基本上上面的导入导出够用了。不ž®‘情冉|ˆ‘是将表彻底删除,然后导入ã€?<br /><br /><br /></p> <h1>Oracle数据库备份与恢复的三¿Uæ–¹æ³?/h1> <p style="TEXT-INDENT: 2em">Oracle数据库有三种标准的备份方法,它们分别是导出/导入åQˆEXP/IMPåQ‰ã€çƒ­å¤‡ä†¾å’Œå†·å¤‡ä†¾ã€‚导出备件是一¿Ué€»è¾‘备䆾åQŒå†·å¤‡ä†¾å’Œçƒ­å¤‡ä†¾æ˜¯ç‰©ç†å¤‡ä»½ã€?</p> <p style="TEXT-INDENT: 2em">一ã€?导出åQå¯¼å…¥ï¼ˆExportåQImportåQ?</p> <p style="TEXT-INDENT: 2em">利用Export可将数据从数据库中提取出来,利用Import则可ž®†æå–出来的数据送回到Oracle数据库中厅R€?</p> <p style="TEXT-INDENT: 2em">åQ‘ã€?½Ž€å•导出数据(ExportåQ‰å’Œå¯¼å…¥æ•°æ®åQˆImportåQ?</p> <p style="TEXT-INDENT: 2em">Oracle支持三种方式¾cÕdž‹çš„输出: </p> <p style="TEXT-INDENT: 2em">åQˆï¼‘åQ‰ã€è¡¨æ–¹å¼åQˆT方式åQ‰ï¼Œž®†æŒ‡å®šè¡¨çš„æ•°æ®å¯¼å‡ºã€?</p> <p style="TEXT-INDENT: 2em">åQˆï¼’åQ‰ã€ç”¨æˆäh–¹å¼ï¼ˆU方式åQ‰ï¼Œž®†æŒ‡å®šç”¨æˆïLš„æ‰€æœ‰å¯¹è±¡åŠæ•°æ®å¯¼å‡ºã€?</p> <p style="TEXT-INDENT: 2em">åQˆï¼“åQ‰ã€å…¨åº“方式(Full方式åQ‰ï¼Œç˜‰|•°æ®åº“中的所有对象导出ã€?</p> <p style="TEXT-INDENT: 2em">数据导入åQˆImportåQ‰çš„˜q‡ç¨‹æ˜¯æ•°æ®å¯¼å‡ºï¼ˆExportåQ‰çš„逆过½E‹ï¼Œåˆ†åˆ«ž®†æ•°æ®æ–‡ä»¶å¯¼å…¥æ•°æ®åº“和将数据库数据导出到数据文äšgã€?</p> <p style="TEXT-INDENT: 2em">åQ’ã€?增量导出åQå¯¼å…?</p> <p style="TEXT-INDENT: 2em">增量导出是一¿Uå¸¸ç”¨çš„æ•°æ®å¤‡ä†¾æ–ÒŽ³•åQŒå®ƒåªèƒ½å¯ÒŽ•´ä¸ªæ•°æ®åº“来实施,òq¶ä¸”å¿…é¡»ä½œäØ“SYSTEM来导出。在˜q›è¡Œæ­¤ç§å¯¼å‡ºæ—Óž¼Œ¾pȝ»Ÿä¸è¦æ±‚回½{”ä“Q何问题。导出文件名¾~ºçœä¸ºexport.dmpåQŒå¦‚æžœä¸å¸Œæœ›è‡ªå·±çš„è¾“å‡ºæ–‡ä»¶å®šåäØ“export.dmpåQŒå¿…™åÕdœ¨å‘½ä×o行中指出要用的文件名ã€?</p> <p style="TEXT-INDENT: 2em">增量导出包括三种¾cÕdž‹åQ?</p> <p style="TEXT-INDENT: 2em">åQˆï¼‘åQ‰ã€â€œå®Œå…¨â€å¢žé‡å¯¼å‡ºï¼ˆCompleteåQ?</p> <p style="TEXT-INDENT: 2em">卛_¤‡ä»½ä¸‰ä¸ªæ•°æ®åº“åQŒæ¯”如: </p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>exp system/manager inctype=complete file=040731.dmp</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">åQˆï¼’åQ‰ã€â€œå¢žé‡åž‹â€å¢žé‡å¯¼å‡?</p> <p style="TEXT-INDENT: 2em">备䆾上一‹Æ¡å¤‡ä»½åŽæ”¹å˜çš„æ•°æ®ï¼Œæ¯”如åQ?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>exp system/manager inctype=incremental file=040731.dmp</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">åQˆï¼“åQ‰ã€â€œç¯¿U¯åž‹â€å¢žé‡å¯¼å‡?</p> <p style="TEXT-INDENT: 2em">累计型导出方式是导出自上‹Æ¡â€œå®Œå…¨â€å¯¼å‡ÞZ¹‹åŽæ•°æ®åº“中变化了的信息。比如: </p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>exp system/manager inctype=cumulative file=040731.dmp</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">数据库管理员可以排定一个备份日½E‹è¡¨åQŒç”¨æ•°æ®å¯¼å‡ºçš„三个不同方式合理高效的完成ã€?</p> <p style="TEXT-INDENT: 2em">比如数据库的被封ä»ÕdŠ¡å¯ä»¥åšå¦‚ä¸‹å®‰æŽ’ï¼š </p> <p style="TEXT-INDENT: 2em">星期一åQšå®Œå…¨å¤‡ä»½ï¼ˆAåQ?</p> <p style="TEXT-INDENT: 2em">星期二:增量导出åQˆBåQ?</p> <p style="TEXT-INDENT: 2em">星期三:增量导出åQˆCåQ?</p> <p style="TEXT-INDENT: 2em">星期四:增量导出åQˆDåQ?</p> <p style="TEXT-INDENT: 2em">星期五:累计导出åQˆEåQ?</p> <p style="TEXT-INDENT: 2em">星期六:增量导出åQˆFåQ?</p> <p style="TEXT-INDENT: 2em">星期日:增量导出åQˆGåQ?</p> <p style="TEXT-INDENT: 2em">如果在星期日åQŒæ•°æ®åº“遭到意外破坏åQŒæ•°æ®åº“½Ž¡ç†å‘˜å¯æŒ‰ä¸€ä¸‹æ­¥éª¤æ¥å›žå¤æ•°æ®åº“: </p> <p style="TEXT-INDENT: 2em">½W¬ä¸€æ­¥ï¼šç”¨å‘½ä»¤CREATE DATABASE重新生成数据库结构; </p> <p style="TEXT-INDENT: 2em">½W¬äºŒæ­¥ï¼šåˆ›å¾ä¸€ä¸ªèƒö够大的附加回滚ã€?</p> <p style="TEXT-INDENT: 2em">½W¬ä¸‰æ­¥ï¼šå®Œå…¨å¢žé‡å¯¼å…¥AåQ?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>imp system/manager inctype=RESTORE FULL=y FILE=A</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">½W¬å››æ­¥ï¼šç´¯è®¡å¢žé‡å¯¼å…¥EåQ?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>imp system/manager inctype=RESTORE FULL=Y FILE=E</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">½W¬äº”步:最˜q‘增量导入FåQ?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>imp system/manager inctype=RESTORE FULL=Y FILE=F</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">二ã€?冷备ä»?</p> <p style="TEXT-INDENT: 2em">冷备份发生在数据库已¾læ­£å¸¸å…³é—­çš„æƒ…况下,当正常关闭时会提供给我们一个完整的数据库。冷备䆾时将关键性文件拷贝到另外的位¾|®çš„一¿Uè¯´æ³•。对于备份Oracle信息而言åQŒå†·å¤‡ä†¾æ—¶æœ€å¿«å’Œæœ€å®‰å…¨çš„æ–¹æ³•。冷备䆾的优ç‚ÒŽ˜¯åQ?</p> <p style="TEXT-INDENT: 2em">åQ‘ã€?是非常快速的备䆾æ–ÒŽ³•åQˆåªéœ€æ‹äh–‡ä»Óž¼‰ </p> <p style="TEXT-INDENT: 2em">åQ’ã€?å®ÒŽ˜“å½’æ¡£åQˆç®€å•拷贝即可) </p> <p style="TEXT-INDENT: 2em">åQ“ã€?å®ÒŽ˜“恢复到某个时间点上(只需ž®†æ–‡ä»¶å†æ‹¯‚´å›žåŽ»åQ?</p> <p style="TEXT-INDENT: 2em">åQ”ã€?能与归档æ–ÒŽ³•相结合,做数据库“最佳状态”的恢复ã€?</p> <p style="TEXT-INDENT: 2em">åQ•ã€?低度¾l´æŠ¤åQŒé«˜åº¦å®‰å…¨ã€?</p> <p style="TEXT-INDENT: 2em">但冷备䆾也有如下不èƒöåQ?</p> <p style="TEXT-INDENT: 2em">åQ‘ã€?单独使用æ—Óž¼Œåªèƒ½æä¾›åˆ°â€œæŸä¸€æ—‰™—´ç‚¹ä¸Šâ€çš„æ¢å¤ã€?</p> <p style="TEXT-INDENT: 2em">åQ’ã€?再实施备份的全过½E‹ä¸­åQŒæ•°æ®åº“必须要作备䆾而不能作其他工作。也ž®±æ˜¯è¯ß_¼Œåœ¨å†·å¤‡ä†¾˜q‡ç¨‹ä¸­ï¼Œæ•°æ®åº“å¿…™åÀL˜¯å…³é—­çŠ¶æ€ã€?</p> <p style="TEXT-INDENT: 2em">åQ“ã€?若磁盘空间有限,只能拯‚´åˆ°ç£å¸¦ç­‰å…¶ä»–外部存储讑֤‡ä¸Šï¼Œé€Ÿåº¦ä¼šå¾ˆæ…¢ã€?</p> <p style="TEXT-INDENT: 2em">åQ”ã€?不能按表或按用户恢复ã€?</p> <p style="TEXT-INDENT: 2em">如果可能的话åQˆä¸»è¦çœ‹æ•ˆçއåQ‰ï¼Œåº”将信息备䆾到磁盘上åQŒç„¶åŽå¯åŠ¨æ•°æ®åº“åQˆä‹É用户可以工作åQ‰åƈž®†å¤‡ä»½çš„信息拯‚´åˆ°ç£å¸¦ä¸ŠåQˆæ‹·è´çš„同时åQŒæ•°æ®åº“也可以工作)。冷备䆾中必™åÀL‹·è´çš„æ–‡äšg包括åQ?</p> <p style="TEXT-INDENT: 2em">åQ‘ã€?所有数据文ä»?</p> <p style="TEXT-INDENT: 2em">åQ’ã€?所有控制文ä»?</p> <p style="TEXT-INDENT: 2em">åQ“ã€?所有联机REDO LOGæ–‡äšg </p> <p style="TEXT-INDENT: 2em">åQ”ã€?Init.oraæ–‡äšgåQˆå¯é€‰ï¼‰ </p> <p style="TEXT-INDENT: 2em">值得注意的ä‹É冷备份必™åÕdœ¨æ•°æ®åº“关闭的情况下进行,当数据库处于打开状态时åQŒæ‰§è¡Œæ•°æ®åº“æ–‡äšg¾pȝ»Ÿå¤‡ä†¾æ˜¯æ— æ•ˆçš„ã€?</p> <p style="TEXT-INDENT: 2em">下面是作冷备份的完整例子ã€?</p> <p style="TEXT-INDENT: 2em">åQ?åQ?关闭数据åº?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>sqlplus /nolog sql>;connect /as sysdba sql>;shutdown normal;</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">åQ?åQ?用拷贝命令备份全部的旉™—´æ–‡äšg、重做日志文件、控制文件、初始化参数文äšg </p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>sql>;cp <file>; <backup directory>;</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">åQ?åQ?重启Oracle数据åº?</p> <p style="TEXT-INDENT: 2em"> </p> <center> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"> <pre> <ccid_code>sql>;startup</ccid_code> </pre> </td> </tr> </tbody> </table> </ccid_nobr> </center> <p style="TEXT-INDENT: 2em">三ã€?热备ä»?</p> <p style="TEXT-INDENT: 2em">热备份是在数据库˜qè¡Œçš„æƒ…况下åQŒé‡‡ç”¨archivelog mode方式备䆾数据库的æ–ÒŽ³•。所以,如果你有昨天夜里的一个冷备䆾而且又有今天的热备䆾文äšgåQŒåœ¨å‘生问题æ—Óž¼Œž®±å¯ä»¥åˆ©ç”¨è¿™äº›èµ„料恢复更多的信息。热备䆾要求数据库在Archivelog方式下操作,òq‰™œ€è¦å¤§é‡çš„æ¡£æ¡ˆ½Iºé—´ã€‚一旦数据库˜qè¡Œåœ¨archivelog状态下åQŒå°±å¯ä»¥åšå¤‡ä»½äº†ã€‚热备䆾的命令文件由三部分组成: </p> <p style="TEXT-INDENT: 2em">1åQ?数据文äšg一个表½Iºé—´ä¸€ä¸ªè¡¨½Iºé—´çš„备份ã€?</p> <p style="TEXT-INDENT: 2em">åQ?åQ?讄¡½®è¡¨ç©ºé—´äؓ备䆾状æ€?</p> <p style="TEXT-INDENT: 2em">åQ?åQ?备䆾表空间的数据文äšg </p> <p style="TEXT-INDENT: 2em">åQ?åQ?å›žå¤è¡¨ç©ºé—´äØ“æ­£å¸¸çŠ¶æ€?</p> <p style="TEXT-INDENT: 2em">2åQ?备䆾归档logæ–‡äšg </p> <p style="TEXT-INDENT: 2em">åQ?åQ?临时停止归档˜q›ç¨‹ </p> <p style="TEXT-INDENT: 2em">åQ?åQ?log下那些在archive rede log目标目录中的文äšg </p> <p style="TEXT-INDENT: 2em">åQ?åQ?重新启动archive˜q›ç¨‹ </p> <p style="TEXT-INDENT: 2em">åQ?åQ?备䆾归档的redo logæ–‡äšg </p> <p style="TEXT-INDENT: 2em">3åQ?用alter database bachup controlfile命ä×o来备份控制文ä»?</p> <p style="TEXT-INDENT: 2em">热备份的优点是: </p> <p style="TEXT-INDENT: 2em">1åQ?可在表空间或数据库文件çñ”备䆾åQŒå¤‡ä»½çš„æ—‰™—´çŸ­ã€?</p> <p style="TEXT-INDENT: 2em">2åQ?备䆾时数据库仍可使用ã€?</p> <p style="TEXT-INDENT: 2em">3åQ?可达到秒¾U§æ¢å¤ï¼ˆæ¢å¤åˆ°æŸä¸€æ—‰™—´ç‚¹ä¸ŠåQ‰ã€?</p> <p style="TEXT-INDENT: 2em">4åQ?可对几乎所有数据库实体做恢å¤?</p> <p style="TEXT-INDENT: 2em">5åQ?恢复是快速的åQŒåœ¨å¤§å¤šæ•°æƒ…况下爱数据库仍工作时恢复ã€?</p> <p style="TEXT-INDENT: 2em">热备份的不èƒö是: </p> <p style="TEXT-INDENT: 2em">1åQ?不能出错åQŒå¦åˆ™åŽæžœä¸¥é‡?</p> <p style="TEXT-INDENT: 2em">2åQ?若热备䆾不成功,所得结果不可用于时间点的恢å¤?</p> <p style="TEXT-INDENT: 2em">3åQ?因难于维护,所以要特别仔细ž®å¿ƒåQŒä¸å…è®¸â€œä»¥å¤ÞpÓ|告终”ã€?/p> <p style="TEXT-INDENT: 2em"> <br /> <br /> <br />参考资料:<a >http://publish.it168.com/2006/0601/20060601045701.shtml?positioncode=1545</a><br /><a >http://bbs.zol.com.cn/index20061024/index_124_11079.html</a><br /><a >http://community.csdn.net/Expert/TopicView3.asp?id=5276764</a><br /><a >http://bbs.gdei.edu.cn/faster.php?id=t-55261</a><br /><a >http://www.dvbbs.net/tech/data/2006031819272.asp</a><br /><a >http://study.feloo.com/computer/data/Oracle/200509/121026.html</a><br /></p> <img src ="http://www.aygfsteel.com/wangxq/aggbug/96113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2007-01-26 11:54 <a href="http://www.aygfsteel.com/wangxq/archive/2007/01/26/96113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一哥们写的日期处理¾c»ï¼Œå¾ˆæ£’http://www.aygfsteel.com/wangxq/archive/2007/01/25/95910.html扭è{乑֝¤æ‰­è{乑֝¤Thu, 25 Jan 2007 05:52:00 GMThttp://www.aygfsteel.com/wangxq/archive/2007/01/25/95910.htmlhttp://www.aygfsteel.com/wangxq/comments/95910.htmlhttp://www.aygfsteel.com/wangxq/archive/2007/01/25/95910.html#Feedback2http://www.aygfsteel.com/wangxq/comments/commentRss/95910.htmlhttp://www.aygfsteel.com/wangxq/services/trackbacks/95910.html  import   java.sql.Date;  
  import   java.text.SimpleDateFormat;  
  import   java.text.ParseException;  
   
  /**  
    *   Utility   to   date   time  
    *   @version   0.1  
    *   @author   Super   Zhao  
    */  
  public   class   DateTimeUtil   {  
   
  /**  
    *   ç”±java.util.Date到java.sql.Date的类型è{æ? 
    *   @param   date  
    *   @return   Date  
    */  
  public   static   Date   getSqlDate(java.util.Date   date){  
  return   new   Date(date.getTime());  
  }  
   
  public   static   Date   nowDate(){  
  Calendar   calendar=Calendar.getInstance();  
  return   getSqlDate(calendar.getTime());  
  }  
   
  /**  
    *   获得某一日期的后一� 
    *   @param   date  
    *   @return   Date  
    */  
  public   static   Date   getNextDate(Date   date){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.setTime(date);  
  int   day=calendar.get(Calendar.DATE);  
  calendar.set(Calendar.DATE,day+1);  
  return   getSqlDate(calendar.getTime());  
  }  
   
  /**  
    *   获得某一日期的前一� 
    *   @param   date  
    *   @return   Date  
    */  
  public   static   Date   getPreviousDate(Date   date){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.setTime(date);  
  int   day=calendar.get(Calendar.DATE);  
  calendar.set(Calendar.DATE,day-1);  
  return   getSqlDate(calendar.getTime());  
  }  
   
  /**  
    *   获得某年某月½W¬ä¸€å¤©çš„æ—¥æœŸ  
    *   @param   year  
    *   @param   month  
    *   @return   Date  
    */  
  public   static   Date   getFirstDayOfMonth(int   year,int   month){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.set(Calendar.YEAR,year);  
  calendar.set(Calendar.MONTH,month-1);  
  calendar.set(Calendar.DATE,1);  
  return   getSqlDate(calendar.getTime());  
  }  
   
  /**  
    *   获得某年某月最后一天的日期  
    *   @param   year  
    *   @param   month  
    *   @return   Date  
    */  
  public   static   Date   getLastDayOfMonth(int   year,int   month){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.set(Calendar.YEAR,year);  
  calendar.set(Calendar.MONTH,month);  
  calendar.set(Calendar.DATE,1);  
  return   getPreviousDate(getSqlDate(calendar.getTime()));  
  }  
   
  /**  
    *   由年月日构徏java.sql.Date¾cÕdž‹  
    *   @param   year  
    *   @param   month  
    *   @param   date  
    *   @return   Date  
    */  
  public   static   Date   buildDate(int   year,int   month,int   date){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.set(year,month-1,date);  
  return   getSqlDate(calendar.getTime());  
  }  
   
  /**  
    *   取得某月的天� 
    *   @param   year  
    *   @param   month  
    *   @return   int  
    */  
  public   static   int   getDayCountOfMonth(int   year,int   month){  
  Calendar   calendar=Calendar.getInstance();  
  calendar.set(Calendar.YEAR,year);  
  calendar.set(Calendar.MONTH,month);  
  calendar.set(Calendar.DATE,0);  
  return   calendar.get(Calendar.DATE);  
  }  
   
  /**  
    *   获得某年某季度的最后一天的日期  
    *   @param   year  
    *   @param   quarter  
    *   @return   Date  
    */  
  public   static   Date   getLastDayOfQuarter(int   year,int   quarter){  
  int   month=0;  
  if(quarter>4){  
  return   null;  
  }else{  
  month=quarter*3;  
  }  
  return   getLastDayOfMonth(year,month);  
   
  }  
   
  /**  
    *   获得某年某季度的½W¬ä¸€å¤©çš„æ—¥æœŸ  
    *   @param   year  
    *   @param   quarter  
    *   @return   Date  
    */  
  public   static   Date   getFirstDayOfQuarter(int   year,int   quarter){  
  int   month=0;  
  if(quarter>4){  
  return   null;  
  }else{  
  month=(quarter-1)*3+1;  
  }  
  return   getFirstDayOfMonth(year,month);  
  }  
   
  /**  
    *   获得某年的第一天的日期  
    *   @param   year  
    *   @return   Date  
    */  
  public   static   Date   getFirstDayOfYear(int   year){  
  return   getFirstDayOfMonth(year,1);  
  }  
   
  /**  
    *   获得某年的最后一天的日期  
    *   @param   year  
    *   @return   Date  
    */  
  public   static   Date   getLastDayOfYear(int   year){  
  return   getLastDayOfMonth(year,12);  
  }  
   
  /**  
    *   String到java.sql.Date的类型è{æ? 
    *   @param   param  
    *   @return   Date  
    */  
  public   static   java.sql.Date   StringToDate(String   param)   {  
  if(StringUtil.nullOrBlank(param))   {  
  return   null;  
  }   else   {  
  java.util.Date   date   =null;  
  try   {  
  SimpleDateFormat   sdf=new   SimpleDateFormat("yyyy-MM-dd");  
  date   =   sdf.parse(param);  
  return   new   Date(date.getTime());  
  }  
  catch   (ParseException   ex)   {  
  //ex.printStackTrace();  
  return   null;  
  }  
  }  
  }  
  }  

扭è{乑֝¤ 2007-01-25 13:52 发表评论
]]>
好玩的眼ç?/title><link>http://www.aygfsteel.com/wangxq/archive/2006/12/30/91035.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Sat, 30 Dec 2006 09:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2006/12/30/91035.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/91035.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2006/12/30/91035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/91035.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/91035.html</trackback:ping><description><![CDATA[ <div> </div> <img src ="http://www.aygfsteel.com/wangxq/aggbug/91035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2006-12-30 17:30 <a href="http://www.aygfsteel.com/wangxq/archive/2006/12/30/91035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript打印http://www.aygfsteel.com/wangxq/archive/2006/11/14/81096.html扭è{乑֝¤æ‰­è{乑֝¤Tue, 14 Nov 2006 04:26:00 GMThttp://www.aygfsteel.com/wangxq/archive/2006/11/14/81096.htmlhttp://www.aygfsteel.com/wangxq/comments/81096.htmlhttp://www.aygfsteel.com/wangxq/archive/2006/11/14/81096.html#Feedback0http://www.aygfsteel.com/wangxq/comments/commentRss/81096.htmlhttp://www.aygfsteel.com/wangxq/services/trackbacks/81096.html问题åQšåŽ»é™¤é¡µçœ‰é¡µè„šï¼Œè®„¡½®æ‰“印的横¾Uµå‘方式åQ?br />解决æ–ÒŽ¡ˆä¸€åQ?br />修改注册表:
  var HKEY_Root,HKEY_Path,HKEY_Key;
  HKEY_Root = "HKEY_CURRENT_USER\\";
  HKEY_Path="Software\\Microsoft\\Internet Explorer\\PageSetup\\";
  
  function PageSetup_Null(){
   var Wsh = new ActiveXObject("WScript.Shell");
   HKEY_Key = "header";
   //Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key);
   Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
   HKEY_Key = "footer";
   //Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key);
   Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
  }
  
  window.onload=PageSetup_Null();
  
  function PageSetup_Reset(){
   var Wsh = new ActiveXObject("WScript.Shell");
   HKEY_Key = "header";
   Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&w&b™å늠,&p/&P");
   HKEY_Key = "footer";
   Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&u&b&d");
  }

  window.unonload=PageSetup_Reset();

ç”׃ºŽæ³¨å†Œè¡¨ä½¾|®è·Ÿæ“ä½œ¾pȝ»Ÿæœ‰å…³åQŒä¸æŽ¨èä½¿ç”¨ã€?/p>

解决æ–ÒŽ¡ˆäºŒï¼š
使用控äšgåQ?br />åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?a >http://www.7say.com/article.asp?id=112åQï¼åQï¼åQï¼åQï¼åQï¼
利用ScriptX.cab控äšg˜q›è¡ŒWEB打印åQŒå¯ä»¥æŽ§åˆ?¾U‰|‰“"ã€?横打”和“页面的边距。打åîC»£ç å¦‚下:

<object id=factory viewastext style="display:none"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
 codebase="</object>
<script defer>
function window.onload() {
 // -- advanced features
 factory.printing.SetMarginMeasure(2); // measure margins in inches
 factory.printing.printer = "HP DeskJet 870C";
 factory.printing.paperSize = "A4";
 factory.printing.paperSource = "Manual feed";
 factory.printing.collate = true;
 factory.printing.copies = 2;
 factory.printing.SetPageRange(false, 1, 3); // need pages from 1 to 3

 // -- basic features
 factory.printing.header = "This is MeadCo";
 factory.printing.footer = "Advanced Printing by ScriptX";
 factory.printing.portrait = false;
 factory.printing.leftMargin = 1.0;
 factory.printing.topMargin = 1.0;
 factory.printing.rightMargin = 1.0;
 factory.printing.bottomMargin = 1.0;
}

function Print(frame) {
 factory.printing.Print(true, frame) // print with prompt
</script>

<script language="javascript">
function printTure() //打印函数
{
 document.all("dayinDiv").style.display="none";//隐藏按钮
 factory.printing.Print(false); //调用控äšg打印
 document.all("dayinDiv").style.display="";//昄¡¤º
}
</script>

<DIV align="center" id="dayinDiv" name="dayinDiv">
<input type=button value="打印本页" onclick="printTure()">
<input type=button value="™åµé¢è®„¡½®" onclick="factory.printing.PageSetup()">
<input type=button value="打印预览" onclick="factory.printing.Preview()"><br>
</DIV>


关于ScriptX的下载和该控件的使用æ–ÒŽ³•è¯ïL™»é™?
http://www.meadroid.com/scriptx/index.asp 查看.
åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?br />具体应用åQ?br />  <object id=factory style="display:none"
   classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
   codebase="<c:url value="/editor/ScriptX.cab#version=5,60,0,375"/>" viewastext>
  </object>

  <OBJECT id=WB classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0></OBJECT> 

  function printit()
  {
   factory.printing.header   =   "";  
         factory.printing.footer   =   "";  
   factory.printing.portrait = false;
     WB.ExecWB(6,6)
  }
  
  function setPrint()
  {
   factory.printing.header   =   "";  
         factory.printing.footer   =   "";  
   factory.printing.portrait = false;
   WB.ExecWB(8,1);
  }
  function previewPrint()
  {
   factory.printing.header   =   "";  
         factory.printing.footer   =   "";  
   factory.printing.portrait = false;
   WB.ExecWB(7,1)
  }

  function reset() {
   factory.printing.header   =   "&w&b™å늠,&p/&P";  
         factory.printing.footer   =   "&u&b&d";  
   factory.printing.portrait = true;
  }

  window.unonload=reset();

<DIV align="center" id="dayinDiv" name="dayinDiv">
<input type=button value="打印本页" onclick="printit()">
<input type=button value="™åµé¢è®„¡½®" onclick="setPrint()">
<input type=button value="打印预览" onclick="previewPrint()"><br>
</DIV>



扭è{乑֝¤ 2006-11-14 12:26 发表评论
]]>
java中split使用½Ž€ä»?/title><link>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81095.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Tue, 14 Nov 2006 04:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81095.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/81095.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/81095.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/81095.html</trackback:ping><description><![CDATA[ <p>java.lang.string.split<br />split æ–ÒŽ³•<br />ž®†ä¸€ä¸ªå­—½W¦ä¸²åˆ†å‰²ä¸ºå­å­—符ä¸ÔŒ¼Œç„¶åŽž®†ç»“果作为字½W¦ä¸²æ•°ç»„˜q”回ã€?br />string.split([separatoråQŒ[limit]])<br />参数<br />string 必选项。要被分解的 String 对象或文字。该对象不会è¢?split æ–ÒŽ³•修改ã€?br />separator 可选项。字½W¦ä¸²æˆ?正则表达å¼?对象åQŒå®ƒæ ‡è¯†äº†åˆ†éš”å­—½W¦ä¸²æ—¶ä‹É用的是一个还是多个字½W¦ã€‚如果忽略该选项åQŒè¿”回包含整个字½W¦ä¸²çš„单一元素数组ã€?<br />limit 可选项。该值用来限制返回数¾l„中的元素个数ã€?<br />说明<br />split æ–ÒŽ³•的结果是一个字½W¦ä¸²æ•°ç»„åQŒåœ¨ sting 中每个出çŽ?separator 的位¾|®éƒ½è¦è¿›è¡Œåˆ†è§£ã€?/p> <p>separator 不作ä¸ÞZ“Q何数¾l„元素的部分˜q”回ã€?/p> <p>åQ? * 不是有效的模式匹配规则表辑ּåQŒç”¨"\\*" "\\+"转义后即可得到正¼‹®çš„¾l“æžœã€?br />"|" 分隔串时虽然能够执行åQŒä½†æ˜¯å´ä¸æ˜¯é¢„期的目的,"\\|"转义后即可得到正¼‹®çš„¾l“æžœã€?br />˜q˜æœ‰å¦‚果惛_œ¨ä¸²ä¸­ä½¿ç”¨"\"字符åQŒåˆ™ä¹Ÿéœ€è¦è{ä¹?首先要表è¾?aaaa\bbbb"˜q™ä¸ªä¸²å°±åº”该ç”?aaaa\\bbbb",如果要分隔就应该˜q™æ ·æ‰èƒ½å¾—到正确¾l“æžœåQ?br />        String[] aa = "aaa\\bbb\\bccc".split(<a>\\\\</a>);</p> <p>\\也可用[]代替åQŒå¦‚åQš[|] [*]<br /></p> <img src ="http://www.aygfsteel.com/wangxq/aggbug/81095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2006-11-14 12:25 <a href="http://www.aygfsteel.com/wangxq/archive/2006/11/14/81095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储˜q‡ç¨‹çš„一些用æ³?/title><link>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81084.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Tue, 14 Nov 2006 03:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81084.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/81084.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2006/11/14/81084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/81084.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/81084.html</trackback:ping><description><![CDATA[ <p>最˜q‘在用存储过½E?在网上找了很多的资料,下面ž®±å‚考各¿Uèµ„料整理的一些小例子做些阐述åQ?br />1. Oralce TO_NUMBER() function 的改˜q›ï¼š<br />用Oracle TO_NUMBER˜q›è¡Œ¾cÕdž‹è½¬æ¢çš„æ—¶å€™ï¼Œå¦‚果有无效数字,ž®†è¿”回错误。遗憄¡š„是,Oralce TO_NUMBERòq¶ä¸æ˜¯åœ¨query˜qè¡Œå¼€å§‹å°±æŠ¥é”™åQŒè€Œæ˜¯åˆ°ç¢°åˆ°æ— æ•ˆæ•°å­—çš„¾Uªå½•才报错,而且只是说无效输入,òq¶ä¸æç¤ºæ˜¯å“ªæ¡çºªå½•,也没有ä“Q何输出。如果是一张大表,query˜qè¡Œå¾ˆä¹…才来˜q™ä¹ˆä¸€ä¸‹ï¼Œè€Œä¸”æ ÒŽœ¬ä¸çŸ¥é“那里出的错åQŒæ˜¯ä»€ä¹ˆå€û|¼Œå²‚不痛苦åQŸå¶ž®Þq»å¸¸è·Ÿ˜q™æ ·çš„表打交道,遂自å»ÞZ¸€ä¸ªå‡½æ•ŽÍ¼ŒGET_NUMåQ?/p> <p>CREATE OR REPLACE FUNCTION GET_NUM(IN_TXT in VARCHAR2) RETURN NUMBER IS<br />RETRUN_VALUE NUMBER;<br />BEGIN<br /> select to_number(IN_TXT) into RETRUN_VALUE from dual;<br /> RETURN RETRUN_VALUE;<br /> <br /> EXCEPTION<br /> WHEN others<br /> THEN<br /> RETURN null;<br />END GET_NUM;<br />/<br />˜q™æ ·æ— æ•ˆæ•°å­—å…¨è{换成 Null,¾U é”™å®ÒŽ˜“多了ã€?/p> <p>写个存储˜q‡ç¨‹‹¹‹è¯•一下:<br />CREATE OR REPLACE PROCEDURE TestFun IS<br />    v_name varchar2(10);/***** 存放cursor_para中的name *****/<br />    CURSOR cursor_name IS select name from test;<br />    cursor cursor_para(p_num number) is select name from test where num = p_num;<br />begin<br />  /******* t_name为åó@环的临时变量******/<br />  FOR t_name IN cursor_name LOOP<br />  <br />    if (get_num(t_name.name) is not null) then<br />    <br />   open cursor_para(get_num(t_name.name));<br />   <br />   fetch cursor_para into v_name;<br />   <br />   DBMS_OUTPUT.PUT_LINE('Name:'|| v_name);<br />   <br />   close cursor_para;<br />       <br />   end if;<br />   <br />  END LOOP;<br />END TestFun;<br />/<br />存储˜q‡ç¨‹ä¹Ÿç”¨åˆîCº†å¸¦å‚数的游标和游标For循环,½EåŽä»‹ç».</p> <p>其中‹¹‹è¯•表的创徏åQ?br />create table test<br />(<br />     name varchar2(10),<br />    num number<br />)</p> <p>‹¹‹è¯•数据: <br />insert into test(name) values ('12_');<br />insert into test(name) values ('123');<br /><br />2.带参数的游标</p> <p>  与存储过½E‹å’Œå‡½æ•°ç›æ€¼¼åQŒå¯ä»¥å°†å‚数传递给游标òq¶åœ¨æŸ¥è¯¢ä¸­ä‹É用。这对于处理在某¿Uæ¡ä»¶ä¸‹æ‰“开游标的情况非常有用。它的语法如下:</p> <p>CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement; </p> <p>  定义参数的语法如下:</p> <p>Parameter_name [IN] data_type[{:=|DEFAULT} value] </p> <p>  与存储过½E‹ä¸åŒçš„æ˜¯ï¼Œæ¸¸æ ‡åªèƒ½æŽ¥å—传递的å€û|¼Œè€Œä¸èƒ½è¿”回倹{€‚参数只定义数据¾cÕdž‹åQŒæ²¡æœ‰å¤§ž®ã€?</p> <p>  另外可以¾l™å‚数设定一个缺省å€û|¼Œå½“没有参数å€ég¼ é€’给游标æ—Óž¼Œž®×ƒ‹É用缺省倹{€‚游标中定义的参数只是一个占位符åQŒåœ¨åˆ«å¤„引用该参æ•îC¸</p> <p>一定可靠ã€?/p> <p>  在打开游标时给参数赋å€û|¼Œè¯­æ³•如下åQ?/p> <p>OPEN cursor_name[value[,value]....]; </p> <p>3.游标FOR循环</p> <p>  在大多数时候我们在设计½E‹åºçš„æ—¶å€™éƒ½éµåó@下面的步骤:</p> <p>  1、打开游标</p> <p>  2、开始åó@çŽ?/p> <p>  3、从游标中取å€?/p> <p>  4、检查那一行被˜q”回</p> <p>  5、处ç?/p> <p>  6、关闭åó@çŽ?/p> <p>  7、关闭游æ ?/p> <p>  可以½Ž€å•的把这一¾cÖM»£ç ç§°ä¸ºæ¸¸æ ‡ç”¨äºŽåó@环。但˜q˜æœ‰ä¸€¿Uåó@环与˜q™ç§¾cÕdž‹ä¸ç›¸åŒï¼Œ˜q™å°±æ˜¯FOR循环åQŒç”¨äºŽFOR循环的游标按照正常的声明æ–?/p> <p>式声明,它的优点在于不需要显式的打开、关闭、取数据åQŒæµ‹è¯•数据的存在、定义存放数据的变量½{‰ç­‰ã€‚游标FOR 循环的语法如下:</p> <p>FOR record_name IN<br />(corsor_name[(parameter[,parameter]...)]<br />| (query_difinition)<br />LOOP<br />statements<br />END LOOP; </p> <p>上面的这两个用法也在例子中提åˆîCº†åQ?/p> <p>同理¾cÀLލåQŒä¹Ÿå¯ä»¥ž®†TO_DATE()函数改进ã€?br /></p> <p>下面的例子自<a >http://www.nikicn.com/bbs/dispbbs.asp?boardid=23&id=908</a><br />没有‹¹‹è¯•åQŒç•™ä½œå¤‡ä»½ä¹‹ç”¨ï¼š<br />4. ž®†Oracle çš„Last_Day()函数改写到DB2上:<br />DROP SPECIFIC FUNCTION LAST_DAYDATE<br />;<br />CREATE FUNCTION LAST_DAY(D DATE)<br />RETURNS     DATE<br />    SPECIFIC LAST_DAYDATE<br />    LANGUAGE SQL<br />    DETERMINISTIC<br />    CONTAINS SQL<br />    CALLED ON NULL INPUT<br />    NO EXTERNAL ACTION<br />    RETURN <br />D + 1 month - day(D + 1 month) day</p> <p>;</p> <p>同理åQŒDB2下的first day:<br />DROP SPECIFIC FUNCTION FIRST_DAYDATE<br />;<br />CREATE FUNCTION FIRST_DAY(D DATE)<br />RETURNS     DATE<br />    SPECIFIC FIRST_DAYDATE<br />    LANGUAGE SQL<br />    DETERMINISTIC<br />    CONTAINS SQL<br />    CALLED ON NULL INPUT<br />    NO EXTERNAL ACTION<br />    RETURN<br />D - day(D) day + 1 day</p> <img src ="http://www.aygfsteel.com/wangxq/aggbug/81084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2006-11-14 11:27 <a href="http://www.aygfsteel.com/wangxq/archive/2006/11/14/81084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Jsp˜qè¡ŒçŽ¯å¢ƒçš„é…¾|®æ–¹æ³?/title><link>http://www.aygfsteel.com/wangxq/archive/2006/08/24/65464.html</link><dc:creator>扭è{乑֝¤</dc:creator><author>扭è{乑֝¤</author><pubDate>Thu, 24 Aug 2006 02:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/wangxq/archive/2006/08/24/65464.html</guid><wfw:comment>http://www.aygfsteel.com/wangxq/comments/65464.html</wfw:comment><comments>http://www.aygfsteel.com/wangxq/archive/2006/08/24/65464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxq/comments/commentRss/65464.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wangxq/services/trackbacks/65464.html</trackback:ping><description><![CDATA[ <p> <a >http://soft.etcell.com/topicView.aspx?Id=5692</a> <br />配置server.xml ------ Tomcat的全局配置文äšg<br />当你打开Tomcat˜q™ä¸ªç›®å½•æ—Óž¼Œä½ å°†å¯ä»¥çœ‹åˆ°åœ¨è¿™ä¸ªç›®å½•下有个confæ–‡äšg夹,打开该目录下server.xmlæ–‡äšg的源码,我们会看到里面有很多xml代码åQŒæ˜¯ç”¨æ¥æè¿°Tomcat的全局配置åQŒåœ¨æ­¤æˆ‘们只兛_¿ƒè·Ÿæˆ‘们有密切关系的部分ã€?br /><1>讄¡½®è·¯å¾„映射<br />大概在第264è‡?67行中你可以看åˆ?/p> <p><!-- Tomcat Root Context --><br />        <!--<br />          <Context path="" docBase="ROOT" debug="0"/><br />        --></p> <p>其中<!-- Tomcat Root Context -->是说明部分,没ä“Q何作用,我们不理它ã€?br />docBase="ROOT"ž®±æ˜¯æŒ‡å®šæˆ‘们™å¹ç›®çš„物理地址åQŒå¦‚果用上面所建的™å¹ç›®htdocsåQŒé‚£ž®±æ˜¯docBase=" E:/Tomcat41/htdocs"ã€?/p> <p>path=""是指定在URL的相对èµ\径,如设¾|®äØ“path="TEST",那么在URL中输å…?a >http://127.0.0.1:80/TEST</a> åQŒå®ƒž®†èƒ½è¯Õdˆ°E:/Tomcat41/htdocs下的文äšgã€?br />但一般我们设¾|®äØ“path=""åQŒè€Œä¸”在安装Tomcat时端口设¾|®äØ“80åQŒé‚£ä¹?br />在URL中输å…?a >http://127.0.0.1/</a>ž®±å¯ä»¥è¯»åˆ°E:/Tomcat41/htdocs下的文äšg了ã€?/p> <p>ä¸ÞZº†æ¯æ¬¡¾|‘页åˆäh–°èƒ½æœ‰æ•ˆçš„è¯Õdˆ°æœ€æ–°çš„æ–‡äšgåQŒåœ¨æ­¤æˆ‘们增加了一个设¾|®ï¼Œ<br />reloadable=”true”ã€?br />最后的¾l“果是:</p> <p><!-- Tomcat Root Context --><br /><Context path="" docBase="E:/Tomcat41/htdocs" reloadable="true" debug="0"/></p> <p>web.xml -----在Tomcat中配¾|®ä¸åŒçš„关系环境<br />è·Ÿserver.xml同一目录下还有一个web.xmlåQŒæ‰“开该文件的源码,我们看看一些常用的配置æ–ÒŽ³•<br />A.隐藏跟目录下的文件夹<br />å‡ÞZºŽå®‰å…¨çš„考虑åQŒäؓ了不让客æˆïL«¯èƒ½çœ‹åˆ°æœåŠ¡å™¨ç«¯è·Ÿç›®å½•ä¸‹çš„æ–‡äšgåQŒå¿…™åÀLŠŠlistings从trueæ”¹äØ“false,具体如下åQ?br /><servlet><br />        ………â€?br />        <init-param><br />            <param-name>listings</param-name><br />            <param-value>false</param-value><br />        </init-param><br />        …………â€?br />    </servlet><br />B.开放servletå’Œjsp<br />ç”׃ºŽåœ¨åº”用程序中会用到servletå’Œjsp,ä¸ÞZº†åœ¨URLä¸­æ£€ç´¢åÆˆå¤„ç†servletå’ŒjspåQŒå¿…™åÀLŠŠservletå’Œjsp开攑ևºæ¥ï¼Œž®±æ˜¯åŽÀLމ â€?lt;!—“和â€?-->â€?具体如下åQ?br /><!-- The mapping for the invoker servlet --></p> <p>    <servlet-mapping><br />        <servlet-name>invoker</servlet-name><br />        <url-pattern>/servlet/*</url-pattern><br />    </servlet-mapping><br />    <!-- The mapping for the JSP servlet --><br />    <servlet-mapping><br />        <servlet-name>jsp</servlet-name><br />        <url-pattern>*.jsp</url-pattern><br /></servlet-mapping><br />C.讄¡½®é»˜è®¤æ–‡äšg<br />   ç”׃ºŽå®¢æˆ·é€šå¸¸åªçŸ¥é“网站的名称åQŒè€Œä¸è¯¥çŸ¥é“网站的入口文äšgåç§°ã€‚äØ“äº†å®¢æˆ·åœ¨è¾“å…¥¾|‘址时能够找到默认的入口文äšgåQŒå¿…™åÀLŠŠæ–‡äšg名加入到<welcome-file-list>中,如:<br /><welcome-file-list><br />        <welcome-file>index.html</welcome-file><br />        <welcome-file>index.htm</welcome-file><br />        <welcome-file>index.jsp</welcome-file><br /></welcome-file-list><br />˜q™æ—¶å¦‚果输入<a >http://127.0.0.1</a>ž®Þq­‰äºŽè¾“å…?a >http://127.0.0.1/index.html</a><br /><br /></p> <img src ="http://www.aygfsteel.com/wangxq/aggbug/65464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxq/" target="_blank">扭è{乑֝¤</a> 2006-08-24 10:54 <a href="http://www.aygfsteel.com/wangxq/archive/2006/08/24/65464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">²©ÂÞÏØ</a>| <a href="http://" target="_blank">ºÏÑôÏØ</a>| <a href="http://" target="_blank">ºØÀ¼ÏØ</a>| <a href="http://" target="_blank">ÌìÌ¨ÏØ</a>| <a href="http://" target="_blank">ÎÚÀ­ÌØÖÐÆì</a>| <a href="http://" target="_blank">´¾»¯ÏØ</a>| <a href="http://" target="_blank">¹ȪÊÐ</a>| <a href="http://" target="_blank">ÖñÉ½ÏØ</a>| <a href="http://" target="_blank">ÖÛÇúÏØ</a>| <a href="http://" target="_blank">ÂåÔúÏØ</a>| <a href="http://" target="_blank">ƽÀûÏØ</a>| <a href="http://" target="_blank">èï´¨ÏØ</a>| <a href="http://" target="_blank">Çì°²ÏØ</a>| <a href="http://" target="_blank">¹þ¶û±õÊÐ</a>| <a href="http://" target="_blank">ËÉÏªÏØ</a>| <a href="http://" target="_blank">ÎÚÀ¼ºÆÌØÊÐ</a>| <a href="http://" target="_blank">¿ªÆ½ÊÐ</a>| <a href="http://" target="_blank">ÐËÒåÊÐ</a>| <a href="http://" target="_blank">ÉÌÇðÊÐ</a>| <a href="http://" target="_blank">ÎåÕ¯ÏØ</a>| <a href="http://" target="_blank">ÄÒÇ«ÏØ</a>| <a href="http://" target="_blank">ÁÙÒØÏØ</a>| <a href="http://" target="_blank">ÂÞÔ´ÏØ</a>| <a href="http://" target="_blank">°¢ºÏÆæÏØ</a>| <a href="http://" target="_blank">ÑαßÏØ</a>| <a href="http://" target="_blank">ÔúÂ³ÌØÆì</a>| <a href="http://" target="_blank">óÞÁ¬ÏØ</a>| <a href="http://" target="_blank">Ô˳ÇÊÐ</a>| <a href="http://" target="_blank">ºÓÔ´ÊÐ</a>| <a href="http://" target="_blank">Ã÷ÐÇ</a>| <a href="http://" target="_blank">ÓôÄÏÏØ</a>| <a href="http://" target="_blank">³¤ÀÖÊÐ</a>| <a href="http://" target="_blank">°²ÁúÏØ</a>| <a href="http://" target="_blank">ÇÒÄ©ÏØ</a>| <a href="http://" target="_blank">ÇßÔ´ÏØ</a>| <a href="http://" target="_blank">±¦ÛæÇø</a>| <a href="http://" target="_blank">ɳÑóÏØ</a>| <a href="http://" target="_blank">·â¿ªÏØ</a>| <a href="http://" target="_blank">ÔÆ°²ÏØ</a>| <a href="http://" target="_blank">°²ÈÊÏØ</a>| <a href="http://" target="_blank">·ð¸ÔÏØ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>