??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲v日韩v综合v精品v,91精品久久久久久,国产精品粉嫩http://www.aygfsteel.com/kyleYang/archive/2013/08/25/403295.html飞熊飞熊Sun, 25 Aug 2013 13:35:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2013/08/25/403295.htmlhttp://www.aygfsteel.com/kyleYang/comments/403295.htmlhttp://www.aygfsteel.com/kyleYang/archive/2013/08/25/403295.html#Feedback2http://www.aygfsteel.com/kyleYang/comments/commentRss/403295.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/403295.html

飞熊 2013-08-25 21:35 发表评论
]]>
Apache负蝲均衡+Tomcat集群http://www.aygfsteel.com/kyleYang/archive/2010/08/18/329287.html飞熊飞熊Wed, 18 Aug 2010 15:24:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/18/329287.htmlhttp://www.aygfsteel.com/kyleYang/comments/329287.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/18/329287.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/329287.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/329287.html
核心提示Q第一步: 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6 下蝲mod_jk_1.2.6_2.0.50.dll文gQ将其改名ؓmod_jk.so后放到apache2/modules目录中?W二步: workers.propertiesQ?workers.tomcat_home=D:\My_Work\Tomcat\

W一步: 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6 
                            下蝲mod_jk_1.2.6_2.0.50.dll文gQ将其改名ؓmod_jk.so后放到apache2/modules目录中。?br />W二步: workers.propertiesQ?br />workers.tomcat_home=D:\My_Work\Tomcat\apache-tomcat-6.0.14
workers.java_home=D:\Program Files\Java\jdk1.5.0_07
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1 

W三步:用记事本打开apache/conf/httpd.conf文g末尾Q添加下面一D:
    
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:\Program Files\Apache Software Foundation\Apache2.2\modules\workers.properties"
#ServerAdmin wangguiwei@gmail.com   
#ServerName localhost
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13   
JkAutoAlias "D:\My_Work\Tomcat\apache-tomcat-6.0.14\webapps"  
Options Indexes FollowSymLinks
#allow from all 
    
