超碰免费在线观看,亚洲精品久久久久久一区二区,国产99亚洲http://www.aygfsteel.com/xcp/茍有恒,何必三更起五更眠;<br/>最無(wú)益,只怕一日曝十日寒.zh-cnMon, 16 Jun 2025 04:48:02 GMTMon, 16 Jun 2025 04:48:02 GMT60Nginx 配置文件詳解http://www.aygfsteel.com/xcp/archive/2017/12/22/432971.htmlxcpxcpFri, 22 Dec 2017 13:04:00 GMThttp://www.aygfsteel.com/xcp/archive/2017/12/22/432971.html、ip_hash(訪問(wèn)ip):每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。 #upstream favresin{ # ip_hash; # server 10.0.0.11:8080; #} &、fair(第三方):按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。與weight分配策略類(lèi)似。 #upstream favresin{ # server 10.0.0.10:8080; # fair; #} *、url_hash(第三方): 按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。 # 注意:在upstream中加入hash語(yǔ)句,server語(yǔ)句中不能寫(xiě)入weight等其他的參數(shù),hash_method是使用的hash算法。 #upstream resinserver{ # server 10.0.0.10:7777; # shash $request_uri; # hash_method crc32; #} # #upstream還可以為每個(gè)設(shè)備設(shè)置狀態(tài)值,這些狀態(tài)值的含義分別如下: #down 表示單前的server暫時(shí)不參與負(fù)載. #weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。 #max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤. #fail_timeout : max_fails次失敗后,暫停的時(shí)間。 #backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。 #upstream bakend{ #定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài) # ip_hash; # server 10.0.0.11:9090 down; # server 10.0.0.11:8080 weight=2; # server 10.0.0.11:6060; # server 10.0.0.11:7070 backup; # server 10.0.0.11:5050 weight=10 max_fails=3 fail_timeout=30s; #} upstream supxx.com { server 127.0.0.1:8080 weight=1; server 127.0.0.1:9090 weight=2; fair; } #當(dāng)前的Nginx的配置 server { #監(jiān)聽(tīng)端口,nginx 會(huì)根據(jù)請(qǐng)求的 HOST 來(lái)決定使用哪個(gè) SERVER 段的配置。如果沒(méi)有匹配的 server_name,則默認(rèn)使用配置文件中第一個(gè)。加上 default_server 則可以以指定沒(méi)有匹配時(shí)的默認(rèn)規(guī)則。 #listen 80; listen 80 default_server; #域名可以有多個(gè),用空格隔開(kāi) server_name www.supxx.com www.supxx.cn; #charset koi8-r; Eccess_log logs/host.access.log main; #配置 ssl,有需要時(shí)開(kāi)啟。 #ssl on; #ssl_certificate /etc/nginx/ssl/server.crt; #ssl_certificate_key /etc/nginx/ssl/server.key; #服務(wù)映射 #http://blog.csdn.net/heiyueya/article/details/70149270 #location的匹配種類(lèi)有哪些? #格式[空格|=|~|~*|^~|!~|!~*]/uri/{}] #=開(kāi)頭表示精確匹配 #~開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配 #~*開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配 #^~ 開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,理解為匹配 url路徑即可。nginx不對(duì)url做編碼,因此請(qǐng)求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。 #!~和!~*分別為區(qū)分大小寫(xiě)不匹配及不區(qū)分大小寫(xiě)不匹配 的正則 #/通用匹配, 如果沒(méi)有其它匹配,任何請(qǐng)求都會(huì)匹配到 # #location搜索順序 #no優(yōu)先級(jí):(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/) <.首先匹配= >.其次匹配^~ &.再其次按照配置文件的順序進(jìn)行正則匹配、 *.最后是交給/進(jìn)行通用匹配 # #注意: #當(dāng)有匹配成功時(shí),立刻停止匹配,按照當(dāng)前匹配規(guī)則處理請(qǐng)求 #特別注意: 字符串匹配優(yōu)先搜索,但是只是記錄下最長(zhǎng)的匹配 ( 如果 ^~ 是最長(zhǎng)的匹配,則會(huì)直接命中,停止搜索正則 ),然后繼續(xù)搜索正則匹配,如果有正則匹配,則命中正則匹配,如果沒(méi)有正則匹配,則命中最長(zhǎng)的字符串匹配. # # # #實(shí)際使用建議 #所以實(shí)際使用中,個(gè)人覺(jué)得至少有三個(gè)匹配規(guī)則定義,如下: #直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,官網(wǎng)如是說(shuō)。 #這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個(gè)靜態(tài)首頁(yè) # 第一個(gè)必選規(guī)則 #location = / { # proxy_pass http://tomcat:8080/index #} # 第二個(gè)必選規(guī)則是處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng) # 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用 #location ^~ /static/ { # root /webroot/static/; #} #location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { # root /webroot/res/; #} #第三個(gè)規(guī)則就是通用規(guī)則,用來(lái)轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器 #非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求,自己根據(jù)實(shí)際把握 #畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了 #location / { # proxy_pass http://tomcat:8080/ #} # # # # # # # # # location / { proxy_pass http://supxx.com; proxy_redirect default; } #圖片緩存時(shí)間設(shè)置 location ~* .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } #JS和CSS緩存時(shí)間設(shè)置 location ~* .*.(js|css)?$ { expires 1h; } *04頁(yè)面配置 #error_page 404 /404.html; o00頁(yè)面設(shè)置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }

xcp 2017-12-22 21:04 發(fā)表評(píng)論
]]>
解決ajax跨域訪問(wèn)問(wèn)題http://www.aygfsteel.com/xcp/archive/2016/05/06/430376.htmlxcpxcpFri, 06 May 2016 04:39:00 GMThttp://www.aygfsteel.com/xcp/archive/2016/05/06/430376.html前端js:
$.ajax({
       url:'http://localhost/xxxx/test', //后臺(tái)處理程序
          async:true,
          type:'get',         //數(shù)據(jù)發(fā)送方式
          dataType:'jsonp',     //接受數(shù)據(jù)格式
          jsonp: "callbackparam",//傳遞給請(qǐng)求處理程序或頁(yè)面的,用以獲得jsonp回調(diào)函數(shù)名的接受 的參數(shù)名(默認(rèn)為callback)
    /*jsonpCallback:"jsonpCallback",*///可選項(xiàng),寫(xiě)上表示返回函數(shù)的函數(shù)名用“ jsonpCallback”,不寫(xiě) 默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)
          success:function(result){
        var eTime = new Date(); //結(jié)束時(shí)間
        
        //設(shè)置在線人數(shù)
        $("#server_count_1").html(result+"人"); 
       },
       error:function(){
        alert("服務(wù)器1連接失敗");
       }
   });




后端處理類(lèi):
@Override
 public String execute() throws Exception {
  int zxrs = SessionCounter.getRealCount();
  response.setContentType("text/plain");
     response.setCharacterEncoding("utf-8");
     String callbackparam=request.getParameter("callbackparam");
     //System.out.println("callbackparam:"+callbackparam);
     PrintWriter writer=response.getWriter();
    
     //如果ajax請(qǐng)求寫(xiě)了 jsonpCallback:"jsonpCallback",
     //writer.write("jsonpCallback("+zxrs+")");
    
     //如果ajax請(qǐng)求沒(méi)有寫(xiě) jsonpCallback:"jsonpCallback",
     writer.write(callbackparam+"("+zxrs+")");//需要callbackparam參數(shù)接收隨機(jī)函數(shù)名
  return null;
 }


xcp 2016-05-06 12:39 發(fā)表評(píng)論
]]>
同一服務(wù)器 應(yīng)用的Session沖突http://www.aygfsteel.com/xcp/archive/2016/05/06/430375.htmlxcpxcpFri, 06 May 2016 04:33:00 GMThttp://www.aygfsteel.com/xcp/archive/2016/05/06/430375.html使用apache反向代理解決在應(yīng)用A使用Iframe嵌入應(yīng)用B的功能而產(chǎn)生的跨域問(wèn)題后,應(yīng)用B的功能能正常使用了。但也產(chǎn)生了另外一個(gè)問(wèn)題:打開(kāi)應(yīng)用A的任何頁(yè)面都會(huì)跳轉(zhuǎn)主頁(yè),問(wèn)題原因是:session丟失。

具體分析:

session是通過(guò)在客戶(hù)端生成一個(gè)cookie,所有請(qǐng)求會(huì)帶上這個(gè)cookie。一個(gè)cookie的NAME、Domain和Path屬性值均相同,則會(huì)覆蓋,若未設(shè)置Domain域,則域?yàn)閕p(不包括端口),因此應(yīng)用A的session被應(yīng)用B的session覆蓋了。


 

經(jīng)測(cè)試:tomcat、weblogic、websphere的session默認(rèn)都是JSESSIONID 為key來(lái)識(shí)別的,因此在沒(méi)有特別設(shè)置下,同一個(gè)域下的多個(gè)應(yīng)用session會(huì)互相覆蓋。 

解決辦法:

設(shè)置各個(gè)應(yīng)用使用不同的cookie-name,或者將JSESSIONID的path路徑設(shè)置為不同。

1)WebLogic的Cookie相關(guān)配置:weblogic.xml

 

屬性名

默認(rèn)值
cookie-name JSESSIONID 如未設(shè)置,默認(rèn)為“JSESSIONID”
cookie-path NULL 如未設(shè)置,默認(rèn)為“/”
cookie-domain NULL 如未設(shè)置,默認(rèn)為發(fā)放cookie的服務(wù)器的域

 

示例代碼:  
1.  <session-descriptor2.  <session-param3.  <param-name>CookieName</param-name4.  <param-value>HADFCookie</param-value5.  </session-param6.  </session-descriptor>

 
延伸閱讀:1.  關(guān)于WebLogic的Session丟失的問(wèn)題  http://blog.csdn.net/DesignLife/article/details/2552186
          2. WebLogic如何設(shè)置session超時(shí)時(shí)間  http://tonyaction.blog.51cto.com/227462/201900
 
 

2)websphere的設(shè)置(設(shè)置不同JSESSIONID的path)

應(yīng)用程序->企業(yè)應(yīng)用程序-> [Application Server] ->
會(huì)話管理->1.覆蓋會(huì)話管理(需打鉤).
會(huì)話管理->2.啟用 cookie(需打鉤)->修改'Cookie路徑' 

 

3)Tomcat的設(shè)置(設(shè)置不同JSESSIONID的path)

修改tomcat/conf/server.xml: 

 

1.tomcat5修改方法

在啟動(dòng)項(xiàng)中增加org.apache.catalina.SESSION_COOKIE_NAME參數(shù)

linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

2.tomcat6和tomcat7修改方法相同

在Context容器標(biāo)簽上增加sessionCookieName參數(shù)

<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>

還可以加上sessionCookiePath

<Context ... sessionCookiePath="/" > ... </Context>

延伸閱讀:tomcat修改jsessionid在cookie中的名稱(chēng) http://blog.shilimin.com/338.htm



xcp 2016-05-06 12:33 發(fā)表評(píng)論
]]>
jms activemq完整實(shí)例http://www.aygfsteel.com/xcp/archive/2014/09/11/417837.htmlxcpxcpThu, 11 Sep 2014 05:53:00 GMThttp://www.aygfsteel.com/xcp/archive/2014/09/11/417837.html

xcp 2014-09-11 13:53 發(fā)表評(píng)論
]]>
Jfinal實(shí)例-北京豐帆佳宇運(yùn)輸有限公司http://www.aygfsteel.com/xcp/archive/2014/09/07/417749.htmlxcpxcpSun, 07 Sep 2014 12:43:00 GMThttp://www.aygfsteel.com/xcp/archive/2014/09/07/417749.htmlhttp://www.aygfsteel.com/xcp/comments/417749.htmlhttp://www.aygfsteel.com/xcp/archive/2014/09/07/417749.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/417749.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/417749.html閱讀全文

xcp 2014-09-07 20:43 發(fā)表評(píng)論
]]>
2014 年中國(guó)開(kāi)源優(yōu)秀項(xiàng)目獲獎(jiǎng)-Jfinalhttp://www.aygfsteel.com/xcp/archive/2014/09/07/417748.htmlxcpxcpSun, 07 Sep 2014 12:14:00 GMThttp://www.aygfsteel.com/xcp/archive/2014/09/07/417748.htmlhttp://www.aygfsteel.com/xcp/comments/417748.htmlhttp://www.aygfsteel.com/xcp/archive/2014/09/07/417748.html#Feedback1http://www.aygfsteel.com/xcp/comments/commentRss/417748.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/417748.html   開(kāi)源中國(guó)開(kāi)源世界"高峰論壇(簡(jiǎn)稱(chēng)"論壇")每年6月由中國(guó)開(kāi)源軟件推進(jìn)聯(lián)盟(COPU)主辦自2006年起,已成功舉辦八屆,是我國(guó)開(kāi)源界一年一度的盛 會(huì),影響 深遠(yuǎn),受到國(guó)內(nèi)外開(kāi)源組織、人士的高度關(guān)注,是開(kāi)源愛(ài)好者獲取最新開(kāi)源訊息的有效平臺(tái),有力地促進(jìn)了開(kāi)源領(lǐng)域國(guó)際與國(guó)內(nèi)、企業(yè)與 政府、企業(yè)與社區(qū)組織之間的合作與發(fā)展,已為國(guó)內(nèi)開(kāi)源界對(duì)外交流合作的一個(gè)重要窗口。今年第九屆論壇已于2014年6月27-28日(周五至 周六)在北京隆重召開(kāi)。(http://www.oschina.net/news/53265/2014-good-opensource-projects?from=20140706
     居然開(kāi)源項(xiàng)目Jfinal排在第一位,于是下定決心研究下。JFinal 是基于 Java 語(yǔ)言的極速 WEB + ORM 框架,其核心設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、代碼量少、學(xué)習(xí)簡(jiǎn)單、功能強(qiáng)大、輕量級(jí)、易擴(kuò)展、Restful。 在擁有Java語(yǔ)言所有優(yōu)勢(shì)的同時(shí)再擁有ruby、python、php等動(dòng)態(tài)語(yǔ)言的開(kāi)發(fā)效率!為您節(jié)約更多時(shí)間,去陪戀人、家人和朋友 :)
     然后花費(fèi)了3天時(shí)間研究下框架,正好幫朋友做一個(gè)公司網(wǎng)站,感覺(jué)框架不錯(cuò)。附實(shí)例網(wǎng)站(后面的文章將貼上源代碼)

  公司名稱(chēng):北京豐帆佳宇運(yùn)輸有限公司
    公司簡(jiǎn)介:渣土消納證辦理,大型支護(hù)土方深度開(kāi)挖,礦山暗挖,基坑開(kāi)挖,建筑垃圾清運(yùn),渣土清運(yùn),砂石料配送,工程機(jī)械租賃業(yè)務(wù)
      公司網(wǎng)址:www.bjffjy.com