保存Q停止apache服务Q在启动Q就可以新配置应用了?
******************************
一QApache与Tomcat介绍

    Apache是当前用最为广泛的WWW服务器YӞh相当强大的静态HTML处理的能力?

     Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软g基金会(Apache Software FoundationQ的Jakarta目中的一个核心项目,由Apache、Sun和 ?其他一些公司及个h共同开发而成。由于有了Sun的参与和支持Q最新的Servlet和JSP   规范L能在Tomcat中得C玎ͼTomcat5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先q、性能E_Q而且免费Q因而深受Java爱好者的喜爱q得C部分软g开发商的认可,成ؓ目前比较行的Web应用服务器?

Tomcat和IIS、Apache{Web服务器一Ph处理HTML面的功能,另外它还是一个Servlet和JSP容器Q独立的Servlet容器是Tomcat的默认模式?br />二.Z么需要整?

整合的最主要原因是ؓ了在现有的硬件条件下提供最大的负蝲?

如果单独使用Tomcat做JSP服务器,在工作效率上会存在问?Tomcat处理静态HTML的能力不如ApacheQƈ且所能承受的最大ƈ发连接数也有一定的限制Q?

在测试中Q当q发q接较多ӞTomcat׃处于“僵歠Z状态,对后l的hq接失去响应。所以现在提Z个“整合”解x案:html?jsp的功能部分进行明分工,让tomcat只处理jsp部分Q其它的由apacheq个web server处理。Apache与Tomcat各司其职Q那么服务器的整体效率就能够得到提升?
三.整合的基本原?

作ؓApache下面的子目QTomcat ?Apache之间有着天然的联pR在实际操作中,主要是Apache作ؓL务器q行Q当监听到有jsp或者servlet的请求时Q将h转发l?tomcat服务器,由tomcat服务器进行解析后Q发回apacheQ再由apache发回用户?

在tomcat中有两个监听的端口,一个是8080用于提供web服务,一个是8009用于监听来自于apache的请求。当apache收到 jsp或者servlethӞ向tomcat ?009端口发送请求,交由tomcat处理后,再返回给apacheQ由apacheq回l客戗?
四.安装Apache与Tomcat服务?

   操作pȝ环境QWindows xp home

   安装文gQapache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so
  到apache 与tomcat 的官方网站上面下载apache 与tomcatQ安装apache与tomcat

     到http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下蝲 mod_jk-apache-2.2.4.so

     mod_jk-apache-2.2.4.so拯到apache安装目录下面的modules目录中?

五.修改Tomcat讄

     在tomcat的conf目录下徏一个workers.properties的文本文Ӟd如下配置 

     workers.tomcat_home="tomcat安装目录"

     #让mod_jk模块知道Tomcat的安装\?

     workers.java_home="java安装目录"

     #让mod_jk模块知道jdk路径

     ps="

     worker.list=ajp13

     #q里是关键,名字要和httpd.conf的一致。如果这里改了httpd.conf也要攏V?

     worker.ajp13.port=8009

     #工作端口,tomcat的jk监听端口Q可以查看Server.xml中有port="8009"           

     worker.ajp13.host=localhost

     #Tomcat所在机器,如果安装在与apache不同的机器则需要设|IP

     worker.ajp13.type=ajp13

     #cdQ好像不能改Q会出问?

     worker.ajp13.lbfactor=1

     #负蝲q因子   

六.修改Apache讄

修改apache安装目录下conf目录下的httpd.conf,增加如下配置

  LoadModule jk_module modules/mod_jk-apache-2.2.4.so

       JkWorkersFile "tomcat安装目录/conf/workers.properties"

    JkLogFile "apache安装目录/logs/mod_jk.log" 

      JkMount /*.jsp ajp13

      JkMount /*.do ajp13

七.整合操作说明
  mod_jk-apache-2.2.4.so相当于是apache与tomcat之间的桥梁一P所以在apache的配|文件下面加上LoadModule jk_module modules/mod_jk-apache-2.2.4.so 此模块载入?

JkWorkersFile "tomcat安装目录/conf/workers.properties" 说明了mod_jk-apache-2.2.4.so 如何工作Q当出现要{发时Q将h发送到那里q行处理Q代表了一pd的工作参数?br />      JkLogFile "apache安装目录/logs/mod_jk.log" 讑֮日志的地址?

JkMount 说明了将什么样的URLq行发送到tomcatq行处理。JkMount /*.jsp ajp13 说明了要jsph发到tomcat,JkMount /*.do ajp13说明了要?do型的servlet发到tomcatq行处理。在实际的分发中Q如果servlet命名不带后缀的话Q将无法被识别,也就无法q行处理?br /> 
 八.l束?
       在查阅了不少文章之后Q我仔细的了解了下这两者进行整合的q程Q网上很多文章讲的整合应该不是真正意义上面的整合,希望此文章能够ؓ正ؓq些问题苦恼的同行们解决一点小困难……?/p>

飞熊 2010-08-18 23:24 发表评论
]]>
Apache HTTP Server ?Tomcat 的三U连接方式介l?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/08/18/329286.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 18 Aug 2010 15:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/08/18/329286.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/329286.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/08/18/329286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/329286.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/329286.html</trackback:ping><description><![CDATA[ <blockquote>整合 Apache Http Server ?Tomcat 可以提升寚w态文件的处理性能、利?Web 服务器来做负载均衡以及容错、无~的升应用E序。本文介l了三种整合 Apache ?Tomcat 的方式?/blockquote> <!--START RESERVED FOR FUTURE USE INCLUDE FILES--> <!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES--> <p>首先我们先介l一下ؓ什么要?Apache ?Tomcat 之间q行q接。事实上 Tomcat 本n已经提供?HTTP 服务Q该服务默认的端口是 8080Q装?tomcat 后通过 8080 端口可以直接使用 Tomcat 所q行的应用程序,你也可以该端口改ؓ 80?/p> <p>既然 Tomcat 本n已经可以提供q样的服务,我们Z么还要引?Apache 或者其他的一些专门的 HTTP 服务器呢Q原因有下面几个Q?/p> <p>1. 提升寚w态文件的处理性能</p> <p>2. 利用 Web 服务器来做负载均衡以及容?/p> <p>3. 无缝的升U应用程?/p> <p>q三点对一?web |站来说是非怹重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因ؓ某个 Tomcat 宕机或者是升E序D用户讉K不了Q而能完成q几个功能的、最好的 HTTP 服务器也只?apache ?http server 了,它跟 tomcat 的结合是最紧密和可靠的?/p> <p>接下来我们介l三U方法将 apache ?tomcat 整合在一赗?/p> <p> <a name="N10058"> <span id="wmqeeuq" class="atitle">JK</span> </a> </p> <p>q是最常见的方式,你可以在|上扑ֈ很多关于配置JK的网,当然最全的q是其官Ҏ提供的文档。JK 本n有两个版本分别是 1 ?2Q目?1 最新的版本?1.2.19Q而版?2 早已l废弃了Q以后不再有新版本的推出了,所以徏议你采用版本 1?/p> <p>JK 是通过 AJP 协议?Tomcat 服务器进行通讯的,Tomcat 默认?AJP Connector 的端口是 8009。JK 本n提供了一个监控以及管理的面 jkstatusQ通过 jkstatus 可以监控 JK 目前的工作状态以及对?tomcat 的连接进行设|,如下图所C:</p> <br /> <a name="N10066"> <b>?1Q监控以及管理的面 jkstatus</b> </a> <br /> <img height="228" alt="?1Q监控以及管理的面 jkstatus" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image002.jpg" width="554" border="0" /> <br /> <p>在这个图中我们可以看到当前JK配了两个q接分别?8109 ?8209 端口上,目前 s2 q个q接是停止状态,?s1 q个q接自上ơ重启后已经处理?47 万多个请求,量辑ֈ 6.2 ?GQ最大的q发数有 13 {等。我们也可以利用 jkstatus 的管理功能来切换 JK C同的 Tomcat 上,例如?s2 启用Qƈ停用 s1Q这个在更新应用E序的时候非常有用,而且整个切换q程对用h说是透明的,也就辑ֈ了无~升U的目的。关?JK 的配|文章网上已l非常多了,q里我们不再详细的介l整个配|过E,但我要讲一下配|的思\Q只要明白了配置的思\QJK 是一个非常灵zȝlg?/p> <p>JK 的配|最关键的有三个文gQ分别是 </p> <p> <b>httpd.conf </b> <br />Apache 服务器的配置文gQ用来加?JK 模块以及指定 JK 配置文g信息</p> <p> <b>workers.properties</b> <br />?Tomcat 服务器的q接定义文g</p> <p> <b>uriworkermap.properties</b> <br />URI 映射文gQ用来指定哪?URL ?Tomcat 处理Q你也可以直接在 httpd.conf 中配|这?URIQ但是独立这些配|的好处?JK 模块会定期更新该文g的内容,使得我们修改配置的时候无需重新启动 Apache 服务器?/p> <p>其中W二、三个配|文件名都可以自定义。下面是一个典型的 httpd.conf ?JK 的配|?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"># (httpd.conf) # 加蝲 mod_jk 模块 LoadModule jk_module modules/mod_jk.so # # Configure mod_jk # JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log JkLogLevel warn </pre> </td> </tr> </tbody> </table> <br /> <p>接下来我们在 Apache ?conf 目录下新Z个文件分别是 workers.properties、uriworkermap.properties。这两个文g的内容大概如?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"># # workers.properties # # list the workers by name worker.list=DLOG4J, status # localhost server 1 # ------------------------ worker.s1.port=8109 worker.s1.host=localhost worker.s1.type=ajp13 # localhost server 2 # ------------------------ worker.s2.port=8209 worker.s2.host=localhost worker.s2.type=ajp13 worker.s2.stopped=1 worker.DLOG4J.type=lb worker.retries=3 worker.DLOG4J.balanced_workers=s1, s2 worker.DLOG4J.sticky_session=1 worker.status.type=status </pre> </td> </tr> </tbody> </table> <br /> <p>以上?workers.properties 配置是我们前面那个屏幕抓图的页面所用的配置。首先我们配|了两个cd?ajp13 ?worker 分别?s1 ?s2Q它们指向同一台服务器上运行在两个不同端口 8109 ?8209 ?Tomcat 上。接下来我们配置了一个类型ؓ lbQ也是负蝲均衡的意思)?workerQ它的名字是 DLOG4JQ这是一个逻辑?workerQ它用来理前面配置的两个物理连?s1 ?s2。最后还配置了一个类型ؓ status ?workerQ这是用来监?JK 本n的模块。有了这三个 worker q不够,我们q需要告?JKQ哪?worker 是可用的Q所以就?<b>worker.list = DLOG4J, status</b> q行配置?/p> <p>接下来便?URI 的映配|了Q我们需要指定哪些链接是?Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面q个文g你就能明白其中配|的意义</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">/*=DLOG4J /jkstatus=status !/*.gif=DLOG4J !/*.jpg=DLOG4J !/*.png=DLOG4J !/*.css=DLOG4J !/*.js=DLOG4J !/*.htm=DLOG4J !/*.html=DLOG4J </pre> </td> </tr> </tbody> </table> <br /> <p>怿你已l明白了一大半了:所有的h都由 DLOG4J q个 worker q行处理Q但是有几个例外Q?jkstatus h?status q个 worker 处理。另外这个配|中每一行数据前面的感叹h什么意思呢Q感叹号表示接下来的 URI 不要?JK q行处理Q也是 Apache 直接处理所有的囄、css 文g、js 文g以及静?html 文本文g?/p> <p>通过?workers.properties ?uriworkermap.properties 的配|,可以有各U各Ll合来满x们前面提出对一?web |站的要求。您不妨动手试试Q?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /> <br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /> </td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td> <img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /> <br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="center"> </td> <td valign="top" align="right"> <a class="fbox" > <b> </b> </a> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p> <a name="N100C4"> <span id="wmqeeuq" class="atitle">http_proxy</span> </a> </p> <p>q是利用 Apache 自带?mod_proxy 模块使用代理技术来q接 Tomcat。在配置之前L保是否用的?2.2.x 版本?Apache 服务器。因?2.2.x 版本对这个模块进行了重写Q大大的增强了其功能和稳定性?/p> <p>http_proxy 模式是基?HTTP 协议的代理,因此它要?Tomcat 必须提供 HTTP 服务Q也是说必d?Tomcat ?HTTP Connector。一个最单的配置如下</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / http://localhost:8080/ </pre> </td> </tr> </tbody> </table> <br /> <p>在这个配|中Q我们把所?http://localhost 的请求代理到 http://localhost:8080/ Q这也就?Tomcat 的访问地址Q除?images、css、js 几个目录除外。我们同样可以利?mod_proxy 来做负蝲均衡Q再看看下面q个配置</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy> </pre> </td> </tr> </tbody> </table> <br /> <p>配置?JK 单多了,而且它也可以通过一个页面来监控集群q行的状态,q做一些简单的l护讄?/p> <br /> <a name="N100EA"> <b>?2Q监控集运行状?/b> </a> <br /> <img height="427" alt="?2Q监控集运行状? src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image004.gif" width="553" border="0" /> <br /> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /> <br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /> </td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td> <img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /> <br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="center"> <br /></td> <td valign="top" align="right"> <a class="fbox" > <b> </b> </a> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p> <a name="N100FA"> <span id="wmqeeuq" class="atitle">ajp_proxy</span> </a> </p> <p>ajp_proxy q接方式其实?http_proxy 方式一P都是?mod_proxy 所提供的功能。配|也是一P只需要把 http:// 换成 ajp:// Q同时连接的?Tomcat ?AJP Connector 所在的端口。上面例子的配置可以改ؓQ?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember ajp://server1:8080/ BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/ </Proxy> </pre> </td> </tr> </tbody> </table> <br /> <p>采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.soQ?其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加?mod_proxy.so ?mod_proxy_http.soQ如果是 ajp_proxy 则需要加?mod_proxy.so ?mod_proxy_ajp.soq两个模块?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /> <br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /> </td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td> <img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /> <br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="center"> <img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /> <br /> </td> <td valign="top" align="right"> <a class="fbox" > <b> <font color="#5c81a7">回页?/font> </b> </a> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p> <a name="N1010F"> <span id="wmqeeuq" class="atitle">三者比?/span> </a> </p> <p>相对?JK 的连接方式,后两U在配置上是比较单的Q灵zL方面也一炚w不逊色。但q定性而言׃?JK q样久经考验Q毕?Apache 2.2.3 推出的时间ƈ不长Q采用这U连接方式的|站q不多,因此Q如果是应用于关键的互联|网站,q是采用 JK 的连接方式?/p> <br /> <br /> <p> <a name="resources"> <span id="wmqeeuq" class="atitle">参考资?</span> </a> </p> <ul> <li>获得 <a ><font color="#996699">Apache Http Server</font></a>?<br /><br /></li> <li>获得 <a ><font color="#5c81a7">Apache Tomcat</font></a>?<br /><br /></li> <li> <a > <font color="#5c81a7">JK 文档</font> </a>?</li> </ul> <img src ="http://www.aygfsteel.com/kyleYang/aggbug/329286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-08-18 23:17 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/08/18/329286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解析Java对象的equals()和hashCode()的?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328469.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 11 Aug 2010 00:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328469.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/328469.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/328469.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/328469.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="Content-body" id="logcontent_82" style="TABLE-LAYOUT: fixed"> <strong>前言</strong> <br /> <p>在Java语言中,equals()和hashCode()两个函数的用是紧密配合的,你要是自p计其中一个,p设计另外一个。在多数情况 下,q两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下Q这两个函数最好是自己设计Q才能确保整个程序的正常q行。最常见的是?一个对象被加入攉对象Qcollection objectQ时Q这两个函数必须自己设计。更l化的定义是Q如果你惛_一个对象A攑օ另一个收集对象B里,或者用这个对象A为查找一个元对象在收集对 象B里位|的钥匙Qƈ支持是否容纳Q删除收集对象B里的元对象这L操作Q那么,equals()和hashCode()函数必须开发者自己定义。其他情 况下Q这两个函数是不需要定义的?/p> <strong>equals():</strong> <p>它是用于q行两个对象的比较的Q是对象内容的比较,当然也能用于q行对象参阅值的比较。什么是对象参阅值的比较Q就是两个参阅变量的值得比较Q我?都知道参阅变量的值其实就是一个数字,q个数字可以看成是鉴别不同对象的代号。两个对象参阅值的比较Q就是两个数字的比较Q两个代L比较。这U比较是?认的对象比较方式Q在Objectq个对象中,q种方式已l设计好了。所以你也不用自己来重写Q浪费不必要的时间?/p>对象内容的比较才是设计equals()的真正目的,Java语言对equals()的要求如下,q些要求是必遵循的。否则,你就不该费旉Q? <ul><li>对称性:如果x.equals(y)q回是“true”,那么y.equals(x)也应该返回是“true”? </li><li>反射性:x.equals(x)必须q回是“true”? </li><li>cL性:如果x.equals(y)q回是“true”,而且y.equals(z)q回是“true”,那么z.equals(x)也应该返回是“true”? </li><li>q有一致性:如果x.equals(y)q回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少ơ,q回都是“true”? </li><li>M情况下,x.equals(null)Q永q返回是“false”;x.equals(和x不同cd的对?永远q回是“false”?/li></ul><strong>hashCode():<br /></strong>q?个函数返回的是一个用来进行赫希操作的整型代号Q请不要把这个代号和前面所说的参阅变量所代表的代号弄混了。后者不仅仅是个代号q具有在内存中才查找?象的位置的功能。hashCode()所q回的值是用来分类对象在一些特定的攉对象中的位置。这些对象是HashMap, Hashtable, HashSetQ等{。这个函数和上面的equals()函数必须自己设计Q用来协助HashMap, Hashtable, HashSetQ等{对自己所攉的大量对象进行搜d定位?br /><br />q些攉对象I竟如何工作的,惌每个元对象hashCode是一个箱子的 ~码Q按照编码,每个元对象就是根据hashCode()提供的代号归入相应的子里。所有的子加v来就是一个HashSetQHashMapQ或 Hashtable对象Q我们需要寻找一个元对象Ӟ先看它的代码Q就是hashCode()q回的整型|q样我们扑ֈ它所在的子Q然后在子里,?个元对象都拿出来一个个和我们要扄对象q行ҎQ如果两个对象的内容相等Q我们的搜寻也就l束。这U操作需要两个重要的信息Q一是对象的 hashCode()Q还有一个是对象内容Ҏ的结果?br /><br />hashCode()的返回值和equals()的关pd下:<br /><ul><li>如果x.equals(y)q回“true”,那么x和y的hashCode()必须相等? </li><li>如果x.equals(y)q回“false”,那么x和y的hashCode()有可能相{,也有可能不等?/li></ul><p><br />Z么这两个规则是这LQ原因其实很单,拿HashSet来说吧,HashSet可以拥有一个或更多的箱子,在同一个箱子中可以有一?或更多的独特元对象(HashSet所容纳的必L独特的元对象Q。这个例子说明一个元对象可以和其他不同的元对象拥有相同的hashCode。但是一?元对象只能和拥有同样内容的元对象相等。所以这两个规则必须成立?br /><br /><strong>设计q两个函数所要注意到的:</strong><br />如果你设计的对象cdq不使用于收集性对象,那么没有必要自己再设计这两个函数的处理方式。这是正的面向对象设计ҎQQ何用户一时用不到的功能,先不要设计Q以免给日后功能扩展带来ȝ?/p><p>如果你在设计时想别出心裁Q不遵守以上的两套规则,那么劝你q是不要做这h入非非的事。我q没有遇到过哪一个开发者和我说设计q两个函数要q背前面说的两个规则Q我到q些q反规则的情冉|Q都是作计错误处理?/p><p>当一个对象类型作为收集型对象的元对象Ӟq个对象应该拥有自己处理equals()Q和/或处理hashCode()的设计,而且要遵守前面所?的两U原则。equals()先要查null和是否是同一cd。查同一cd是ؓ了避免出现ClassCastExceptionq样的异常给丢出来。查 null是ؓ了避免出现NullPointerExceptionq样的异常给丢出来?/p>如果你的对象里面容纳的数据过多,那么q两个函?equals()和hashCode()会变得效率低。如果对象中拥有无法serialized的数据,equals()有可能在操作中出现错误。想?一个对象xQ它的一个整型数据是transient型(不能被serialize成二q制数据)。然而equals()和hashCode()都有依靠 q个整型数据Q那么,q个对象在serialization之前和之后,是否一P{案是不一栗因为serialization之前的整型数据是有效?数据Q在serialization之后Q这个整型数据的值ƈ没有存储下来Q再重新׃q制数据{换成对象后,两者(对象在serialization 之前和之后)的状态已l不同了。这也是要注意的?br /><br /><span style="FONT-WEIGHT: bold">知道以上q些能够帮助你:</span><br />1. q行更好的设计和开发?br />2. q行更好的测试案例开发?br />3. 在面试过E中让面试者对你的学识渊博感到满意?</div> <div id="wmqeeuq" class="Content-body"> <img style="MARGIN: 0px 2px -4px 0px" alt="" src="http://tmsoft.lsxy.com/images/icon_trackback.gif" /> <strong>引用通告地址:</strong> <span id="tbURL" title="点击复制到剪贴板" style="CURSOR: pointer" onclick="CopyText(document.all.tbURL)"> <a >http://tmsoft.lsxy.com/trackback.php?tbID=82&extra=9aff4c</a> </span> </div> <img src ="http://www.aygfsteel.com/kyleYang/aggbug/328469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-08-11 08:44 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript跨浏览器的添加删除事件绑定函?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328466.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 11 Aug 2010 00:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328466.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/328466.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/328466.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/328466.html</trackback:ping><description><![CDATA[ <h3>javascript跨浏览器d事gl定 bind()</h3> <p sizset="17" sizcache="4">IE ?strong>事gl定</strong>函数?strong> attachEvent</strong>Q?<a title="Firefox" ><font color="#2f63b3">Firefox</font></a>, Safari ?<strong>addEventListener</strong>QOpera 则两U都支持。用jQuery可以用简单的bind()Q或?().click()之类的函数解冻I而如果不使用<a title="JavaScript" ><font color="#2f63b3">JavaScript</font></a>框架的时候,大家可是使用下面的封装bind()函数。      ?<br /><span style="COLOR: #006600; FONT-STYLE: italic">/************************************<br />* d事gl定<br />* @param obj   : 要绑定事件的元素<br />* @param type : 事g名称。不?"on". ?: "click" 而不?"onclick".<br />* @param fn    : 事g处理函数<br />************************************/</span><br /><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span> bind<span style="COLOR: #009900">(</span> obj<span style="COLOR: #339933">,</span> type<span style="COLOR: #339933">,</span> fn <span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="FONT-WEIGHT: bold; COLOR: #000066">if</span><span style="COLOR: #009900">(</span> obj.<span style="COLOR: #660066">attachEvent</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><br />        obj<span style="COLOR: #009900">[</span><span style="COLOR: #3366cc">'e'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span> fn<span style="COLOR: #339933">;</span><br />        obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span>obj<span style="COLOR: #009900">[</span><span style="COLOR: #3366cc">'e'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">(</span> window.<span style="COLOR: #660066">event</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><br />        obj.<span style="COLOR: #660066">attachEvent</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">'on'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">,</span> obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="FONT-WEIGHT: bold; COLOR: #000066">else</span><br />        obj.<span style="COLOR: #660066">addEventListener</span><span style="COLOR: #009900">(</span> type<span style="COLOR: #339933">,</span> fn<span style="COLOR: #339933">,</span><span style="FONT-WEIGHT: bold; COLOR: #003366">false</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span></p> <p> <span id="more-408"> </span>例如ldocumentd一个点M件     ?<br /><span style="FONT-WEIGHT: bold; COLOR: #003366">var</span> fn<span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="COLOR: #000066">alert</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">"Hello, World!!"</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="COLOR: #339933">;</span><br />bind<span style="COLOR: #009900">(</span>document<span style="COLOR: #339933">,</span><span style="COLOR: #3366cc">"click"</span><span style="COLOR: #339933">,</span> fn<span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span></p> <h3>删除事gl定 unbind()</h3> <p>unbind()对于上面的bind()函数       <br /><span style="COLOR: #006600; FONT-STYLE: italic">/************************************<br /> * 删除事gl定<br /> * @param obj : 要删除事件的元素<br /> * @param type : 事g名称。不?"on". ?: "click" 而不?"onclick"<br /> * @param fn : 事g处理函数<br /> ************************************/</span><br /><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span> unbind<span style="COLOR: #009900">(</span> obj<span style="COLOR: #339933">,</span> type<span style="COLOR: #339933">,</span> fn <span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="FONT-WEIGHT: bold; COLOR: #000066">if</span><span style="COLOR: #009900">(</span> obj.<span style="COLOR: #660066">detachEvent</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><br />        obj.<span style="COLOR: #660066">detachEvent</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">'on'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">,</span> obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><br />        obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">null</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="FONT-WEIGHT: bold; COLOR: #000066">else</span><br />        obj.<span style="COLOR: #660066">removeEventListener</span><span style="COLOR: #009900">(</span> type<span style="COLOR: #339933">,</span> fn<span style="COLOR: #339933">,</span><span style="FONT-WEIGHT: bold; COLOR: #003366">false</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span></p> <p>例如删除W一个绑定的document点击事gQ?br />unbind<span style="COLOR: #009900">(</span>document<span style="COLOR: #339933">,</span><span style="COLOR: #3366cc">"click"</span><span style="COLOR: #339933">,</span>fn<span style="COLOR: #009900">)</span><span style="COLOR: #339933">;<br />摘自Q?a >http://www.js8.in/408.html</a></span></p> <img src ="http://www.aygfsteel.com/kyleYang/aggbug/328466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-08-11 08:30 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现JavaScript跨浏览器http://www.aygfsteel.com/kyleYang/archive/2010/08/11/328465.html飞熊飞熊Wed, 11 Aug 2010 00:28:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/11/328465.htmlhttp://www.aygfsteel.com/kyleYang/comments/328465.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/11/328465.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/328465.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/328465.html开发跨览器的JavaScriptQƈ不是一件很Ҏ的事Q下面是一些经验ȝ?/p>

一、动态向表中d?/p>

  • 问题QIE中,不能行增加到表table?
  • 解决ҎQ将行增加到表体tbody?
  • CZQ?a >点击查看

二、动态设|元素style属?/p>

  • 问题QIE下支持object.style.cssText="style:value"QFirefox下用object.setAttribute("style", value)
  • 解决ҎQ统一用object.style.属性=倹{?
  • CZQ?a >点击查看

三、动态设|元素的Class属?/p>

  • 问题QIE下用object.setAttribute("className", value)QFirefox下用object.setAttribute("class", value)?
  • 解决ҎQ统一用object.className=value?
  • CZQ?a >点击查看

四、动态创建Input元素

  • 问题QIE中先d元素Q后讄的属性不起作用?
  • 解决ҎQ先d属性,再添加元素?
  • CZQ?a >点击查看

五、动态设|标{ֆ?/p>

  • 问题QIE中用innerText属性,相反圎ͼFirefox下用textContent属性?
  • 解决ҎQ先判断览器类型,再分别设|,当然也可以同时设|。还有一U方法就是用innerHTML来替换?
  • CZQ?a >点击查看

六、增加和删除Option

  • 问题Q增加OptionӞFirefox下不支持object.addҎ。删除OptionӞFirefox下不支持object.options .removeҎ?
  • 解决ҎQ增加OptionӞ使用object.options.addҎ。删除OptionӞ使用object.removeҎ。另外也可以用DOM的AppendChild和removeChildҎ?
  • CZQ?a >点击查看 

七、动态创建单选按?/p>

  • 问题QIE不能用setAttributeҎdname属性,相反圎ͼFirefox下不能用createElement(htmlStr)来添加name属性?
  • 解决ҎQ先判断览器类型,再分别设|。当然也可以同时讄?
  • CZQ?a >点击查看

八、document.formName.item("itemName")

  • 问题QIE下,可以使用 document.formName.item("itemName") ?document.formName.elements ["elementName"]QFirefox下,只能使用document.formName.elements["elementName"]?
  • 解决ҎQ统一使用document.formName.elements["elementName"]?

九、动态创建单选按?/p>

  • 问题QIE下,可以使用()或[]获取集合cd象;Firefox下,只能使用 []获取集合cd象?
  • 解决ҎQ统一使用[]获取集合cd象?

十、自定义属?/p>

  • 问题QIE下,可以使用获取常规属性的Ҏ来获取自定义属性,也可以?getAttribute() 获取自定义属性;Firefox下,只能使用 getAttribute() 获取自定义属?
  • 解决ҎQ统一通过 getAttribute() 获取自定义属性?

十一、eval("idName")

  • 问题QIE下,可以使用 eval("idName") ?getElementById("idName") 来取?id ?idName 的HTML对象QFirefox下,只能使用 getElementById("idName") 来取?id ?idName 的HTML对象?
  • 解决ҎQ统一?getElementById("idName") 来取?id ?idName 的HTML对象?

十二、event.srcElement

  • 问题QIE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性?
  • 解决ҎQ用srcObj = event.srcElement ? event.srcElement : event.target;

十三、访问的父元?/p>

  • 问题Q在IE下,使用obj.parentElement或obj.parentNode讉Kobj的父l点Q在firefox下,使用obj.parentNode讉Kobj的父l点?
  • 解决ҎQ因为firefox与IE都支持DOMQ因此统一使用obj.parentNode 来访问obj的父l点?

十四、innerText

  • 问题QinnerText在IE中能正常工作Q但是innerText在FireFox中却不行?
  • 解决ҎQ在非IE览器中使用textContent代替innerText?

十五、模态和非模态窗口问?/p>

  • 问题QIE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能?
  • 解决ҎQ直接?window.open(pageURL,name,parameters) 方式打开新窗口。如果需要将子窗口中的参C递回父窗口,可以在子H口中用window.opener来访问父H口。如果需要父H口控制子窗口的话,使用var subWindow = window.open(pageURL,name,parameters); 来获得新开的窗口对象?

十六、frame和iframe问题

  • 问题Q要讉Kframe对象QIE下用window.frameId或者window.frameName来访问这个frame对象QFirefox下用window.frameName来访问这个frame对象Q?
  • 解决ҎQ统一使用 window.document.getElementById("frameId") 来访问这个frame对象。在IE和Firefox中都可以使用window.document.getElementById("frameId").src 或window.frameName.location来切换frame的内容;如果需要将frame中的参数传回父窗口,可以在frame中用parent关键字来讉K父窗口?/li>


飞熊 2010-08-11 08:28 发表评论
]]>
oracle中显式游标和隐式游标比较http://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.html飞熊飞熊Tue, 10 Aug 2010 07:29:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.htmlhttp://www.aygfsteel.com/kyleYang/comments/328420.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/328420.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/328420.html    在数据库中,游标是一个十分重要的概念Q游标提供了一U灵zLD,可以对表中检索出的数据进行操作。就本质而言Q游标实际上是一U能从包括多条数据记录的l果集中每次提取一条记录的机制?br />   游标q果集和结果集中指向特定记录的游标位置l成Q游标充当指针的作用。尽游标能够遍历查询结果中的所有行Q但它一ơ只能指向一行?br />   使用数据游标可以选择一l数据,可以在记录集上滚动游标,q检查游标指向的每一行数据。可以用局部变量和游标的组合来分别查每个记录,q在转移C一个记录之前,q行所需的Q何外部操作。游标的另一个常见用途是保存查询l果Q以便以后用。游标的l果集是由select语句产生Q如果处理过E需要重复用一个记录集Q那么创Zơ游标而重复用若q次Q比重复查询数据库要快得多?br />    昑ּ游标
    在大多数时候我们在设计E序的时候都遵@下面的步?
   1、打开游标
   2、开始@?br />   3、从游标中取?br />    4、检查那一行被q回
    5、处?br />    6、关闭@?br />    7、关闭游?br />但还有一U游标与q种不相同,q就是FOR循环Q用于FOR循环的游标按照正常的声明方式声明Q它的优点在于不需要显式的打开、关闭、取数据Q测试数据的存在、定义存放数据的变量{等?/font>


飞熊 2010-08-10 15:29 发表评论
]]>
Oracle Exceptionhttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.html飞熊飞熊Tue, 03 Aug 2010 03:32:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.htmlhttp://www.aygfsteel.com/kyleYang/comments/327806.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/327806.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/327806.html  BEGIN
    ... --语句
  EXCEPTION -- 例外处理
    WHEN ...
    ...
    WHEN OTHERS
      ...
  END;

  2) 常用预定义例?br />  EXCEPTION
    WHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 游标已经打开
      ...
    WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重复数?br />      ...
    WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法游标操作
      ...
    WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字符向数字{换失?br />      ...
    WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017
      ...
    WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 没有扑ֈ数据
      ...
    WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012
      ...
    WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 E序错误
      ...
    WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500
      ...
    WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51
      ...
    WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 q回多行
      ...
    WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61
      ...
    WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 数D{换错?br />      ...
    WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零?br />      ...
    WHEN OTHERS THEN -- 其它M错误的处?br />      ...
  END;

  3) 用户定义的例?br />  DECLARE
    FIND_DATA_EMP    EXCEPTION;
  BEGIN
    IF ... THEN
      RAISE FIND_DATA_EMP;
    END IF;
  EXCEPTION
    WHEN LOB_NO_LOCKED THEN
      ...
  END;
  4) EXCEPTION_INIT的?br />  PRAGMA EXCEPTION_INIT(例外? ORACLE错误?;
  注:PRAGMA 是一个编译器命oQ可以认为是对编译器的一个注释?br />  例:
  DECLARE
    ZERO_DIVIDE1    EXCEPTION;
    PRAGMA EXCEPTION_INIT(ZERO_DIVIDE1, -1476);
  BEGIN
    ...
  EXCEPTION
    WHEN ZERO_DIVIDE1 THEN
      ...
  END;



飞熊 2010-08-03 11:32 发表评论
]]>
DB2递归查询http://www.aygfsteel.com/kyleYang/archive/2010/07/30/327585.html飞熊飞熊Fri, 30 Jul 2010 08:36:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/07/30/327585.htmlhttp://www.aygfsteel.com/kyleYang/comments/327585.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/07/30/327585.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/327585.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/327585.htmldb2中的递归查询使用with来实玎ͼ也称为公p辑ּQ公p辑ּ在select语句的开始部分采用with子句的Ş式,在用公p辑ּ的查询中可以多次使用它,q且公共表达式还可以通过取别名来q接C本nQ这L话就可以辑ֈ循环的目的?br />递归查询通常?个部分需要定义:
一Q一个公p辑ּ形式的虚拟表?br />二:一个初始化表?br />三:一个与虚拟表进行完全内q接的辅助表?br />需要用UNION all合ƈ上边3个查询,然后用select从递归输出中得到最l的l果?br />大体上如下Ş?br />with XX(x1,x2,x3) as  -------@0
(
 select a.s,a.s1 from a  ----@1
 union all  ----@2
 select * from a,xx where a.s=xx.x1 ------@3
)
select ... from xx where .... -------@4
@0:为with体,卌拟表
@1:为初始化表,q里需要定义初始化的一些行Q也是你递归的出发点Q或者说父行Q这部分逻辑只执行一ơ,它的l果作ؓ虚拟表递归的初始化内容?br />@2:q里必须用UNION all
@3:q里需要定义递归的条Ӟ辅助表)Q这里定义递归的逻辑Q需要注意的是父行和子行q行q接的时候逻辑一定要清楚父子关系Q不然很Ҏ变成d@环的Q这里首先将初始化表的结果作为条件进行查询,在把执行的结果添加到虚拟表中Q只要这里能查询出来记录Q那么就会进行下一步递归循环?br />@4:q里是对虚拟表的查询语句?br />
例子Q?br />WITH ROOT AS
(
 SELECT a.id, a.areaname
 FROM AREATB a
 WHERE a.id = #id#
 UNION ALL
 SELECT a.id, a.areaname
 FROM AREATB a, ROOT r
 WHERE a.id = r.id
)

SELECT id, areaname
FROM ROOT



飞熊 2010-07-30 16:36 发表评论
]]>
oracle索引?U用模?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sun, 25 Jul 2010 16:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/327107.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/327107.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/327107.html</trackback:ping><description><![CDATA[索引的用对数据库的性能有巨大的影响?<br />共有五类不同的用模式?<br /><br />1。INDEX UNIQUE SCAN    效率最高,主键或唯一索引 <br />2。INDEX FULL SCAN      有顺序的输出Q不能ƈ行读索引 <br />3。INDEX FAST FULL SCAN  ȝ最块,可以q行讉K索引Q但输出不按序 <br />4。INDEX RANGE SCAN      l定的区间查?<br />5。INDEX SKIP SCAN       联合索引Q不同D的列,要攑֜前面 <br /><br />--实验后的总论?<br />能用唯一索引Q一定用唯一索引 <br />能加非空Q就加非I约?<br />一定要l计表的信息Q烦引的信息Q柱状图的信息?<br />联合索引的顺序不同,影响索引的选择Q尽量将值少的放在前?<br />只有做到以上四点Q数据库才会正确的选择执行计划?<br />conn system/manager <br />grant select any dictionary to scott; <br /><br />conn scott/tiger <br />drop table t1 purge; <br />create table t1 as select * from dba_objects; <br />analyze table t1 compute statistics; <br />create index it1 on t1(object_type); <br />set autot traceonly <br /><br />select distinct object_type from t1; <br />是全表扫描Qؓ什么不使用索引呢?因ؓ索引中不能含有null| <br />如果使用索引可能生不正确的结果?<br /><br />--增加非空U束 <br />alter table t1 modify (object_type not null); <br />select distinct object_type from t1  ; <br />使用INDEX FAST FULL SCAN方式查找数据 <br /><br />-- <br />select  object_type from t1; <br />使用INDEX FAST FULL SCANQ因Z需要排?<br /><br />select  object_type from t1 order by 1; <br />使用INDEX FULL SCAN,因ؓ要按照顺序输?<br /><br />select  object_type from t1 where object_type='TABLE'; <br />使用INDEX RANGE SCAN <br /><br />--使用非唯一索引 <br />create index i2t1 on t1(object_id); <br />select * from t1 where object_id=3762; <br />使用INDEX RANGE SCAN,因ؓ数据库不知道是否唯一 <br /><br />--使用唯一索引 <br />drop index i2t1; <br />create unique index i2t1 on t1(object_id); <br />使用INDEX UNIQUE SCAN,因ؓ数据库知道是唯一?<br /><br />--跌的扫描烦?<br />create index i3t1 on t1(object_type,object_name); <br />select * from t1 where object_name='EMP'; <br />select object_name from t1 where object_name='EMP'; <br />使用INDEX SKIP SCANQ因为数据库知道可以跌object_type,虽然object_name在第二个列?<br /><br />--联合索引的顺序不同,影响索引的选择Q尽量将值少的放在前?<br />drop index i3t1; <br />drop index it1; <br />create index i3t1 on t1(object_name,object_type); <br />select * from t1 where object_type='TABLE'; <br />计划为全表扫描?<img src ="http://www.aygfsteel.com/kyleYang/aggbug/327107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-07-26 00:28 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.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>