xcp 2014-09-07 20:14 發(fā)表評(píng)論
]]>
微博返回頂部http://www.aygfsteel.com/xcp/archive/2013/05/02/398682.htmlxcpxcpThu, 02 May 2013 08:49:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/05/02/398682.html<style>
  a.W_gotop {
   display: none;
   position: fixed;
   _position: absolute;
   width: 22px;
   height: 85px;
   line-height: 12px;
   left: 50%;
   bottom: 100px;
   margin-left: 500px;
     margin-bottom: 5px;
     background-color: #F2F2F2;
     border: 1px solid #CCCCCC;
     border-radius:2px;
     text-align: center;
     text-decoration: none;
 }
 a.W_gotop span {
   cursor: pointer;
     display: block;
     height: 73px;
     padding-top: 10px;
     border: 1px solid #FFFFFF;
     text-decoration: none;
 }
 a.W_gotop em {
     cursor: pointer;
     text-decoration: none;
     font-style: normal;
     font-weight: normal;
 }
 .icon_gotop{
    background: url(images/gotop.png) no-repeat;
 }
 .W_gotop:hover .icon_gotop {
   background: url(images/gotop_focus.png) no-repeat;
 }
 .W_ico {
  display: inline-block;
    height: 12px;
    width: 12px;
    margin-bottom: 5px;
 }
 .W_txt{
    color: #808080;
 }
</style>
<a id="base_scrollToTop" class="W_gotop" style="visibility: visible;">
<span>
 <em class="W_ico icon_gotop"></em>
 <em class="W_txt">返回頂部</em>
</span>
</a>

<script type="text/javascript">
$(function(){
 var gotop = $(".W_gotop")
 gotop.click(function(){
  $("html,body").animate({scrollTop:0},500)
 });
 
 $(window).scroll(function(){
  if($.browser.msie && ($.browser.version == "6.0") && !$.support.style){//如果IE6
   gotop.css({"top":($(window).scrollTop()+$(window).height()-100)+"px","position":"absolute"});
  }
  if($(window).scrollTop()<=50){
   gotop.fadeOut();
  }else{
   gotop.fadeIn();
  }
 });
});

xcp 2013-05-02 16:49 發(fā)表評(píng)論
]]>
oracle 反向索引http://www.aygfsteel.com/xcp/archive/2013/04/27/398512.htmlxcpxcpSat, 27 Apr 2013 09:05:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/04/27/398512.htmlcreate index I_INFO_CLASSID_REVERSE on b_info(reverse(CLASSID));
analyze table b_info compute statistics for table for all indexes;
--都使用索引
select * from b_info where classid like '1E92C5409E99484%';
--都使用索引
select * from b_info where reverse(classid) like reverse('%33B27');

xcp 2013-04-27 17:05 發(fā)表評(píng)論
]]>
IE6 list-style-type li的第一條不顯示設(shè)置的列表類(lèi)型http://www.aygfsteel.com/xcp/archive/2013/04/12/397756.htmlxcpxcpFri, 12 Apr 2013 08:25:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/04/12/397756.htmlhttp://www.aygfsteel.com/xcp/comments/397756.htmlhttp://www.aygfsteel.com/xcp/archive/2013/04/12/397756.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/397756.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/397756.html今天,在做畢業(yè)設(shè)計(jì)的時(shí)候,做到一個(gè)新聞列表的時(shí)候,被垃圾IE6樣式卡住了!先上一張對(duì)比圖片。

chrome-IE6效果對(duì)比

chrome-IE6效果對(duì)比

正如,圖片上的說(shuō)明:在IE6(沒(méi)有測(cè)試IE7或更高版本)li標(biāo)簽的第一條“聯(lián)系我們”,沒(méi)有前面的:點(diǎn)。看一下我的demo代碼啊吧~

<body>
<style type="text/css">
.news-list
{
    width
:200px;
    background
:#0f0;
}
.news-list ol
{
    padding
:10px 10px 10px 10px;
}
.news-list li
{
    height
:20px;
    list-style
:disc inside;
}
</style>
<div class="news-list">
 
    
<ol><li>聯(lián)系我們</li>
        
<li>關(guān)于我們</li>
        
<li>哈哈</li>
    
</ol>
</div>
</body>

要觸發(fā)這個(gè)BUG有不少“要點(diǎn)”??!第一 、.news-list ol{ padding:10px 10px 10px 10px;} 這條樣式必須要有,更確切的說(shuō)是第一個(gè)“10px”必須有,當(dāng)然你可以換成其他像素值,零除外!當(dāng)改成0之后這個(gè)bug就沒(méi)有了~,這也就是我為什么把這個(gè)分開(kāi)寫(xiě),沒(méi)直接寫(xiě)成:.news-list ol{ padding:10px ;},這樣的原因。
第二點(diǎn)、 .news-list li{ height:20pxlist-style:disc inside;},這個(gè)里面也有一個(gè)必要的:高度。當(dāng)你把這個(gè)高度去掉的時(shí)候,你會(huì)發(fā)現(xiàn)這個(gè)bug也會(huì)消失。

有上面這兩個(gè)“苛刻”的條件,估計(jì)也就是為什么很少有人碰到的原因吧!知道了原因解決當(dāng)然不是問(wèn)題。從上面的兩點(diǎn)就可以很好的解決這bug了。
方法一、當(dāng)然就是準(zhǔn)對(duì)第一個(gè)條件的,如果可以去掉padding
方法二、當(dāng)然也是在不影響布局的情況下:去掉 height
方法三、任然還是去掉:.news-list ol{ padding:10px 10px 10px 10px;} 這條樣式,同時(shí)在ol標(biāo)簽的父標(biāo)簽(這里的父標(biāo)簽就是<div class=”news-list”>了,當(dāng)然你還可以在這個(gè)中間加入一個(gè)div)中加入這條樣式。這樣既不會(huì)影響布局,又能很好的解決這個(gè)bug,下面是我的第三種解決方法代碼:

<body>
<style type="text/css">
.news-list
{
    width
:200px;
    background
:#0f0;
    padding
:10px 10px 10px 10px;
}
.news-list li
{
    height
:20px;
    list-style
:disc inside;
}
</style>
<div class="news-list">
    
<ol><li>聯(lián)系我們</li>
        
<li>關(guān)于我們</li>
        
<li>哈哈</li>
    
</ol>
</div>
</body>



xcp 2013-04-12 16:25 發(fā)表評(píng)論
]]>
暫放過(guò)去、著手現(xiàn)在、放眼未來(lái)http://www.aygfsteel.com/xcp/archive/2013/04/03/397336.htmlxcpxcpWed, 03 Apr 2013 02:31:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/04/03/397336.htmlhttp://www.aygfsteel.com/xcp/comments/397336.htmlhttp://www.aygfsteel.com/xcp/archive/2013/04/03/397336.html#Feedback2http://www.aygfsteel.com/xcp/comments/commentRss/397336.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/397336.html      這么多年以來(lái),我們無(wú)休止的爭(zhēng)論一直停留在過(guò)去的事情上。總是對(duì)過(guò)去的事情不停地進(jìn)行爭(zhēng)辯、辯駁。面對(duì)現(xiàn)實(shí)的問(wèn)題,只是碰到什么講什么,沒(méi)有一點(diǎn)系統(tǒng)性,沒(méi)有一點(diǎn)完整性。對(duì)于過(guò)去已經(jīng)發(fā)生的事情,不管過(guò)去是對(duì),還是錯(cuò),該發(fā)生的都已經(jīng)發(fā)生,并且已經(jīng)給予了“定論”。對(duì)這個(gè)定論是滿意、還是不滿意都可以暫時(shí)放在心里、或是暫時(shí)不做考慮。當(dāng)人的認(rèn)識(shí)提高以后,返回來(lái)重新認(rèn)識(shí)這些問(wèn)題,重新思考這些問(wèn)題,也許就能有比較清晰的思路,得出比較正確的、公正的評(píng)論。但現(xiàn)在必須要暫且有停頓的時(shí)間。因?yàn)椴幻鎸?duì)現(xiàn)在的事情,現(xiàn)在的又將會(huì)成為過(guò)去,這樣循環(huán)往復(fù),一直處于一種對(duì)過(guò)去的爭(zhēng)論是毫無(wú)意義的,至少是對(duì)現(xiàn)在的發(fā)展沒(méi)有什么必要性。
      著手現(xiàn)在的必要性是因?yàn)槲覀儸F(xiàn)在面對(duì)的現(xiàn)實(shí)是很?chē)?yán)峻的。因此具有有能力的人、有良知的人、有正義的人,應(yīng)該對(duì)現(xiàn)在的現(xiàn)象進(jìn)行認(rèn)真的分析與研究,并對(duì)現(xiàn)行的現(xiàn)象進(jìn)行深入細(xì)致的剖析,通過(guò)這些現(xiàn)象看到這些現(xiàn)象的本質(zhì)。使人們能認(rèn)識(shí)到現(xiàn)象后的東西,能根據(jù)有理有據(jù)的分析推出未來(lái)的發(fā)展。使我們不至于面對(duì)未來(lái)還是茫然不知,措手不及。
      
面對(duì)現(xiàn)實(shí)的現(xiàn)在,我們不能采取慪氣、激憤的態(tài)度。謾罵、譏諷都不能解決實(shí)際的問(wèn)題。面對(duì)實(shí)際的問(wèn)題我們應(yīng)該有深刻的剖析,要有理性的分析。找到這些問(wèn)題的實(shí)質(zhì),找到這些問(wèn)題的根本。我們要尋找事物的本質(zhì),抓住本質(zhì)的問(wèn)題進(jìn)行總結(jié)規(guī)律,使我們能認(rèn)識(shí)到現(xiàn)在事物發(fā)展的規(guī)律,并進(jìn)行傳播這種認(rèn)識(shí),使得更多的人能認(rèn)識(shí)到規(guī)律,并盡可能的掌握規(guī)律,以此來(lái)改變我們的生活。
      
放眼未來(lái)。不剖析現(xiàn)在,不總結(jié)現(xiàn)在發(fā)展的規(guī)律,就不能有正確的未來(lái)發(fā)展。我們不能時(shí)時(shí)處于一種盲目的狀態(tài)之中。我們總是毫無(wú)準(zhǔn)備的應(yīng)付生活,總是面對(duì)生活中一切處于一種茫然的狀態(tài),一種措手不及的狀態(tài)。因此,我們時(shí)時(shí)處于一種被動(dòng)的地位,總是比事情逼迫的往前走,總是無(wú)奈的往前行,或是被人牽著鼻子前行??偸沁@樣的處境,總是這樣的不利,皆是因?yàn)槲覀儧](méi)有對(duì)現(xiàn)在的分析,沒(méi)有認(rèn)識(shí)現(xiàn)在發(fā)展的本質(zhì)規(guī)律,以至于才使得我們處于被動(dòng)。因此,我們要有好的未來(lái),就要抓住現(xiàn)在,要抓住現(xiàn)在,就要對(duì)現(xiàn)在進(jìn)行認(rèn)真的分析與總結(jié)。
     
 總之,我們應(yīng)該對(duì)過(guò)去發(fā)成的事情即便心懷不滿,也要盡可能能使自己有一種“胸懷”,把過(guò)去暫放起來(lái)。不要沉迷于過(guò)去,而丟失現(xiàn)在,使得現(xiàn)在變成過(guò)去,時(shí)時(shí)走不出過(guò)去,而耽誤現(xiàn)在的認(rèn)識(shí)。沒(méi)有現(xiàn)在的深刻認(rèn)識(shí),我們必將沒(méi)有好的未來(lái)?,F(xiàn)在不進(jìn)行認(rèn)真的分析,最終把將來(lái)又變成現(xiàn)在。我們不能一直處于被動(dòng)之中,要解脫這種處境。所以我們需要:暫放過(guò)去、著手現(xiàn)在、放眼未來(lái)!

xcp 2013-04-03 10:31 發(fā)表評(píng)論
]]>
Oracle中的動(dòng)態(tài)SQLhttp://www.aygfsteel.com/xcp/archive/2013/04/02/397279.htmlxcpxcpTue, 02 Apr 2013 05:20:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/04/02/397279.htmlhttp://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html
http://www.aygfsteel.com/cheneyfree/archive/2007/12/17/168272.html


記住:select的時(shí)候就不需要returning 
例:
 execute immediate T_SQL into T_COUNT;


xcp 2013-04-02 13:20 發(fā)表評(píng)論
]]>
oracle查詢(xún)所有用戶(hù)表的表名、主鍵名稱(chēng)、索引、外鍵等http://www.aygfsteel.com/xcp/archive/2013/04/02/397265.htmlxcpxcpTue, 02 Apr 2013 01:53:00 GMThttp://www.aygfsteel.com/xcp/archive/2013/04/02/397265.htmlhttp://www.aygfsteel.com/xcp/comments/397265.htmlhttp://www.aygfsteel.com/xcp/archive/2013/04/02/397265.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/397265.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/397265.html
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查詢(xún)的表 
2、查找表的主鍵(包括名稱(chēng),構(gòu)成列):
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查詢(xún)的表 
3、查找表的唯一性約束(包括名稱(chēng),構(gòu)成列): 
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查詢(xún)的表 
4、查找表的外鍵(包括名稱(chēng),引用表的表名和對(duì)應(yīng)的鍵名,下面是分成多步查詢(xún)): 
select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查詢(xún)的表 
5、查詢(xún)外鍵約束的列名:
select * from user_cons_columns cl where cl.constraint_name = 外鍵名稱(chēng) 
6、查詢(xún)引用表的鍵的列名:
select * from user_cons_columns cl where cl.constraint_name = 外鍵引用表的鍵名      

實(shí)例:
7、查詢(xún)沒(méi)有建立主鍵的表 
select u.table_name, u.num_rows
  from user_tables u
 where not exists (select cu.table_name
          from user_cons_columns cu, user_constraints au
         where cu.constraint_name = au.constraint_name
           and au.constraint_type = 'P'
           and au.table_name = u.table_name)
   and u.num_rows is not null
 order by u.num_rows desc;
8、查詢(xún)表記錄中有空值的索引字段
-- Create table
create table TEMP_INDEX
(
  ID          VARCHAR2(32),
  TABLE_NAME  VARCHAR2(100),
  COLUMN_NAME VARCHAR2(100),
  INDEX_NAME  VARCHAR2(100),
  SCSJ        DATE
)
tablespace JG_ZFGFH
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 16
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table TEMP_INDEX
  is '放入索引值有空的表和列';
-- Add comments to the columns 
comment on column TEMP_INDEX.ID
  is '自動(dòng)生成';
comment on column TEMP_INDEX.TABLE_NAME
  is '表名';
comment on column TEMP_INDEX.COLUMN_NAME
  is '字段名稱(chēng)';
comment on column TEMP_INDEX.INDEX_NAME
  is '索引名稱(chēng)';
comment on column TEMP_INDEX.SCSJ
  is '生成時(shí)間';

create or replace procedure P_PROCESS_INDEX
/*********************************************************************************
         -----------功能:得到表索引字段中有空值字段
         -----------作者: Xcp
         -----------創(chuàng)建日期:2013-02-20
         -----------版本 v1.0
  ******************************************************************************
*/
 is
  cursor T_INDEX_CURSOR is
    select i.table_name, t.column_name, t.index_name
      from user_ind_columns t, user_indexes i, user_tab_cols c
     where t.index_name = i.index_name
       and t.column_name = c.column_name
       and t.table_name = i.table_name
       and c.table_name = i.table_name
     order by c.column_id;
  T_COUNT number:=0;
  T_SQL   varchar2(1000);
  T_PRE_TABLE_NAME varchar2(100);
begin
  --清空記錄保存表
  delete from TEMP_INDEX;
  commit;
  
  --重新清理
  for T_INDEX in T_INDEX_CURSOR loop
     --事務(wù)控制,每個(gè)表提交一次
     if T_PRE_TABLE_NAME is null then
       T_PRE_TABLE_NAME:=T_INDEX.Table_Name;
     elsif T_PRE_TABLE_NAME<>T_INDEX.Table_Name then
       commit
     end if;
     
     --求是該索引字段是否有空
     begin
       T_SQL:='select count(1)  from '||T_INDEX.TABLE_NAME||' where '||T_INDEX.Column_Name||' is null ' ;
       --dbms_output.put_line(T_SQL);
       execute immediate T_SQL into T_COUNT;
       --dbms_output.put_line(T_COUNT) ;  
       if T_COUNT>0 then
         insert into TEMP_INDEX values(sys_guid(),T_INDEX.Table_Name,T_INDEX.COLUMN_NAME,T_INDEX.Index_Name,sysdate);
       end if;
     exception
       when others then dbms_output.put_line('NO DATA FOUND!');
     end;
  end loop;  
  
  --事務(wù)控制,最后一個(gè)表的事務(wù)
  if T_INDEX_CURSOR%NOTFOUND then
    commit;
  end if;
end P_PROCESS_INDEX;


xcp 2013-04-02 09:53 發(fā)表評(píng)論
]]>
log4j 獲取動(dòng)態(tài)參數(shù)http://www.aygfsteel.com/xcp/archive/2012/11/06/390894.htmlxcpxcpTue, 06 Nov 2012 08:34:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/11/06/390894.htmlhttp://www.aygfsteel.com/xcp/comments/390894.htmlhttp://www.aygfsteel.com/xcp/archive/2012/11/06/390894.html#Feedback1http://www.aygfsteel.com/xcp/comments/commentRss/390894.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/390894.html在log中必須先了解log4j自帶的兩個(gè)類(lèi)MDC和NDC

NDC和MDC是log4j用于存儲(chǔ)應(yīng)用程序的上下文信息(context infomation),從而便于在log中使用這些上下文信息。
NDC采用了一個(gè)類(lèi)似棧的機(jī)制來(lái)push存儲(chǔ)上下文信息,每一個(gè)線程都獨(dú)立地儲(chǔ)存上下文信息。比如說(shuō)一個(gè)servlet就可以針對(duì)每一個(gè)request創(chuàng)建對(duì)應(yīng)的NDC,儲(chǔ)存客戶(hù)端地址等等信息。相關(guān)的信息使用NDC.push(message);
在log的時(shí)候?qū)⑿畔⑤敵?。在相?yīng)的PatternLayout中使用”%x”來(lái)輸出存儲(chǔ)的上下文信息

例如:String remoteAddr = request.getRemoteAddr();
NDC.push(remoteAddr);
在log4j.properties文件中作如下的配置即可
log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [%X] -[%c]-[%p] %m%n


 


MDC內(nèi)部使用了類(lèi)似map的機(jī)制來(lái)存儲(chǔ)信息,相對(duì)應(yīng)的方法,MDC.put(key,value);在配置PatternLayout的時(shí)候使用:%x{key}來(lái)輸出對(duì)應(yīng)的value
例如:String remoteAddr = request.getRemoteAddr();
MDC.put("ip", remoteAddr);
在log4j.properties文件中作如下的配置即可
log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [%X{ip}] -[%c]-[%p] %m%n

總:如果在項(xiàng)目中有過(guò)濾器或者模板Action,你可以把獲取公共的屬性方法直接定義在里面,然后在配置文件中配置獲取顯示



xcp 2012-11-06 16:34 發(fā)表評(píng)論
]]>
ehcache實(shí)例 http://www.aygfsteel.com/xcp/archive/2012/08/30/386562.htmlxcpxcpThu, 30 Aug 2012 01:33:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/08/30/386562.htmlhttp://www.aygfsteel.com/xcp/comments/386562.htmlhttp://www.aygfsteel.com/xcp/archive/2012/08/30/386562.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/386562.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/386562.html01.<?xml version="1.0" encoding="UTF-8"?>  02.  03.&...  閱讀全文

xcp 2012-08-30 09:33 發(fā)表評(píng)論
]]>
struts2和servlet的共存問(wèn)題http://www.aygfsteel.com/xcp/archive/2012/08/05/384824.htmlxcpxcpSun, 05 Aug 2012 09:24:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/08/05/384824.htmlhttp://www.aygfsteel.com/xcp/comments/384824.htmlhttp://www.aygfsteel.com/xcp/archive/2012/08/05/384824.html#Feedback1http://www.aygfsteel.com/xcp/comments/commentRss/384824.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/384824.html先看一下struts2 的web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在請(qǐng)求應(yīng)用時(shí),struts2將會(huì)截獲所有請(qǐng)求,對(duì)于servlet請(qǐng)求將不能夠正常相應(yīng),是struts2把servlet當(dāng)成action了,因?yàn)閟ervlet和action都是沒(méi)有后綴的


解決方法目前有四種:

方法1:統(tǒng)一在servlet后面加上.servlet(包括web.xml配置文件中和頁(yè)面上使用servlet的地方)

方法2:繼承StrutsPrepareAndExecuteFilter,實(shí)現(xiàn)以下兩個(gè)方法。

public void init(FilterConfig filterConfig) throws
ServletException {
      ..............................

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws
IOException, ServletException {
...............................
if(url.contain("servlet")){
((HttpServletResponse) response).sendRedirect(redirectUrl);
}

super.doFilter(request, response, chain);


}


方法3:修改攔截頁(yè)面配置
原:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>
/* </url-pattern>
</filter-mapping>

現(xiàn):

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/user/*</url-pattern>
</filter-mapping>


servlet的請(qǐng)求路徑不必改變


方法4:在struts.xml文件中修改

struts2攔截了servlet請(qǐng)求的解決 

……



xcp 2012-08-05 17:24 發(fā)表評(píng)論
]]>
testhttp://www.aygfsteel.com/xcp/archive/2012/07/31/384446.htmlxcpxcpTue, 31 Jul 2012 07:39:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/07/31/384446.htmlhttp://www.aygfsteel.com/xcp/comments/384446.htmlhttp://www.aygfsteel.com/xcp/archive/2012/07/31/384446.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/384446.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/384446.html一、框架的搭建

1.         框架技術(shù)(Struts2.3.4+Srping3.2+Mybatis3.2

                         i.              添加框架Struts2.3.4

Ø 清理lib

二、框架的使用



xcp 2012-07-31 15:39 發(fā)表評(píng)論
]]>
MYEclipse啟動(dòng)應(yīng)用服務(wù) 自動(dòng)進(jìn)入DEBUG視圖http://www.aygfsteel.com/xcp/archive/2012/07/30/384344.htmlxcpxcpMon, 30 Jul 2012 09:15:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/07/30/384344.htmlhttp://www.aygfsteel.com/xcp/comments/384344.htmlhttp://www.aygfsteel.com/xcp/archive/2012/07/30/384344.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/384344.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/384344.htmlwindow-> preference-> run/debug-> perspectives   open   the   associated   perspective   .... 選never,或prompt

xcp 2012-07-30 17:15 發(fā)表評(píng)論
]]>
關(guān)于log4j的日志文件保存位置解決方案 (轉(zhuǎn))http://www.aygfsteel.com/xcp/archive/2012/07/24/383837.htmlxcpxcpTue, 24 Jul 2012 07:06:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/07/24/383837.htmlhttp://www.aygfsteel.com/xcp/comments/383837.htmlhttp://www.aygfsteel.com/xcp/archive/2012/07/24/383837.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/383837.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/383837.html有以下設(shè)置:

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=app.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %5p - %c -%-4r [%t]    - %m%n

此時(shí)生成日志文件將位于tomcat的bin目錄下,如要將日志文件保存在 :根目錄/web-info/logs/下,個(gè)人有以下4種解決方案:
1 絕對(duì)路徑
log4j.appender.A1.File=D:\apache-tomcat-6.0.18/webapps/項(xiàng)目/WEB-INF/logs/app.log
但這種寫(xiě)法靈活性很差

以下3中使用相同的設(shè)置原理: jvm的環(huán)境變量
2:spring的Log4jConfigListener
通過(guò)以下配置:
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webApp.root</param-value>
  </context-param>
<context-param>
  <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
</context-param>
< listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
...
log4j.appender.logfile.File=${webApp.root}/WEB-INF/logs/app.log
...
來(lái)解決
2:使用已有jvm變量:
例如:
    log4j.appender.logfile.File=${user.home}/logs/app.log
  日志將位于:例如windows:C:\Documents and Settings\joe\logs\app.log

3 自己設(shè)置目錄,也就是在項(xiàng)目啟動(dòng)時(shí)通過(guò)System.setProperty設(shè)置
通過(guò)實(shí)現(xiàn)ServletContextListener來(lái)解決:例如

public class log4jlistener implements ServletContextListener {

public static final String log4jdirkey = "log4jdir";
public void contextDestroyed(ServletContextEvent servletcontextevent) {
  System.getProperties().remove(log4jdirkey);

}

public void contextInitialized(ServletContextEvent servletcontextevent) {
  String log4jdir = servletcontextevent.getServletContext().getRealPath("/");
  //System.out.println("log4jdir:"+log4jdir);
  System.setProperty(log4jdirkey, log4jdir);

}

}
web.xml配置:

<listener>
  <listener-class>com.log4j.log4jlistener</listener-class>
</listener>

log4j.prtperties 配置:
log4j.appender.A1.File=${log4jdir}/WEB-INF/logs/app1.log來(lái)解決。

參數(shù)配置:
http://hi.baidu.com/zhy65991/blog/item/4af01d090e4353dc63d98635.html


xcp 2012-07-24 15:06 發(fā)表評(píng)論
]]>
Myeclipse 安裝Aptana3.2 插件http://www.aygfsteel.com/xcp/archive/2012/07/23/383753.htmlxcpxcpMon, 23 Jul 2012 04:00:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/07/23/383753.htmlhttp://www.aygfsteel.com/xcp/comments/383753.htmlhttp://www.aygfsteel.com/xcp/archive/2012/07/23/383753.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/383753.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/383753.html

安裝步驟:

1、下載aptana3.2 Eclipse Plugin插件.

下載地址:http://update1.aptana.org/studio/3.2/024747/index.html


2、解壓出features與plugins文件夾,COPY到

D:\Program Files\MyEclipse Blue Edition\MyPlugins\aptana3.2

 

3、在D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\dropins在新建文件aptana.link, 內(nèi)容是

path=D:\\Program Files\\MyEclipse Blue Edition\\MyPlugins\\aptana3.2  (注意斜線的方向,反了不行!Myeclipse會(huì)找不到路徑?。?/p>


4、刪除D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\configuration文件夾中org.eclipse.update文件夾

 

5、重啟 Myeclipse,看到了界面

09

 

2. 配置:

配置 Code Assist,對(duì)我來(lái)說(shuō)很重要,Javascript學(xué)的不咋地啊

07

 

配置 File Association,文件關(guān)聯(lián),主要有 htm,html,xml,javascript,css(這個(gè)沒(méi)找到)   【貌似不支持使用Aptana Editor 來(lái)打開(kāi)JSP文件】

08

 

再配置一些設(shè)置之后,重啟Myeclipse,試試看,打開(kāi)一個(gè) html,呵呵,js有代碼提示幫助,Enjoy it!

010



xcp 2012-07-23 12:00 發(fā)表評(píng)論
]]>
thinkpad t420i優(yōu)化http://www.aygfsteel.com/xcp/archive/2012/07/12/382954.htmlxcpxcpThu, 12 Jul 2012 15:34:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/07/12/382954.htmlhttp://www.aygfsteel.com/xcp/comments/382954.htmlhttp://www.aygfsteel.com/xcp/archive/2012/07/12/382954.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/382954.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/382954.html閱讀全文

xcp 2012-07-12 23:34 發(fā)表評(píng)論
]]>
談?wù)勅绾瓮ㄟ^(guò)網(wǎng)站域名訪問(wèn)weblogic中的應(yīng)用http://www.aygfsteel.com/xcp/archive/2012/03/21/372361.htmlxcpxcpWed, 21 Mar 2012 06:02:00 GMThttp://www.aygfsteel.com/xcp/archive/2012/03/21/372361.htmlhttp://www.aygfsteel.com/xcp/comments/372361.htmlhttp://www.aygfsteel.com/xcp/archive/2012/03/21/372361.html#Feedback1http://www.aygfsteel.com/xcp/comments/commentRss/372361.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/372361.html
    讓我們以濰坊電子政務(wù)項(xiàng)目中的一個(gè)解決辦法作為例子吧。首先交代一下環(huán)境:數(shù)據(jù)庫(kù)用的是是oracle。Web應(yīng)用是部署在weblogic上面的,其中有兩個(gè)web應(yīng)用是要通過(guò)域名讓外界訪問(wèn)的,一個(gè)是外網(wǎng)門(mén)戶(hù)網(wǎng)站,web應(yīng)用中名字簡(jiǎn)稱(chēng)為WWMH。一個(gè)是內(nèi)網(wǎng)門(mén)戶(hù)網(wǎng)站,web應(yīng)用中的名字簡(jiǎn)稱(chēng)為NWMH。假設(shè)這兩個(gè)應(yīng)用是處于同一個(gè)目錄中的,他們的文件夾就是他們web應(yīng)用的名稱(chēng),兩個(gè)域名分別是www.weifang.gov.cn和inner.weifang.gov.cn。

    我們先看看域名訪問(wèn)的大體過(guò)程:
    比如外部某個(gè)機(jī)器輸入域名訪問(wèn)www.weifang.gov.cn,這個(gè)域名會(huì)被解析成為ip地址以及一些請(qǐng)求的主機(jī)信息,這樣找到DNS服務(wù)器。再通過(guò)DNS所設(shè)的ip指向weblogic所在主機(jī),這樣就可以訪問(wèn)到外網(wǎng)的應(yīng)用,具體詳細(xì)的DNS原理請(qǐng)參見(jiàn)其他資料。
    外網(wǎng)幾個(gè)關(guān)鍵配置如下:在這里的前提條件是你的web應(yīng)用已經(jīng)部署上了。首先要把mydomain->Servers->myservers中的list port端口改為80,默認(rèn)的是7001。這樣你通過(guò)域名訪問(wèn)的時(shí)候就不需要敲入端口,因?yàn)槟J(rèn)的就是80。然而僅僅這樣還是不夠的,此時(shí)如果你通過(guò)域名訪問(wèn)的時(shí)候,在域名后面還得跟上WWMH的文件夾路徑,否則訪問(wèn)不到。我們現(xiàn)在所要設(shè)置的是context root的路徑。把WWMH的文件夾去掉,取而代之的是 ”/”,這樣你默認(rèn)的路徑就是根目錄了,做法是找到weblogic.xml文件,加上<context-root>/<context-root>,重起服務(wù),這樣通過(guò)域名就可以訪問(wèn)了。
     如果僅僅是部署了一個(gè)應(yīng)用,通過(guò)這樣的配置訪問(wèn)當(dāng)然沒(méi)有問(wèn)題。可是,一個(gè)weblogic上會(huì)部署多個(gè)應(yīng)用。需要通過(guò)不同的域名來(lái)訪問(wèn),此時(shí),該怎么辦?比如說(shuō)這里的內(nèi)網(wǎng),在外網(wǎng)已經(jīng)配置好的情況下,又不忍心去改動(dòng)以前配置好的成果。特別是前面的開(kāi)發(fā)人員已經(jīng)配置好的情況下。我們想到了weblogic自身的一個(gè)功能,那就是設(shè)置虛擬主機(jī)。它的思想就是,把內(nèi)網(wǎng)的應(yīng)用模擬成另外一個(gè)域名,通過(guò)這個(gè)域名來(lái)達(dá)到訪問(wèn)內(nèi)網(wǎng)的目的。

    具體的配置如下:在weblogic的console的左邊導(dǎo)航欄,中選擇mydomain ->Services-> VirtualHosts,然后在右面點(diǎn)擊Configure a new Virtual Host...,在Configuration的General選項(xiàng)卡下面,填寫(xiě):Name: NWMH 。Virtual Host Names里面填上: inner.weifang.gov.cn。然后點(diǎn)擊“apply”,然后到Target and Deploy 選項(xiàng)卡,選中myserver,點(diǎn)擊“apply”,這樣名稱(chēng)為NWMH的虛擬主機(jī)就搭建成功了。
    接下來(lái)在weblogic的console的左邊導(dǎo)航欄,中選擇mydomain ->Deployments-> Web Application Modeules,在deploy NWMH的應(yīng)用時(shí),在 Virtual Hosts下選上NWMH,點(diǎn)擊 Deploy按鈕。這樣虛擬主機(jī)的配置算是完成了。但是,想要通過(guò)域名直接訪問(wèn)內(nèi)網(wǎng)還是不行。后面還得跟上討厭的路徑,比如inner.weifang.gov/NWMH,然而默認(rèn)的路徑已經(jīng)被外網(wǎng)給占用了,如果你在內(nèi)網(wǎng)的配置文件里面加上<context root>/<context root>,部署肯定是不成功的,weblogic會(huì)告訴你,context root已經(jīng)被占用。怎么辦?其實(shí)不要慌。解決辦法如下:在內(nèi)網(wǎng)門(mén)戶(hù)的配置文件上加上 <VirtualHost Name="NWMH" Targets="myserver" DefaultWebApp="NWMH" VirtualHostNames="inner.weifang.gov.cn"/>   。

    重起服務(wù),敲入域名inner.weifang.gov.cn。一切ok!問(wèn)題解決。通過(guò)這種方法,weblogic上即使再部署幾個(gè)應(yīng)用都是可以解決的。



以上內(nèi)容僅僅是個(gè)人在做項(xiàng)目中的心得。并不保證其技術(shù)的完整性和絕對(duì)正確。

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/nighthawk/archive/2004/07/29/55575.aspx

xcp 2012-03-21 14:02 發(fā)表評(píng)論
]]>
FORALL語(yǔ)句、FORALL語(yǔ)句自動(dòng)回滾http://www.aygfsteel.com/xcp/archive/2011/12/31/367652.htmlxcpxcpSat, 31 Dec 2011 07:46:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/31/367652.htmlhttp://www.aygfsteel.com/xcp/comments/367652.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/31/367652.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/367652.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/367652.html

FORALL語(yǔ)句

FORALL語(yǔ)句的一個(gè)關(guān)鍵性改進(jìn),它可大大簡(jiǎn)化代碼,并且對(duì)于那些要在PL/SQL程序中更新很多行數(shù)據(jù)的程序來(lái)說(shuō),它可顯著提高其性能。

 

1:

FORALL來(lái)增強(qiáng)DML的處理能力

OracleOracle8i中的PL/SQL引入了兩個(gè)新的數(shù)據(jù)操縱語(yǔ)言(DML)語(yǔ)句:BULK COLLECTFORALL。這兩個(gè)語(yǔ)句在PL/SQL內(nèi)部進(jìn)行一種數(shù)組處理

 

;BULK COLLECT提供對(duì)數(shù)據(jù)的高速檢索,FORALL可大大改進(jìn)INSERTUPDATEDELETE操作的性能。Oracle數(shù)據(jù)庫(kù)使用這些語(yǔ)句大大減少了

 

PL/SQLSQL語(yǔ)句執(zhí)行引擎的環(huán)境切換次數(shù),從而使其性能有了顯著提高。

 

 

使用BULK COLLECT,你可以將多個(gè)行引入一個(gè)或多個(gè)集合中,而不是單獨(dú)變量或記錄中。下面這個(gè)BULK COLLECT的實(shí)例是將標(biāo)題中包含

 

"PL/SQL"的所有書(shū)籍檢索出來(lái)并置于記錄的一個(gè)關(guān)聯(lián)數(shù)組中,它們都位于通向該數(shù)據(jù)庫(kù)的單一通道中。

DECLARE

   TYPE books_aat

 

      IS TABLE OF book%ROWTYPE

      INDEX BY PLS_INTEGER;

   books books_aat;

BEGIN

   SELECT *

     BULK COLLECT INTO book

     FROM books

    WHERE title LIKE '%PL/SQL%';

   ...

END;

 

 

類(lèi)似地,FORALL將數(shù)據(jù)從一個(gè)PL/SQL集合傳送給指定的使用集合的表。下面的代碼實(shí)例給出一個(gè)過(guò)程,即接收書(shū)籍信息的一個(gè)嵌套表,并將該

 

集合(綁定數(shù)組)的全部?jī)?nèi)容插入該書(shū)籍表中。注意,這個(gè)例子還利用了Oracle9iFORALL的增強(qiáng)功能,可以將一條記錄直接插入到表中。

 

BULK COLLECTFORALL都非常有用,它們不僅提高了性能,而且還簡(jiǎn)化了為PL/SQL中的SQL操作所編寫(xiě)的代碼。下面的多行FORALL INSERT相當(dāng)

 

清楚地說(shuō)明了為什么PL/SQL被認(rèn)為是Oracle數(shù)據(jù)庫(kù)的最佳編程語(yǔ)言。

CREATE TYPE books_nt

IS TABLE OF book%ROWTYPE;

/

CREATE OR REPLACE PROCEDURE add_books (

 

books_in IN books_nt)

IS

BEGIN

FORALL book_index

    IN books_in.FIRST .. books_in.LAST

    INSERT INTO book

       VALUES books_in(book_index);

   ...

END;

 

 

不過(guò)在Oracle數(shù)據(jù)庫(kù)10g之前,以FORAll方式使用集合有一個(gè)重要的限制:該數(shù)據(jù)庫(kù)從IN范圍子句中的第一行到最后一行,依次讀取集合的內(nèi)容

 

。如果在該范圍內(nèi)遇到一個(gè)未定義的行,Oracle數(shù)據(jù)庫(kù)將引發(fā)ORA-22160異常事件:

 

 

ORA-22160: element at index [N] does not exist

 

 

對(duì)于FORALL的簡(jiǎn)單應(yīng)用,這一規(guī)則不會(huì)引起任何麻煩。但是,如果想盡可能地充分利用FORALL,那么要求任意FORALL驅(qū)動(dòng)數(shù)組都要依次填充可

 

能會(huì)增加程序的復(fù)雜性并降低性能。

 

Oracle數(shù)據(jù)庫(kù)10g中,PL/SQL現(xiàn)在在FORALL語(yǔ)句中提供了兩個(gè)新子句:INDICES OFVALUES OF,它們使你能夠仔細(xì)選擇驅(qū)動(dòng)數(shù)組中該由擴(kuò)展

 

DML語(yǔ)句來(lái)處理的行。

當(dāng)綁定數(shù)組為稀疏數(shù)組或者包含有間隙時(shí),INDICES OF會(huì)非常有用。該語(yǔ)句的語(yǔ)法結(jié)構(gòu)為:

FORALL indx IN INDICES

 

OF sparse_collection

INSERT INTO my_table

VALUES sparse_collection (indx);

 

VALUES OF用于一種不同的情況:綁定數(shù)組可以是稀疏數(shù)組,也可以不是,但我只想使用該數(shù)組中元素的一個(gè)子集。那么我就可以使用VALUES

 

OF來(lái)指向我希望在DML操作中使用的值。該語(yǔ)句的語(yǔ)法結(jié)構(gòu)為:

FORALL indx IN VALUES OF pointer_array

INSERT INTO my_table

VALUES binding_array (indx);

 

不用FOR循環(huán)而改用FORALL

假定我需要編寫(xiě)一個(gè)程序,對(duì)合格員工(由comp_analysis.is_eligible函數(shù)確定)加薪,編寫(xiě)關(guān)于不符合加薪條件的員工的報(bào)告并寫(xiě)入

 

employee_history表。我在一個(gè)非常大的公司工作;我們的員工非常非常多。

 

對(duì)于一位PL/SQL開(kāi)發(fā)人員來(lái)說(shuō),這并不是一項(xiàng)十分困難的工作。我甚至不需要使用BULK COLLECTFORALL就可以完成這項(xiàng)工作,如清單 1所示

 

,我使用一個(gè)CURSOR FOR循環(huán)和單獨(dú)的INSERTUPDATE語(yǔ)句。這樣的代碼簡(jiǎn)潔明了;不幸地是,我花了10分鐘來(lái)運(yùn)行此代碼,我的"老式"方法

 

要運(yùn)行30分鐘或更長(zhǎng)時(shí)間。

清單 1:

CREATE OR REPLACE PROCEDURE give_raises_in_department (

        dept_in IN employee.department_id%TYPE

      , newsal IN employee.salary%TYPE

     )

     IS

        CURSOR emp_cur

        IS

           SELECT employee_id, salary, hire_date

             FROM employee

            WHERE department_id = dept_in;

     BEGIN

        FOR emp_rec IN emp_cur

        LOOP

           IF comp_analysis.is_eligible (emp_rec.employee_id)

           THEN

              UPDATE employee

                 SET salary = newsal

               WHERE employee_id = emp_rec.employee_id;

           ELSE

              INSERT INTO employee_history

                          (employee_id, salary

                         , hire_date, activity

                          )

                   VALUES (emp_rec.employee_id, emp_rec.salary

                         , emp_rec.hire_date, 'RAISE DENIED'

                          );

           END IF;

        END LOOP;

     END give_raises_in_department;

 

 

好在我公司的數(shù)據(jù)庫(kù)升級(jí)到了Oracle9i,而且更幸運(yùn)的是,在最近的Oracle研討會(huì)上(以及Oracle技術(shù)網(wǎng)站提供的非常不錯(cuò)的演示中)我了解

 

到了批量處理方法。所以我決定使用集合與批量處理方法重新編寫(xiě)程序。寫(xiě)好的程序如清單 2所示。

清單 2:

1 CREATE OR REPLACE PROCEDURE give_raises_in_department (

2     dept_in IN employee.department_id%TYPE

3   , newsal IN employee.salary%TYPE

4 )

5 IS

6     TYPE employee_aat IS TABLE OF employee.employee_id%TYPE

7        INDEX BY PLS_INTEGER;

8     TYPE salary_aat IS TABLE OF employee.salary%TYPE

9        INDEX BY PLS_INTEGER;

10     TYPE hire_date_aat IS TABLE OF employee.hire_date%TYPE

11        INDEX BY PLS_INTEGER;

12

13     employee_ids employee_aat;

14     salaries salary_aat;

15     hire_dates hire_date_aat;

16

17     approved_employee_ids employee_aat;

18

19     denied_employee_ids employee_aat;

20     denied_salaries salary_aat;

21     denied_hire_dates hire_date_aat;

22

23     PROCEDURE retrieve_employee_info

24     IS

25     BEGIN

26        SELECT employee_id, salary, hire_date

27        BULK COLLECT INTO employee_ids, salaries, hire_dates

28          FROM employee

29         WHERE department_id = dept_in;

30     END;

31

32     PROCEDURE partition_by_eligibility

33     IS

34     BEGIN

35        FOR indx IN employee_ids.FIRST .. employee_ids.LAST

36        LOOP

37           IF comp_analysis.is_eligible (employee_ids (indx))

38           THEN

39              approved_employee_ids (indx) := employee_ids (indx);

40           ELSE

41              denied_employee_ids (indx) := employee_ids (indx);

42              denied_salaries (indx) := salaries (indx);

43              denied_hire_dates (indx) := hire_dates (indx);

44           END IF;

45        END LOOP;

46     END;

47

48     PROCEDURE add_to_history

49     IS

50     BEGIN

51        FORALL indx IN denied_employee_ids.FIRST .. denied_employee_ids.LAST

52           INSERT INTO employee_history

53                       (employee_id

54                      , salary

55                      , hire_date, activity

56                       )

57                VALUES (denied_employee_ids (indx)

58                      , denied_salaries (indx)

59                      , denied_hire_dates (indx), 'RAISE DENIED'

60                       );

61     END;

62

63     PROCEDURE give_the_raise

64     IS

65     BEGIN

66        FORALL indx IN approved_employee_ids.FIRST .. approved_employee_ids.LAST

67           UPDATE employee

68              SET salary = newsal

69            WHERE employee_id = approved_employee_ids (indx);

70     END;

71 BEGIN

72     retrieve_employee_info;

73     partition_by_eligibility;

74     add_to_history;

75     give_the_raise;

76 END give_raises_in_department;

 

掃一眼清單1 和清單2 就會(huì)清楚地認(rèn)識(shí)到:改用集合和批量處理方法將增加代碼量和復(fù)雜性。但是,如果你需要大幅度提升性能,這還是值得

 

的。下面,我們不看這些代碼,我們來(lái)看一看當(dāng)使用FORALL時(shí),用什么來(lái)處理CURSOR FOR循環(huán)內(nèi)的條件邏輯。

 

定義集合類(lèi)型與集合

 

在清單 2中,聲明段的第一部分(第6行至第11行)定義了幾種不同的集合類(lèi)型,與我將從員工表檢索出的列相對(duì)應(yīng)。我更喜歡基于employee%

 

ROWTYPE來(lái)聲明一個(gè)集合類(lèi)型,但是FORALL還不支持對(duì)某些記錄集合的操作,在這樣的記錄中,我將引用個(gè)別字段。所以,我還必須為員工ID、

 

薪金和雇用日期分別聲明其各自的集合。

 

接下來(lái)為每一列聲明所需的集合(第13行至第21行)。首先定義與所查詢(xún)列相對(duì)應(yīng)的集合(第13行至第15行):

 

 

employee_ids employee_aat;

salaries salary_aat;

hire_dates hire_date_aat;

 

 

然后我需要一個(gè)新的集合,用于存放已被批準(zhǔn)加薪的員工的ID(第17行):

 

 

approved_employee_ids employee_aat;

 

 

最后,我再為每一列聲明一個(gè)集合(第19行至第21行),用于記錄沒(méi)有加薪資格的員工:

 

 

denied_employee_ids employee_aat;

denied_salaries salary_aat;

denied_hire_dates hire_date_aat;

 

深入了解代碼

 

數(shù)據(jù)結(jié)構(gòu)確定后,我們現(xiàn)在跳過(guò)該程序的執(zhí)行部分(第72行至第75行),了解如何使用這些集合來(lái)加速進(jìn)程。

 

 

retrieve_employee_info;

partition_by_eligibility;

add_to_history;

give_the_raise;

 

 

我編寫(xiě)此程序使用了逐步細(xì)化法(也被稱(chēng)為"自頂向下設(shè)計(jì)")。所以執(zhí)行部分不是很長(zhǎng),也不難理解,只有四行,按名稱(chēng)對(duì)過(guò)程中的每一步進(jìn)

 

行了描述。首先檢索員工信息(指定部門(mén)的所有員工)。然后進(jìn)行劃分,將要加薪和不予加薪的員工區(qū)分出來(lái)。完成之后,我就可以將那些不

 

予加薪的員工添加至員工歷史表中,對(duì)其他員工進(jìn)行加薪。

 

以這種方式編寫(xiě)代碼使最終結(jié)果的可讀性大大增強(qiáng)。因而我可以深入到該程序中對(duì)我有意義的任何部分。

 

有了已聲明的集合,我現(xiàn)在就可以使用BULK COLLECT來(lái)檢索員工信息(第23行至第30行)。這一部分有效地替代了CURSOR FOR循環(huán)。至此,數(shù)

 

據(jù)被加載到集合中。

 

劃分邏輯(第32行至第46行)要求對(duì)剛剛填充的集合中的每一行進(jìn)行檢查,看其是否符合加薪條件。如果符合,我就將該員工ID從查詢(xún)填充的

 

集合復(fù)制到符合條件的員工的集合。如果不符合,則復(fù)制該員工ID、薪金和雇用日期,因?yàn)檫@些都需要插入到employee_history表中。

 

初始數(shù)據(jù)現(xiàn)在已被分為兩個(gè)集合,可以將其分別用作兩個(gè)不同的FORALL語(yǔ)句(分別從第51行和第66行開(kāi)始)的驅(qū)動(dòng)器。我將不合格員工的集合

 

中的數(shù)據(jù)批量插入到employee_historyadd_to_history)表中,并通過(guò)give_the_raise過(guò)程,在employee表中批量更新合格員工的信息。

 

最后再仔細(xì)地看一看add_to_history(第48行至第61行),以此來(lái)結(jié)束對(duì)這個(gè)重新編寫(xiě)的程序的分析。FORALL語(yǔ)句(第51行)包含一個(gè)IN子句

 

,它指定了要用于批量INSERT的行號(hào)范圍。在對(duì)程序進(jìn)行第二次重寫(xiě)的說(shuō)明中,我將把用于定義范圍的集合稱(chēng)為"驅(qū)動(dòng)集合"。但在

 

add_to_history的這一版本中,我簡(jiǎn)單地假定: 使用在denied_employee_ids中定義的所有行。在INSERT自身內(nèi)部,關(guān)于不合格員工的三個(gè)集

 

合都會(huì)被用到;我將把這些集合稱(chēng)為"數(shù)據(jù)集合"??梢钥吹剑?qū)動(dòng)集合與數(shù)據(jù)集合無(wú)需匹配。在學(xué)習(xí)Oracle數(shù)據(jù)庫(kù)10g的新特性時(shí),這是一個(gè)關(guān)

 

鍵點(diǎn)。

 

結(jié)果,清單 2 的行數(shù)大約是清單 1行數(shù)的2倍,但是清單 2 中的代碼會(huì)在要求的時(shí)間內(nèi)運(yùn)行。在使用Oracle數(shù)據(jù)庫(kù)10g之前,在這種情況下,

 

我只會(huì)對(duì)能夠在這一時(shí)間內(nèi)運(yùn)行代碼并開(kāi)始下一個(gè)任務(wù)這一點(diǎn)感到高興。

 

不過(guò),有了Oracle數(shù)據(jù)庫(kù)10g中最新版的PL/SQL,現(xiàn)在我就可以在性能、可讀性和代碼量方面作出更多的改進(jìn)。

VALUES OF用于此過(guò)程

 

Oracle數(shù)據(jù)庫(kù)10g中,可以指定FORALL語(yǔ)句使用的驅(qū)動(dòng)集合中的行的子集??梢允褂靡韵聝煞N方法之一來(lái)定義該子集:

 

 

將數(shù)據(jù)集合中的行號(hào)與驅(qū)動(dòng)集合中的行號(hào)進(jìn)行匹配。你需要使用INDICES OF子句。

將數(shù)據(jù)集合中的行號(hào)與驅(qū)動(dòng)集合中所定義行中找到的值進(jìn)行匹配。這需要使用VALUES OF子句。

在對(duì)give_raises_in_department進(jìn)行第二次和最后一次改寫(xiě)中我將使用VALUES OF子句。清單 3 包含這個(gè)版本的全部代碼。我將略過(guò)這一程序

 

中與前一版本相同的部分。

 

從聲明集合開(kāi)始,請(qǐng)注意我不再另外定義集合來(lái)存放合格的和不合格的員工信息,而是在清單 3 (第17行至第21行)中聲明兩個(gè)"引導(dǎo)"集合:

 

一個(gè)用于符合加薪要求的員工,另一個(gè)用于不符合加薪要求的員工。這兩個(gè)集合的數(shù)據(jù)類(lèi)型都是布爾型;不久將會(huì)看到,這些集合的數(shù)據(jù)類(lèi)型

 

FORALL語(yǔ)句毫無(wú)關(guān)系。FORALL語(yǔ)句只關(guān)心定義了哪些行。 在員工表中擁有50 000行信息的give_raises_in_department的三種執(zhí)行方法的占

 

用時(shí)間 執(zhí)行方法 用時(shí)

CURSOR FOR循環(huán) 00:00:38.01

Oracle數(shù)據(jù)庫(kù)10g之前的批量處理 00:00:06.09

Oracle數(shù)據(jù)庫(kù)10g的批量處理 00:00:02.06

 

在員工表中擁有100,000行數(shù)據(jù)的give_raises_in_department的三種執(zhí)行方法的占用時(shí)間 執(zhí)行方法 用時(shí)

CURSOR FOR循環(huán) 00:00:58.01

Oracle數(shù)據(jù)庫(kù)10g之前的批量處理 00:00:12.00

Oracle數(shù)據(jù)庫(kù)10g的批量處理 00:00:05.05

 

 

1:處理50,000行和100,000行數(shù)據(jù)的用時(shí)測(cè)試結(jié)果

 

retrieve_employee_info子程序與前面的相同,但是對(duì)數(shù)據(jù)進(jìn)行劃分的方式完全不同(第32行至第44行)。我沒(méi)有將記錄從一個(gè)集合復(fù)制到另

 

一個(gè)集合(這個(gè)操作相對(duì)較慢),而只是確定與員工ID集合中的行號(hào)相匹配的相應(yīng)引導(dǎo)集合中的行(通過(guò)為其指定一個(gè)TRUE值)。

 

現(xiàn)在可以在兩個(gè)不同FORALL語(yǔ)句(由第49行和第65行開(kāi)始)中,將approved_listdenied_list集合用作驅(qū)動(dòng)集合。

 

為了插入到employee_history表中,我使用了如下語(yǔ)句:

 

 

FORALL indx IN VALUES OF denied_list

 

 

為了進(jìn)行更新(給員工進(jìn)行加薪),我使用這一格式:

 

 

FORALL indx IN VALUES OF approved_list

 

 

在這兩個(gè)DML語(yǔ)句中,數(shù)據(jù)集合是在BULK COLLECT 檢索步驟中填充的最初的集合;沒(méi)有進(jìn)行過(guò)復(fù)制。利用VALUES OFOracle數(shù)據(jù)庫(kù)在這些數(shù)據(jù)

 

集合的行中進(jìn)行篩選,僅使用行號(hào)與驅(qū)動(dòng)集合中行號(hào)相匹配的行

利用本程序中的VALUES OF,可以避免復(fù)制對(duì)全部記錄進(jìn)行復(fù)制,而是用行號(hào)的一個(gè)簡(jiǎn)單列表來(lái)替換它們。對(duì)于大型數(shù)組,進(jìn)行這些復(fù)制的開(kāi)銷(xiāo)

 

是非??捎^的。為了測(cè)試Oracle數(shù)據(jù)庫(kù)10g的優(yōu)越性,我裝入employee表并對(duì)50,000行和100,000行的數(shù)據(jù)運(yùn)行測(cè)試。為了模擬更多的現(xiàn)實(shí)情況

 

,我將Oracle數(shù)據(jù)庫(kù)10g之前的批量處理的執(zhí)行方法作了修改以進(jìn)行集合內(nèi)容的多次復(fù)制。然后我使用SQL*Plus SET TIMING ON來(lái)顯示運(yùn)行各個(gè)

 

不同的執(zhí)行方法所用的時(shí)間。表 1 給出了結(jié)果。

 

從這些時(shí)間測(cè)定得到的結(jié)論非常清楚:由單個(gè)DML語(yǔ)句變?yōu)榕刻幚韺⒋蠓s短耗用時(shí)間,數(shù)據(jù)為50,000行時(shí)的用時(shí)由38秒減為6秒,數(shù)據(jù)為

 

100,000行時(shí)的用時(shí)由58秒減為12秒。而且,通過(guò)使用VALUES OF來(lái)避免復(fù)制數(shù)據(jù),我可以將用時(shí)縮短一半左右。

 

即使沒(méi)有性能上的改進(jìn),VALUES OF及其同類(lèi)子句--INDICES OF也提高了PL/SQL語(yǔ)言的靈活性,使開(kāi)發(fā)人員能夠更輕松地編寫(xiě)出更直觀和更容易

 

維護(hù)的代碼。

 

在產(chǎn)品壽命這一點(diǎn)上,PL/SQL是一種成熟且功能強(qiáng)大的語(yǔ)言。因而,其很多新特性都是逐漸增加和改進(jìn)而成的。不過(guò),這些新特性還是使應(yīng)用

 

程序的性能和開(kāi)發(fā)人員的開(kāi)發(fā)效率有了重大改變。VALUES OF就是這種特性的一個(gè)很好的例子。

 



xcp 2011-12-31 15:46 發(fā)表評(píng)論
]]>
使用Bulk Collect提高Oracle查詢(xún)效率http://www.aygfsteel.com/xcp/archive/2011/12/31/367650.htmlxcpxcpSat, 31 Dec 2011 07:03:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/31/367650.htmlhttp://www.aygfsteel.com/xcp/comments/367650.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/31/367650.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/367650.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/367650.html
使用Bulk Collect提高Oracle查詢(xún)效率
Oracle8i中首次引入了Bulk Collect特性,該特性可以讓我們?cè)赑L/SQL中能使用批查詢(xún),批查詢(xún)?cè)谀承┣闆r下能顯著提高查詢(xún)效率?,F(xiàn)在,我們對(duì)該特性進(jìn)行一些簡(jiǎn)單的測(cè)試和分析。
一、首先,我們創(chuàng)建一個(gè)表,并插入100000條記錄
在SQL/Plus中執(zhí)行下列腳本:
drop table empl_tbl
/
create table empl_tbl(last_name varchar2(20),
first_name varchar2(10),
salary number(10))
/
begin
for i in 30000..1029999 loop
insert into empl_tbl(last_name,first_name,salary) values('carl'||(i-3000),'wu'||(1003000-i),i);
end loop;
end;
/
commit
/
select count(*) from empl_tbl;
/
二、使用三種方法計(jì)算表中某一字段含有多少個(gè)不重復(fù)值
2.1 使用常規(guī)的Distinct來(lái)實(shí)現(xiàn)
SQL> select count(distinct last_name) from empl_tbl;
Distinct Last Name
------------------
            1000000
Executed in 1.531 seconds
我們可以看到,常規(guī)方法需要1.531 秒查出該表中有1000000個(gè)不重復(fù)的Last_name值。
2.2 使用游標(biāo)來(lái)實(shí)現(xiàn)
我們執(zhí)行下面語(yǔ)句來(lái)統(tǒng)計(jì)Last_name字段的不重復(fù)值個(gè)數(shù):
CREATE OR REPLACE PROCEDURE tttt IS
  all_rows number(10);
  temp_last_name empl_tbl.last_name%type;
begin
  all_rows:=0;
  temp_last_name:=' ';
  for cur in (select last_name from empl_tbl order by last_name) loop
      if cur.last_name!=temp_last_name then
       all_rows:=all_rows+1;
      end if;
      temp_last_name:=cur.last_name;
  end loop;
  dbms_output.put_line('all_rows are '||all_rows);
end;
請(qǐng)注意上面代碼中的黑體部分使用了一個(gè)For Loop游標(biāo),為了提高程序可讀性,我們沒(méi)有顯示定義游標(biāo)變量。
執(zhí)行結(jié)果:
all_rows are 1000000
PL/SQL procedure successfully completed
Executed in 10.39 seconds
游標(biāo)需要10.396秒才能查出該表中有1000000個(gè)不重復(fù)的Last_name值,所耗時(shí)間是Distinct查詢(xún)的10倍多。
2.3 使用Bulk Collect批查詢(xún)來(lái)實(shí)現(xiàn)
示例代碼如下:
declare
  all_rows number(10);
  --首先,定義一個(gè)Index-by表數(shù)據(jù)類(lèi)型
  type last_name_tab is table of empl_tbl.last_name%type index by binary_integer;
  last_name_arr last_name_tab;
  --定義一個(gè)Index-by表集合變量
  temp_last_name empl_tbl.last_name%type;
 
begin
  all_rows:=0;
  temp_last_name:=' ';
  --使用Bulk Collect批查詢(xún)來(lái)充填集合變量
  select last_name bulk collect into last_name_arr from empl_tbl;
 
  for i in 1..last_name_arr.count loop
      if temp_last_name!=last_name_arr(i) then
       all_rows:=all_rows+1;
      end if;
      temp_last_name:=last_name_arr(i);
  end loop;
 dbms_output.put_line('all_rows are '||all_rows);
end;
請(qǐng)注意上面代碼中,我們首先定義了一個(gè)Index-by表數(shù)據(jù)類(lèi)型last_name_tab,然后定義了一個(gè)該集合數(shù)據(jù)類(lèi)型的變量last_name_arr,最后我們使用Bulk Collect批查詢(xún)來(lái)充填last_name_arr,請(qǐng)注意它
的使用語(yǔ)法。
執(zhí)行結(jié)果:
all_rows are 1000000
PL/SQL procedure successfully completed
Executed in 2.343 seconds
從上面執(zhí)行結(jié)果,我們可以看到,Bulk Collect批查詢(xún)只需要2.343 秒就能查出該表中有1000000個(gè)不重復(fù)的Last_name值,所耗時(shí)間只有游標(biāo)查詢(xún)的1/2.5。


三. 測(cè)試結(jié)果分析
為什么會(huì)出現(xiàn)上面的結(jié)果呢?我們可以使用Oracle的SQL_Trace來(lái)分析一下結(jié)果。在SQL命令行中,使用alter session set sql_trace=true語(yǔ)句打開(kāi)Oracle的Trace,然后在命令行中執(zhí)行上面三種查詢(xún)并使用TKPROF工具生成Trace報(bào)告。
3.1 常規(guī)Distinct查詢(xún)結(jié)果分析
3.2 游標(biāo)查詢(xún)效率分析
3.3 Bulk Collect的查詢(xún)效率分析

四. 結(jié)論
通過(guò)上面的測(cè)試和分析,我們可以看到Bulk Collect批查詢(xún)?cè)谀撤N程度上可以提高查詢(xún)效率,它首先將所需數(shù)據(jù)讀入內(nèi)存,然后再統(tǒng)計(jì)分析,這樣就可以提高查詢(xún)效率。但是,如果Oracle數(shù)據(jù)庫(kù)的內(nèi)存較小,Shared Pool Size不足以保存Bulk Collect批查詢(xún)結(jié)果,那么該方法需要將Bulk Collect的集合結(jié)果保存在磁盤(pán)上,在這種情況下,Bulk Collect方法的效率反而不如其他兩種方法,有興趣的讀者可以進(jìn)一步測(cè)試。
另外,除了Bulk Collect批查詢(xún)外,我們還可以使用FORALL語(yǔ)句來(lái)實(shí)現(xiàn)批插入、刪除和更新,這在大批量數(shù)據(jù)操作時(shí)可以顯著提高執(zhí)行效率。


xcp 2011-12-31 15:03 發(fā)表評(píng)論
]]>
oracle_常用系統(tǒng)表http://www.aygfsteel.com/xcp/archive/2011/12/31/367624.htmlxcpxcpSat, 31 Dec 2011 03:04:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/31/367624.htmlhttp://www.aygfsteel.com/xcp/comments/367624.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/31/367624.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/367624.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/367624.html

dba_開(kāi)頭.....

 

   dba_users      數(shù)據(jù)庫(kù)用戶(hù)信息

 

   dba_segments 表段信息

 

   dba_extents    數(shù)據(jù)區(qū)信息

 

   dba_objects    數(shù)據(jù)庫(kù)對(duì)象信息

 

   dba_tablespaces   數(shù)據(jù)庫(kù)表空間信息

 

   dba_data_files    數(shù)據(jù)文件設(shè)置信息

 

   dba_temp_files   臨時(shí)數(shù)據(jù)文件信息

 

   dba_rollback_segs   回滾段信息

 

   dba_ts_quotas   用戶(hù)表空間配額信息

 

   dba_free_space 數(shù)據(jù)庫(kù)空閑空間信息

 

   dba_profiles   數(shù)據(jù)庫(kù)用戶(hù)資源限制信息

 

   dba_sys_privs   用戶(hù)的系統(tǒng)權(quán)限信息

 

   dba_tab_privs 用戶(hù)具有的對(duì)象權(quán)限信息

 

   dba_col_privs 用戶(hù)具有的列對(duì)象權(quán)限信息

 

   dba_role_privs 用戶(hù)具有的角色信息

 

   dba_audit_trail 審計(jì)跟蹤記錄信息

 

   dba_stmt_audit_opts 審計(jì)設(shè)置信息

 

   dba_audit_object   對(duì)象審計(jì)結(jié)果信息

 

   dba_audit_session 會(huì)話審計(jì)結(jié)果信息

 

   dba_indexes 用戶(hù)模式的索引信息

 

user_開(kāi)頭

 

   user_objects   用戶(hù)對(duì)象信息

 

   user_source   數(shù)據(jù)庫(kù)用戶(hù)的所有資源對(duì)象信息

 

   user_segments   用戶(hù)的表段信息

 

   user_tables    用戶(hù)的表對(duì)象信息

 

   user_tab_columns   用戶(hù)的表列信息

 

   user_constraints   用戶(hù)的對(duì)象約束信息

 

   user_sys_privs   當(dāng)前用戶(hù)的系統(tǒng)權(quán)限信息

 

   user_tab_privs   當(dāng)前用戶(hù)的對(duì)象權(quán)限信息

 

   user_col_privs   當(dāng)前用戶(hù)的表列權(quán)限信息

 

   user_role_privs   當(dāng)前用戶(hù)的角色權(quán)限信息

 

   user_indexes   用戶(hù)的索引信息

 

   user_ind_columns 用戶(hù)的索引對(duì)應(yīng)的表列信息

 

   user_cons_columns   用戶(hù)的約束對(duì)應(yīng)的表列信息

 

   user_clusters   用戶(hù)的所有簇信息

 

   user_clu_columns 用戶(hù)的簇所包含的內(nèi)容信息

 

   user_cluster_hash_expressions   散列簇的信息

 

v$開(kāi)頭

 

   v$database    數(shù)據(jù)庫(kù)信息

 

   v$datafile   數(shù)據(jù)文件信息

 

   v$controlfile 控制文件信息

 

   v$logfile   重做日志信息

 

   v$instance   數(shù)據(jù)庫(kù)實(shí)例信息

 

   v$log   日志組信息

 

   v$loghist 日志歷史信息

 

   v$sga   數(shù)據(jù)庫(kù)SGA信息

 

   v$parameter 初始化參數(shù)信息

 

   v$process   數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程信息

 

   v$bgprocess   數(shù)據(jù)庫(kù)后臺(tái)進(jìn)程信息

 

   v$controlfile_record_section   控制文件記載的各部分信息

 

   v$thread   線程信息

 

   v$datafile_header   數(shù)據(jù)文件頭所記載的信息

 

   v$archived_log 歸檔日志信息

 

   v$archive_dest   歸檔日志的設(shè)置信息

 

   v$logmnr_contents   歸檔日志分析的DML DDL結(jié)果信息

 

   v$logmnr_dictionary   日志分析的字典文件信息

 

   v$logmnr_logs   日志分析的日志列表信息

 

   v$tablespace   表空間信息

 

   v$tempfile   臨時(shí)文件信息

 

   v$filestat   數(shù)據(jù)文件的I/O統(tǒng)計(jì)信息

 

   v$undostat   Undo數(shù)據(jù)信息

 

   v$rollname   在線回滾段信息

 

   v$session   會(huì)話信息

 

   v$transaction 事務(wù)信息

 

   v$rollstat    回滾段統(tǒng)計(jì)信息

 

   v$pwfile_users   特權(quán)用戶(hù)信息

 

   v$sqlarea     當(dāng)前查詢(xún)過(guò)的sql語(yǔ)句訪問(wèn)過(guò)的資源及相關(guān)的信息

 

   v$sql           v$sqlarea基本相同的相關(guān)信息

 

   v$sysstat    數(shù)據(jù)庫(kù)系統(tǒng)狀態(tài)信息

 

all_開(kāi)頭

 

   all_users   數(shù)據(jù)庫(kù)所有用戶(hù)的信息

 

   all_objects   數(shù)據(jù)庫(kù)所有的對(duì)象的信息

 

   all_def_audit_opts   所有默認(rèn)的審計(jì)設(shè)置信息

 

   all_tables   所有的表對(duì)象信息

 

   all_indexes 所有的數(shù)據(jù)庫(kù)對(duì)象索引的信息

 

session_開(kāi)頭

 

   session_roles   會(huì)話的角色信息

 

   session_privs   會(huì)話的權(quán)限信息

 

index_開(kāi)頭

 

   index_stats   索引的設(shè)置和存儲(chǔ)信息

 

偽表

 

   dual   系統(tǒng)偽列表信息



xcp 2011-12-31 11:04 發(fā)表評(píng)論
]]>
oracle 查看用戶(hù) 用戶(hù)權(quán)限 用戶(hù)表空間 用戶(hù)默認(rèn)表空間[轉(zhuǎn)]http://www.aygfsteel.com/xcp/archive/2011/12/31/367623.htmlxcpxcpSat, 31 Dec 2011 02:42:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/31/367623.htmlhttp://www.aygfsteel.com/xcp/comments/367623.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/31/367623.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/367623.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/367623.html
1、查看所有用戶(hù)
select * from dba_users;//dba
select * from all_users;//all
select * from user_users;//當(dāng)前
2、查看當(dāng)前用戶(hù)連接:
select * from v$Session;
3、查看當(dāng)前用戶(hù)權(quán)限:
select * from session_privs;
4、查看所有用戶(hù)系統(tǒng)權(quán)限
select * from dba_sys_privs;
select * from user_sys_privs;
5、查看所有用戶(hù)對(duì)象權(quán)限
select * from dab_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
6、查看所有角色
select * from dba_roles;
select * from dba_role_privs;
select * from user_role_privs;
7、查看所有表空間、臨時(shí)表空間等信息
select tablespace_name,file_name,bytes file_size,autoextensible from dba_data_files;
select tablespace_name,file_name,bytes file_size,autoextensible from dba_temp_files;
8、查看用戶(hù)表空間使用情況:
select 
  a.file_id "FileNo",a.tablespace_name "Tablespace_name",
  a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used", sum(nvl(b.bytes,0)) "Free",sum(nvl(b.bytes,0))/a.bytes*100 "%free" 
from dba_data_files a,dba_free_space b 
where a.file_id=b.file_id(+
group by a.tablespace_name , a.file_id,a.bytes 
order by a.tablespace_name; 
9、查看用戶(hù)所有對(duì)象
select table_name,num_rows from user_tables;
select * from all_tables;
10、詢(xún)所有函數(shù)和存儲(chǔ)過(guò)程
select * from dba_source;
select * from user_source;


xcp 2011-12-31 10:42 發(fā)表評(píng)論
]]>
oracle數(shù)據(jù)恢復(fù)http://www.aygfsteel.com/xcp/archive/2011/12/23/367052.htmlxcpxcpFri, 23 Dec 2011 02:33:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/23/367052.htmlhttp://www.aygfsteel.com/xcp/comments/367052.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/23/367052.html#Feedback2http://www.aygfsteel.com/xcp/comments/commentRss/367052.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/367052.html1.
表查詢(xún)閃回
create table xcp as (select * from b_za_bzdzkxx);
select * from xcp;
select count(1) from xcp;--22001
select count(1) from xcp t where t.dzbh like '510521%';--7011
delete from xcp t where t.dzbh like '510521%';
select count(1) from xcp;--14990
--查找指定時(shí)間點(diǎn)前的數(shù)據(jù)
select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--22001

select * from xcp for update;--添加一條記錄
select count(1) from xcp;--14991

--恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù)(將刪除恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù))

alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001

--恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù),并保留恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù)

create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
select * from xcp2;--臨時(shí)表
alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
insert into xcp select * from xcp2 --將臨時(shí)表的數(shù)據(jù)再插入到源表
select count(1) from xcp;--22002


2.刪除
閃回[10g+]
    刪除閃回為刪除oracle 10G提供了一個(gè)數(shù)據(jù)庫(kù)安全機(jī)制,當(dāng)用戶(hù)刪除一個(gè)表時(shí),oracle 10G會(huì)將該表放到回收站中,回收站中的對(duì)象一直會(huì)保留,直到用戶(hù)決定永久刪除它們或出現(xiàn)表空間的空間不足時(shí)才會(huì)被刪除。回收站是一個(gè)虛擬容器,用于存儲(chǔ)所有被刪除的對(duì)象。數(shù)據(jù)字典user_tables中的列dropped表示被刪除的表,查詢(xún)方法如下:
select table_name,dropped from user_tables;
--設(shè)置數(shù)據(jù)庫(kù)是否啟用回收站
alert session set recyclebin = off;
--查詢(xún)回收站對(duì)象
select * from recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin;


drop table xcp;
select count(1) from xcp;--0
--恢復(fù)drop的表
flashback table xcp to before drop;
select count(1) from xcp;--22001

如果不知道原表名,可以直接使用回收站中的名稱(chēng)進(jìn)行閃回..
flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;
在回收的同時(shí)可以修改表名
flashback table "
BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;

--真正刪除一個(gè)表,而不進(jìn)入回收站,可以在刪除表時(shí)增加purge選項(xiàng)
drop table xcp1 purge;
--也可以從回收站永久性刪除表
purge table xcp1;
--刪除當(dāng)前用戶(hù)回收站
purge recyclebin
--刪除全體用戶(hù)在回收站的資源
purge dba_resyclebin



3.數(shù)據(jù)庫(kù)閃口
[10g+]
    使用數(shù)據(jù)庫(kù)閃回功能,可以使數(shù)據(jù)庫(kù)回到過(guò)去某一狀態(tài),語(yǔ)法如下:
        sql: alter database flashback on;
        sql: flashback database to scn 46963;
        sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');



注:表結(jié)構(gòu)修改后不能直接恢復(fù)
http://blog.csdn.net/colin_liu2009/article/details/6906548

http://www.xifenfei.com/2012/06/%E5%88%A9%E7%94%A8flashback-database%E5%AE%9E%E7%8E%B0%E9%83%A8%E5%88%86%E5%AF%B9%E8%B1%A1%E5%9B%9E%E6%BB%9A.html


xcp 2011-12-23 10:33 發(fā)表評(píng)論
]]>
如何讀取本地磁盤(pán)驅(qū)動(dòng)器?http://www.aygfsteel.com/xcp/archive/2011/12/16/366548.htmlxcpxcpFri, 16 Dec 2011 09:29:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/16/366548.html 

<html>
<head>
</head>
<body>
    
<script type="text/javascript">
        
var   fso;
        
var   drvs;    
        
var   drv; 
        
var   s; 


        fso   
= new ActiveXObject("Scripting.FileSystemObject"); 
        drvs  
= new   Enumerator(fso.Drives); 
        s     
=   " ";

        
for(;!drvs.atEnd();drvs.moveNext()){ 
            drv   
=   drvs.item(); 
            s   
=   s   +   drv.DriveLetter; 
            s   
+=   "   -   "
            
if   (drv.DriveType   ==   3
                n   
=   drv.ShareName; 
            
else   if   (drv.IsReady) 
                n   
=   drv.VolumeName   +   "   totalSize:   "   +   drv.totalSize   +   "   freeSpace:   "   +   drv.freeSpace   +   "   availableSpace:   "   +   drv.availableSpace; 
            
else 
                n   
=   "[Drive   not   ready] "

            s   
+=     n   +   "\n "
        } 
        alert(s);
    
</script>
</body>
</html>

 



xcp 2011-12-16 17:29 發(fā)表評(píng)論
]]>
常用 且 生僻的html標(biāo)簽(to me)http://www.aygfsteel.com/xcp/archive/2011/12/15/366463.htmlxcpxcpThu, 15 Dec 2011 09:59:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/15/366463.html
<noscript>:不支持腳本的顯示noscript里面的內(nèi)容
<noframes>:不支持框架的顯示noframes里面的內(nèi)容
<nobr>: 不換行顯示內(nèi)容
<map>定義一個(gè)圖片,、<area>在圖片上定點(diǎn)顯示
<fieldset>可將表單內(nèi)的元素分組,配合legend標(biāo)簽使用[使用title]
<optgroup>:標(biāo)簽定義選項(xiàng)組[下拉列表里面分組顯示]
<sub>上標(biāo)   <sup>下標(biāo)  <del>文字上加刪除線  <ins>文字下加劃線
<ol>有序列表,前面顯示下標(biāo)標(biāo)識(shí)  <ul>無(wú)序列表,前面顯示圓點(diǎn)標(biāo)識(shí)  <li>子項(xiàng)
<dl>內(nèi)容塊  <dd>內(nèi)容標(biāo)題 <dt>內(nèi)容
<address>顯示地址信息


xcp 2011-12-15 17:59 發(fā)表評(píng)論
]]>
簡(jiǎn)單東東---關(guān)閉占用指定端口的進(jìn)程http://www.aygfsteel.com/xcp/archive/2011/12/13/366257.htmlxcpxcpTue, 13 Dec 2011 08:50:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/13/366257.html今天.....

8080端口被其他的應(yīng)用占用
第一步,命令提示符號(hào),執(zhí)行命令:netstat -ano

可見(jiàn),占用8080端口的進(jìn)程的PID是1476

第二步
  方法一:
    命令提示符號(hào),執(zhí)行命令:tasklist 
    xxx.exe 1476 Console 0 6,464 K
    可見(jiàn),該占用8080端口的進(jìn)程是xxx.exe

    通過(guò)任務(wù)管理器,終止進(jìn)程xxx.exe

 方法二:
    通過(guò)任務(wù)管理器,查看菜單,選擇列,把PID顯示出來(lái)
    查到對(duì)應(yīng)的PID:1476,終止進(jìn)程xxx.exe


xcp 2011-12-13 16:50 發(fā)表評(píng)論
]]>
11個(gè)讓你代碼整潔的原則http://www.aygfsteel.com/xcp/archive/2011/12/09/366001.htmlxcpxcpFri, 09 Dec 2011 14:13:00 GMThttp://www.aygfsteel.com/xcp/archive/2011/12/09/366001.htmlhttp://www.aygfsteel.com/xcp/comments/366001.htmlhttp://www.aygfsteel.com/xcp/archive/2011/12/09/366001.html#Feedback0http://www.aygfsteel.com/xcp/comments/commentRss/366001.htmlhttp://www.aygfsteel.com/xcp/services/trackbacks/366001.html

寫(xiě)Web頁(yè)面就像我們建設(shè)房子一樣,地基牢固,房子才不會(huì)倒。同樣的,我們制作Web頁(yè)面也一樣,一個(gè)良好的HTML結(jié)構(gòu)是制作一個(gè)美麗的網(wǎng)站的開(kāi)始,同樣的,良好的CSS只存在同樣良好的HTML中,所以一個(gè)干凈的,語(yǔ)義的HTML的優(yōu)點(diǎn)很多,那么平時(shí)制作中,我們做到了這一點(diǎn)嗎?我們一起來(lái)看一張圖片:

上圖展示了兩段代碼,我想大家都只會(huì)喜歡第一種,我們先不說(shuō)其語(yǔ)義,至少他的結(jié)構(gòu)讓我們看上去清爽,而第二種呢?一看就是糟糕的代碼的代碼,讓人討厭的代碼。那么要怎么樣才能寫(xiě)出一個(gè)好的代碼,整潔的代碼呢?下面我們就從以下十二個(gè)方面一起來(lái)學(xué)習(xí),只要大家以后在寫(xiě)代碼的時(shí)候能堅(jiān)持下面的十二個(gè)原則,保準(zhǔn) 你的代碼質(zhì)量能上去,而且你寫(xiě)的代碼會(huì)人見(jiàn)人愛(ài)。

一、DOCTYPE的聲明

如果我們想做好一件事情,首先要知道我們有哪些權(quán)利去做,就如“DOCTYPE”的聲明,我們沒(méi)有必要去討論是否使用HTML4.01或者XHTML1.0或者說(shuō)現(xiàn)在的HTML5都提供了嚴(yán)格版本或者過(guò)渡版本,這些都能很好的支持我們寫(xiě)的代碼:

由于我們現(xiàn)在的布局不需要table布局也能做出很好的布局,那么我們就可以考慮不使用過(guò)渡型而使用嚴(yán)格型的“DOCTYPE”,為了向后兼容,我建議使用HTML5的聲明模式:

<!DOCTYPE HTML> 		<html lang="en-US"> 	

如果想了解更多這方面的知識(shí),可以點(diǎn)擊:

  1. W3C: Recommended DTDs to use in your Web document
  2. Fix Your Site With the Right DOCTYPE!
  3. No more Transitional DOCTYPEs, please

二、字符集和編碼字符

在每個(gè)頁(yè)面的開(kāi)始中,我們都在<head>中設(shè)置了字符集,我們這里都是使用“UTF-8”

<meta charset="UTF-8" /> 	

而且我們?cè)谄綍r(shí)寫(xiě)頁(yè)面中時(shí),時(shí)常會(huì)碰到"&"這樣的符號(hào),那么我們不應(yīng)該直接在頁(yè)面這樣寫(xiě)“&”:

我們應(yīng)該在代碼中使用字符編碼來(lái)實(shí)現(xiàn),比如說(shuō)“&”我們?cè)诖a中應(yīng)該使用“&amp;”來(lái)代替他。

如果想了解更多這方面的知識(shí),可以點(diǎn)擊:

  1. Wikipedia: UTF-8
  2. A tutorial on character code issues
  3. The Extended ASCII table

三、正確的代碼縮進(jìn)

在頁(yè)面編輯中,代碼的縮進(jìn)有沒(méi)有正確,他不會(huì)影響你網(wǎng)站的任何功能,但要是你沒(méi)有一個(gè)規(guī)范的縮進(jìn)原則,讓讀你代碼的人是非常的生氣,所以說(shuō)正確的代碼縮進(jìn)可以增強(qiáng)你的代碼可讀性。標(biāo)準(zhǔn)程序的縮進(jìn)應(yīng)該是一個(gè)制表符(或幾個(gè)空格),形像一點(diǎn)的我們來(lái)看下文章開(kāi)頭那張圖,或者一起來(lái)看下面展示的這張圖,你看后就知道以后自己的代碼要怎么樣書(shū)寫(xiě)才讓人看了爽:

不用說(shuō),大家都喜歡下面的那種代碼吧。這只是一個(gè)人的習(xí)慣問(wèn)題,不過(guò)建議從開(kāi)始做好,利人利已。有關(guān)于這方面的介紹,大家還可以參考:Clean up your Web pages with HTML TIDY

四、外鏈你的CSS樣式和Javascript腳本

頁(yè)面中寫(xiě)入CSS樣式有很多種方法,有些直接將樣式放入頁(yè)面的“<head>”中,這將是一個(gè)很不好的習(xí)慣,因?yàn)檫@樣不僅會(huì)搞亂我們的標(biāo)記,而且這些樣式只適合這一個(gè)HTML頁(yè)面。所以我們需要將CSS單獨(dú)提出,保存在外部,這樣后面的頁(yè)面也可以鏈接到這些樣式,如果你頁(yè)面需要修改,我們也只需要修改樣式文件就可以。正如下圖所示:

上面我們所說(shuō)的只是樣式,其實(shí)javascript腳本也和CSS樣式是同一樣的道理。圖文并說(shuō),我最終想表達(dá)的意思是“在制作web頁(yè)面中,盡量將你的CSS樣式和javascript腳本單獨(dú)放在一個(gè)文件中,然后通過(guò)鏈接的方式引用這些文件,這樣做的最大好處是,方便你的樣式和腳本的管理與修改。

五、正確的標(biāo)簽嵌套

我們?cè)趯?xiě)HTML時(shí)總是需要標(biāo)簽的層級(jí)嵌套來(lái)幫我們完成HTML的書(shū)寫(xiě),但這些HTML的嵌套是有一定的規(guī)則的,如果要細(xì)說(shuō)的話,我們可能要用幾個(gè)章節(jié)來(lái)描述,那么我今天這里要說(shuō)的是,我們?cè)趯?xiě)HTML時(shí)不應(yīng)該犯以下這樣的超級(jí)錯(cuò)誤:

上圖的結(jié)構(gòu)我們是常見(jiàn)的,比如說(shuō)首頁(yè)的標(biāo)題,那么我們就應(yīng)該注意了,不能把“<h1>”放在“<a>”標(biāo)簽中,換句話說(shuō),就是不能么塊元素和在行內(nèi)元素中。上面只是一個(gè)例子,只是希望大家在平時(shí)的制作中不應(yīng)該犯這樣的超級(jí)錯(cuò)誤。

六、刪除不必要的標(biāo)簽

首先我們一起來(lái)看一個(gè)實(shí)例的截圖:

上圖明顯是一個(gè)導(dǎo)航菜單的制作,在上圖的實(shí)例中:有一個(gè)“div#topNav”包住了列表“ul#bigBarNavigation”,而“div”和“ul”列表都是塊元素,加上“div”此處用來(lái)包“ul”根本就沒(méi)有起到任何作用。雖然“div”的出現(xiàn)給我們制作web頁(yè)面帶來(lái)了極大的好處,但我們也沒(méi)有必要到處這樣的亂用,不知道大家平時(shí)有沒(méi)有注意這樣的細(xì)節(jié)呢?我是犯這樣的錯(cuò)誤,如果你也有過(guò)這樣的經(jīng)歷,那么從今天開(kāi)始,從現(xiàn)在開(kāi)始,我們一起努力來(lái)改正這樣的錯(cuò)誤。

有關(guān)于如何正確的使用標(biāo)簽,大家感興趣的話可以點(diǎn)擊:Divitis: what it is, and how to cure it.

七、使用更好的命名

這里所說(shuō)的命名就是給你的頁(yè)面中相關(guān)元素定義類(lèi)名或者是ID名,很多同學(xué)都有這栗的習(xí)慣,比如說(shuō)有一個(gè)元素字體是紅色的,給他加上“red”,甚至布局都寫(xiě)“left-sidebar”等,但是你有沒(méi)有想過(guò),如果這個(gè)元素定義了“red”后,過(guò)幾天客戶(hù)要求使用“藍(lán)色”呢?或者又說(shuō),那時(shí)的“left-sidebar”邊欄此時(shí)不想放在左邊了,而是想放在右邊,那么這樣一來(lái)我們前面的命名可以說(shuō)是一點(diǎn)意義都沒(méi)有了,正如下面的一個(gè)圖所示:

那么定義一個(gè)好的名就很得要了,不但自己能看懂你的代碼,而且別人也能輕松讀懂你的代碼,比如說(shuō)一個(gè)好的類(lèi)名和ID名“mainNav”、“subNav”、“footer”等,他能描述所包含的事情。不好的呢,比如前面所說(shuō)的。

如果想了解更多這方面的知識(shí),可以點(diǎn)擊:

  1. Standardizing CSS class and id names
  2. CSS Tip #2: Structural Naming Convention in CSS
  3. CSS coding: semantic approach in naming convention
  4. CSS Naming Conventions and Coding Style

八、離開(kāi)版本的CSS

我們?cè)谠O(shè)計(jì)菜單時(shí),有時(shí)要求所有菜單選項(xiàng)的文本全部大寫(xiě),大家平時(shí)是不是直接在HTML標(biāo)簽中就將他們?cè)O(shè)置成大寫(xiě)狀態(tài)呢?如果是的話,我覺(jué)得不好,如果為了將來(lái)具有更好的擴(kuò)展性,我們不應(yīng)該在HTML就將他們?cè)O(shè)置為全部大寫(xiě),更好的解決方法是通過(guò)CSS來(lái)實(shí)現(xiàn):

九、定義<body>的類(lèi)名或ID名

大家平時(shí)制作web頁(yè)面時(shí)不知道有沒(méi)有碰到這樣的問(wèn)題,就是整站下來(lái),使用了相同的布局和結(jié)構(gòu),換句話說(shuō),你在頁(yè)面的布局上使用了相同的結(jié)構(gòu),相同的類(lèi)名,但是突然你的上級(jí)主管說(shuō)應(yīng)客戶(hù)的需求,有一個(gè)頁(yè)面的布局需要邊欄和主內(nèi)容對(duì)換一下。此時(shí)你又不想為了改變一下布局而修改整個(gè)頁(yè)面的結(jié)構(gòu),此時(shí)有一個(gè)很好的解決辦法,就是在你的這個(gè)頁(yè)面中的“<body>”中定義一個(gè)特殊的類(lèi)名或ID名,這樣來(lái)你就可以輕松的達(dá)到你所要的需求。這樣的使用,不知道大家使用過(guò)沒(méi)有:

給“<body>”定義獨(dú)特的類(lèi)和ID名稱(chēng)是非常強(qiáng)大的,不僅僅是為了像上面一樣幫你改變布局,最主要的是有時(shí)他能幫你實(shí)現(xiàn)頁(yè)面中的某一部分達(dá)到特殊效果,而又不影響其它頁(yè)面的效果。為什么有這樣的功能,不用我說(shuō)我想大家都是知道的。因?yàn)槊總€(gè)頁(yè)面的內(nèi)容都是“<body>”的后代元素。

如果想了解更多這方面的知識(shí),可以點(diǎn)擊:

  1. ID Your Body For Greater CSS Control and Specificity
  2. Case study: Re-using styles with a body class

十、驗(yàn)證你的代碼

人不免會(huì)出錯(cuò),我們編寫(xiě)代碼的時(shí)候也是一樣的,你有時(shí)候總會(huì)小寫(xiě)或多寫(xiě),比如說(shuō)忘了關(guān)閉你的元素標(biāo)簽,不記得寫(xiě)上元素必須的屬性,雖然有一些錯(cuò)誤不會(huì)給你帶來(lái)什么災(zāi)難性的后果,但也不免會(huì)給你帶來(lái)你無(wú)法意估的錯(cuò)誤。所以建議您寫(xiě)完代碼的時(shí)候去驗(yàn)證你一下你的代碼。驗(yàn)證后的代碼總是比不驗(yàn)證的代碼強(qiáng):

為一有效的驗(yàn)證你的代碼,我們可以使用相關(guān)的工具或者瀏覽器的插件來(lái)幫助我們完成。如果你的代碼沒(méi)有任何錯(cuò)誤,W3C驗(yàn)證工具會(huì)在你們面前呈現(xiàn)綠色的文字,這樣讓你是無(wú)比的激動(dòng)人心,因?yàn)樵俅巫C明了你寫(xiě)的代碼經(jīng)得起W3C的標(biāo)準(zhǔn)。

如果想了解更多這方面的知識(shí),可以點(diǎn)擊:

  1. The W3C Markup Validation Service
  2. XHTML-CSS Validator
  3. Free Site Validator (checks entire site, not just one page)

十一、邏輯順序

這是一個(gè)很少見(jiàn)的錯(cuò)誤情況,因?yàn)槲蚁氪蠹覍?xiě)頁(yè)面都不會(huì)把邏輯順序打亂,換句話說(shuō),如果可能的話,讓你的網(wǎng)站具有一個(gè)先后邏輯順序是最好的,比如說(shuō)先寫(xiě)頁(yè)頭,在寫(xiě)頁(yè)體,最后寫(xiě)頁(yè)腳。當(dāng)然有時(shí)也會(huì)碰到特殊情況,如何頁(yè)腳部分在于我們代碼的邊欄以上,這可能是因?yàn)樗钸m合你的網(wǎng)站設(shè)計(jì)需求,這樣或許是可以理解的,但是如果你有別的方式實(shí)現(xiàn),我們都應(yīng)該把頁(yè)腳是放在一個(gè)頁(yè)面的最后,然后在通過(guò)特定的技術(shù)讓它達(dá)到你的設(shè)計(jì)需求:

上面我們一起討論了多個(gè)如何讓你開(kāi)始寫(xiě)一個(gè)整潔的HTML代碼。從一個(gè)項(xiàng)目的開(kāi)始,這一切都是非常容易的,但是如果需要你去修復(fù)一個(gè)現(xiàn)有的代碼,那多少都會(huì)有一定的難度。上面說(shuō)這么多主要是告訴您將要如何學(xué)習(xí)編寫(xiě)一個(gè)良好的、整潔的HTML代碼,并且一直堅(jiān)持這樣的編寫(xiě)。希望讀完這篇文章垢,在你的下一個(gè)項(xiàng)目中,你能從頭開(kāi)始,堅(jiān)持寫(xiě)一個(gè)整潔的HTML代碼。希望大家喜歡這樣的教程。最后在結(jié)束此教程之前,讓我們大家一起來(lái)感謝給我們帶來(lái)這么好的經(jīng)驗(yàn)之談——《12 Principles For Keeping Your Code Clean》如果你有什么好的經(jīng)驗(yàn),希望與我們一起分享。



xcp 2011-12-09 22:13 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 朝阳县| 无为县| 获嘉县| 丹阳市| 青岛市| 大厂| 农安县| 社会| 阿坝县| 滨州市| 新竹市| 吉林市| 蒲江县| 尉犁县| 和田市| 家居| 甘德县| 扬州市| 太原市| 台北市| 镇坪县| 梁平县| 开封市| 利川市| 西充县| 花垣县| 镇赉县| 南宫市| 洪江市| 洪泽县| 改则县| 海宁市| 天水市| 太和县| 布尔津县| 黄山市| 汨罗市| 巴马| 鄂尔多斯市| 延寿县| 许昌县|