﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-不知疲倦的猪</title><link>http://www.blogjava.net/loocky/</link><description>可以怀疑我的水平，但是不能怀疑的人品！！</description><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 10:27:21 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 10:27:21 GMT</pubDate><ttl>60</ttl><item><title>转贴一个北京英语角，是一个北京免费的英语角。</title><link>http://www.blogjava.net/loocky/archive/2011/06/19/352610.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Sun, 19 Jun 2011 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2011/06/19/352610.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/352610.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2011/06/19/352610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/352610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/352610.html</trackback:ping><description><![CDATA[<div>利用免费的<a title="北京英语角" href="http://www.yellenglish.com/learning/jianqiaoyingyu/">英语角</a>把英语练好<br /><p>北京&nbsp; <strong>也乐英语</strong>为了满足广大英语爱好者的需要特推出周末免费英语角服务，</p> <p><a href="http://www.yellenglish.com/learning/jianqiaoyingyu/">北京英语角</a>的组织形式如下：</p> <p>&nbsp;&nbsp;&nbsp; 1：由也乐英语派出一名外教和一名助理负责组织英语角的活动。</p> <p>&nbsp;&nbsp;&nbsp; 2: 英语角每周组织一次活动，也乐英语培训学校提供一间教室为大家的活动场所。</p> <p>&nbsp;&nbsp;&nbsp; 3：英语爱好者可以免费参加英语角的活动，不收取任何费用，此活动是公益活动，也乐英</p> <p>语不收取任何费用，也不限制参加次数。</p> <p>&nbsp;&nbsp;&nbsp; 4：也乐英语免费提供给英语爱好者茶水、咖啡、以及活动所采用的书籍报纸。</p> <p>&nbsp;&nbsp;&nbsp; 5：每周一到2个话题，由外教提前一周告诉大家，大家可以简单准备，以便在课堂上<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跟外教以及同学交流。<br /> &nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; 6：外教会纠正大家的发音、语法、词汇上的错误，会形成一些总结，也希望大家能够畅所</p> <p>欲言，大胆的说英语。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 7：所有参加英语角的爱好者，请您在交流期间把手机调为静音。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 也乐英语地址：北京丰台区马家堡西路15号 时代风帆大厦2区1901 <br /> &nbsp;&nbsp;&nbsp;&nbsp; 交通状况：地铁四号线角门西站A口上楼即可。 51、501、54、529、698、646、707 嘉园</p> <p>二里东门下车<br /> &nbsp;&nbsp;&nbsp;&nbsp; 联系电话：010-58423871&nbsp; 15330275871</p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此活动由于报名数量众多，所以需要大家提前预约。<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也乐英语网站：www.yellenglish.com<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也乐英语 争做北京最好的英语角.</div><img src ="http://www.blogjava.net/loocky/aggbug/352610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2011-06-19 09:35 <a href="http://www.blogjava.net/loocky/archive/2011/06/19/352610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 收购sun带来的影响</title><link>http://www.blogjava.net/loocky/archive/2009/04/22/266903.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Wed, 22 Apr 2009 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2009/04/22/266903.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/266903.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2009/04/22/266903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/266903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/266903.html</trackback:ping><description><![CDATA[我认为最大的冲击莫过于 惠普，oracle跟惠普的直接竞争会加大，从合作变为竞争，我认为惠普如果不收购redhat来对抗，未来肯定落下风！<img src ="http://www.blogjava.net/loocky/aggbug/266903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2009-04-22 09:56 <a href="http://www.blogjava.net/loocky/archive/2009/04/22/266903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JACORB开发corba应用</title><link>http://www.blogjava.net/loocky/archive/2007/11/22/162301.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Thu, 22 Nov 2007 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/11/22/162301.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/162301.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/11/22/162301.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/162301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/162301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上篇文章讲述了jacorb 的配置，本章讲叙其应用，随后的几篇文章会重点讲述corba的开发&nbsp;JACORB开发以及corba的请求方式：&nbsp;&nbsp; JacORB的应用开发一般分为以下五步：1.写IDL接口定义2.编译IDL接口定义生成Java类3.实现步骤2中生成的接口4.写服务器启动类，并注册到ORB5.写客户端去获取服务对象引用&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/loocky/archive/2007/11/22/162301.html'>阅读全文</a><img src ="http://www.blogjava.net/loocky/aggbug/162301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-11-22 10:41 <a href="http://www.blogjava.net/loocky/archive/2007/11/22/162301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JACORB搭建一个corba的开发环境</title><link>http://www.blogjava.net/loocky/archive/2007/11/21/162026.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Wed, 21 Nov 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/11/21/162026.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/162026.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/11/21/162026.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/162026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/162026.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; how to setup jacorb dev env<br />
1:download JacORB_2_2</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.jacorb.org/download.html <br />
&nbsp; download ant<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://ant.apache.org/bindownload.cgi</p>
<p>2:extact JacORB_2_2.jar to d:\JacORB_2_2 </p>
<p>3:setup sys environment</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set ANT_HOME=<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set JAVA_HOME=<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set JACORB_HOME=d:\JacORB_2_2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set PATH=%PATH%;%ANT_HOME%\bin;%JAVA_HOME%\bin;%JACORB_HOME%\bin;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set CLASSPAHT=.;%CLASSPAHT%;%ANT_HOME%\lib\ant.jar;%JACORB_HOME%\lib\jarorb.jar;%JACORB_HOME%\lib\idl.jar\;%JACORB_HOME%\lib\logkit-1.2.jar</p>
<p>4:rename %JACORB_HOME%\etc\jacorb_properties.template to %JACORB_HOME%\etc\jacorb.properties<br />
&nbsp; and modify the 50th line to 53th line to<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ORBInitRef.NameService=file:/y:/nsiona.ref<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ORBInitRef.NameService=file://d://test//NS_Ref<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
#ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
#ORBInitRef.TradingService=http://www.x.y.z/~user/TraderRef<br />
&nbsp; <br />
&nbsp; modify 618th line to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jacorb.naming.ior_filename=d://test//NS_Ref</p>
<p>5:rename&nbsp; %JACORB_HOME%\jacotemplate.bat to %JACORB_HOME%\jaco.bat<br />
&nbsp; <br />
&nbsp; and modify related env variable<br />
&nbsp; <br />
&nbsp; rename&nbsp;&nbsp; %JACORB_HOME%\idltemplate.bat to %JACORB_HOME%\idl.bat<br />
&nbsp;&nbsp; <br />
&nbsp; and modify related env variable</p>
<p>&nbsp;</p>
<p>6:&nbsp; use ant compile and build idl and java</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp; cd&nbsp; %JACORB_HOME%\demo\grid&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; run ant<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; the generate class file in %JACORB_HOME%\classes&nbsp; and generated java file in %JACORB_HOME%\demo\grid</p>
<p><br />
7: open a new cmd window:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd %JACORB_HOME%&nbsp;&nbsp; ns <br />
&nbsp; <br />
&nbsp;&nbsp; you can see the following result:&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]</p>
<p>&nbsp;&nbsp; open a new cmd window:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd %JACORB_HOME%&nbsp;&nbsp; jaco demo.grid.Server<br />
&nbsp; you can see the following result:&nbsp;&nbsp;&nbsp; <br />
&nbsp; [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]<br />
&nbsp;&nbsp; <br />
&nbsp; open a new cmd window:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd %JACORB_HOME%&nbsp;&nbsp; jaco demo.grid.client<br />
&nbsp;&nbsp;&nbsp; you can see the following result:&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; [ configuration jacorb loaded from file D:\work\nj\JACORB\etc\jacorb.properties]<br />
&nbsp;&nbsp; Height = 31<br />
&nbsp;&nbsp; Width = 14<br />
&nbsp;&nbsp; Old value at (30,13): 0.21<br />
&nbsp;&nbsp; Setting (30,13) to 470.11<br />
&nbsp;&nbsp; New value at (30,13): 470.11<br />
&nbsp;&nbsp; MyException, reason: This is only a test exception, no harm done :-)<br />
&nbsp;&nbsp; done.</p><img src ="http://www.blogjava.net/loocky/aggbug/162026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-11-21 10:36 <a href="http://www.blogjava.net/loocky/archive/2007/11/21/162026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数 转载</title><link>http://www.blogjava.net/loocky/archive/2007/11/13/160213.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Tue, 13 Nov 2007 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/11/13/160213.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/160213.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/11/13/160213.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/160213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/160213.html</trackback:ping><description><![CDATA[&nbsp;
<table style="border-collapse: collapse" bordercolor="#a5bd6b" cellspacing="1" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td align="center">
            <table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
                <tbody>
                    <tr>
                        <td align="center">
                        <table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
                            <tbody>
                                <tr>
                                    <td>
                                    <div id="art" style="margin: 15px">
                                    <div>oracle的分析函数over 及开窗函数</div>
                                    <div><font size="2">一：分析函数<strong style="color: black; background-color: #a0ffff">over</strong><br />
                                    <strong style="color: black; background-color: #ffff66">Oracle</strong>从8.1.6开始提供分析函数，分析函数用于计算基于组的某种聚合值，它和聚合函数的不同之处是<br />
                                    对于每个组返回多行，而聚合函数对于每个组只返回一行。 <br />
                                    下面通过几个例子来说明其应用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>
                                    <div><font size="2">1：统计某商店的营业额。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></div>
                                    <div><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sale<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30<br />
                                    &nbsp;&nbsp;&nbsp; 规则：按天统计：每天都统计前面几天的总额<br />
                                    &nbsp;&nbsp;&nbsp; 得到的结果：<br />
                                    &nbsp;&nbsp;&nbsp; DATE&nbsp;&nbsp; SALE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM<br />
                                    &nbsp;&nbsp;&nbsp; ----- -------- ------<br />
                                    &nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1天&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1天＋2天&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1天＋2天＋3天&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    2:统计各班成绩第一名的同学信息</font></div>
                                    <div><font size="2">&nbsp;&nbsp;&nbsp; NAME&nbsp;&nbsp; CLASS S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; ----- ----- ---------------------- <br />
                                    &nbsp;&nbsp;&nbsp; fda&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; ffd&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; dss&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; cfe&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; gds&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; gf&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; ddd&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; adf&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; asdf&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 3dd&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 通过：&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; --<br />
                                    &nbsp;&nbsp;&nbsp; select * from&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; select name,class,s,rank()<strong style="color: black; background-color: #a0ffff">over</strong>(partition by class order by s desc) mm from t2<br />
                                    &nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; where mm=1 <br />
                                    &nbsp;&nbsp;&nbsp; --<br />
                                    &nbsp;&nbsp;&nbsp; 得到结果：<br />
                                    &nbsp;&nbsp;&nbsp; NAME&nbsp;&nbsp; CLASS S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; ----- ----- ---------------------- ---------------------- <br />
                                    &nbsp;&nbsp;&nbsp; dss&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; gds&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; gf&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; ddd&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 注意：<br />
                                    &nbsp;&nbsp;&nbsp; 1.在求第一名成绩的时候，不能用row_number()，因为如果同班有两个并列第一，row_number()只返回一个结果&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; 2.rank()和dense_rank()的区别是：<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --rank()是跳跃排序，有两个第二名时接下来就是第四名<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --dense_rank()l是连续排序，有两个第二名时仍然跟着第三名<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    3.分类统计 (并显示信息)</font></div>
                                    <div><font size="2">&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp; B&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; -- -- ---------------------- <br />
                                    &nbsp;&nbsp;&nbsp; m&nbsp;&nbsp; a&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; n&nbsp;&nbsp; a&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; m&nbsp;&nbsp; a&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; n&nbsp;&nbsp; b&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; n&nbsp;&nbsp; b&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp; h&nbsp;&nbsp; b&nbsp;&nbsp; 3 </font></div>
                                    <div><font size="2">&nbsp;&nbsp; select a,c,sum(c)<strong style="color: black; background-color: #a0ffff">over</strong>(partition by a) from t2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; 得到结果：<br />
                                    &nbsp;&nbsp; A&nbsp;&nbsp; B&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(C)<strong style="color: black; background-color: #a0ffff">OVER</strong>(PARTITIONBYA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; -- -- ------- ------------------------ <br />
                                    &nbsp;&nbsp; h&nbsp;&nbsp; b&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; m&nbsp;&nbsp; a&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; m&nbsp;&nbsp; a&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; n&nbsp;&nbsp; a&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; n&nbsp;&nbsp; b&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; n&nbsp;&nbsp; b&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; x&nbsp;&nbsp; b&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; 如果用sum，group by 则只能得到<br />
                                    &nbsp;&nbsp; A&nbsp;&nbsp; SUM(C)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; -- ---------------------- <br />
                                    &nbsp;&nbsp; h&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; m&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; n&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; x&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; 无法得到B列值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;<br />
                                    ＝＝＝＝＝</font></div>
                                    <div>
                                    <div>
                                    <p><font face="verdana, arial, helvetica" size="2"><span class="javascript" id="text2200299" style="font-size: 12px">select * from test<br />
                                    <br />
                                    数据:<br />
                                    A B C <br />
                                    1 1 1 <br />
                                    1 2 2 <br />
                                    1 3 3 <br />
                                    2 2 5 <br />
                                    3 4 6 <br />
                                    <br />
                                    <br />
                                    ---将B栏位值相同的对应的C 栏位值加总<br />
                                    select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum<br />
                                    from test<br />
                                    <br />
                                    A B C C_SUM <br />
                                    1 1 1 1 <br />
                                    1 2 2 7 <br />
                                    2 2 5 7 <br />
                                    1 3 3 3 <br />
                                    3 4 6 6 <br />
                                    <br />
                                    <br />
                                    <br />
                                    ---如果不需要已某个栏位的值分割,那就要用 null<br />
                                    <br />
                                    eg: 就是将C的栏位值summary 放在每行后面<br />
                                    <br />
                                    select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum<br />
                                    from test<br />
                                    <br />
                                    A B C C_SUM <br />
                                    1 1 1 17 <br />
                                    1 2 2 17 <br />
                                    1 3 3 17 <br />
                                    2 2 5 17 <br />
                                    3 4 6 17</span></font></p>
                                    <p><font face="verdana, arial, helvetica" size="2"></font>&nbsp;</p>
                                    <p><font face="verdana, arial, helvetica" size="2"><span class="javascript" style="font-size: 12px">求个人工资占部门工资的百分比 </p>
                                    <p><font face="verdana, arial, helvetica" size="2"><span class="javascript" id="text3005546" style="font-size: 12px">SQL&gt; select * from salary;<br />
                                    <br />
                                    NAME DEPT SAL<br />
                                    ---------- ---- -----<br />
                                    a 10 2000<br />
                                    b 10 3000<br />
                                    c 10 5000<br />
                                    d 20 4000<br />
                                    <br />
                                    SQL&gt; select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;<br />
                                    <br />
                                    NAME DEPT SAL PERCENT<br />
                                    ---------- ---- ----- ----------<br />
                                    a 10 2000 20<br />
                                    b 10 3000 30<br />
                                    c 10 5000 50<br />
                                    d 20 4000 100</span></font></p>
                                    </span></font></div>
                                    </div>
                                    <div><font size="2">二：开窗函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开窗函数指定了分析函数工作的数据窗口大小，这个数据窗口大小可能会随着行的变化而变化，举例如下： <br />
                                    1：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（order by salary） 按照salary排序进行累计，order by是个默认的开窗函数<br />
                                    &nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（partition by deptno）按照部门分区<br />
                                    2：<br />
                                    &nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（order by salary range between 5 preceding and 5 following）<br />
                                    &nbsp;&nbsp; 每行对应的数据窗口是之前行幅度值不超过5，之后行幅度值不超过5<br />
                                    &nbsp;&nbsp; 例如:对于以下列<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; aa<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 1<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 2<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 2<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 2<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 3<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 4<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 5<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 6<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 7<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp; 9<br />
                                    &nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; sum(aa)<strong style="color: black; background-color: #a0ffff">over</strong>（order by aa range between 2 preceding and 2 following）<br />
                                    &nbsp;&nbsp; 得出的结果是<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------------------- ------------------------------------------------------- <br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp; 就是说，对于aa=5的一行 ，sum为&nbsp;&nbsp; 5-1&lt;=aa&lt;=5+2 的和<br />
                                    &nbsp;&nbsp; 对于aa=2来说 ，sum=1+2+2+2+3+4=14&nbsp;&nbsp;&nbsp;&nbsp; ；<br />
                                    &nbsp;&nbsp; 又如 对于aa=9 ，9-1&lt;=aa&lt;=9+2 只有9一个数，所以sum=9&nbsp;&nbsp;&nbsp; ；<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    3：其它：<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（order by salary rows between 2 preceding and 4 following）<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每行对应的数据窗口是之前2行，之后4行 <br />
                                    4：下面三条语句等效：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（order by salary rows between unbounded preceding and unbounded following）<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每行对应的数据窗口是从第一行到最后一行，等效：<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>（order by salary range between unbounded preceding and unbounded following）<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等效<br />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #a0ffff">over</strong>(partition by null)</font></div>
                                    </div>
                                    </div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/loocky/aggbug/160213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-11-13 13:33 <a href="http://www.blogjava.net/loocky/archive/2007/11/13/160213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMS复习</title><link>http://www.blogjava.net/loocky/archive/2007/08/15/136816.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Wed, 15 Aug 2007 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/08/15/136816.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/136816.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/08/15/136816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/136816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/136816.html</trackback:ping><description><![CDATA[<p>由于一些原因，最近要复习一些东西，所以就把JMS的东西再复习一遍，以下便是例子<br />
<br />
jms 中最重要的几个概念destination，ACKNOWLEDGE，subscribe,durable subscribe</p>
<p>destination：topic queque<br />
&nbsp;&nbsp;queue简单点说就是1:1 一个消息只能由一个consumer去消费，别的consumer来消费的时候已经没了，先到先得<br />
topic简单点说就是1:N 一个消息可以由多个consumer来消费，谁来消费都有<br />
&nbsp;subscribe，拿topic来说如果当前订阅不是持久订阅，只有再订阅后生产者生产得消息才能被consumer得到，持久订阅只要没有被consumer消费，早晚会消费这个消息<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;一下是几个例子<br />
&nbsp;<br />
&nbsp;queuesend：queque消息产生<br />
&nbsp;queuereceive：queque消息得消费<br />
&nbsp;topicsend ：topic消息得产生<br />
&nbsp;topicreceive1：topic消息的非订阅<br />
&nbsp;topicrecieve2：topic消息的持久订阅<br />
&nbsp;<br />
&nbsp;这个例子实在WEBLOGIC814上测试过的，当然要定义JMSSERVER,FACTORY,DESTINATION。<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;QueueSend<br />
&nbsp;<br />
&nbsp;import java.io.BufferedReader;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.util.Hashtable;</p>
<p>import javax.jms.JMSException;<br />
import javax.jms.Queue;<br />
import javax.jms.QueueConnection;<br />
import javax.jms.QueueConnectionFactory;<br />
import javax.jms.QueueSender;<br />
import javax.jms.QueueSession;<br />
import javax.jms.Session;<br />
import javax.jms.TextMessage;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p>public class QueueSend {<br />
&nbsp;// Defines the JNDI context factory.<br />
&nbsp;public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";</p>
<p>&nbsp;// Defines the JNDI provider url.<br />
&nbsp;public final static String PROVIDER_URL = " t3://localhost:7001";</p>
<p>&nbsp;// Defines the JMS connection factory for the queue.<br />
&nbsp;public final static String JMS_FACTORY = "SendJMSFactory";</p>
<p>&nbsp;// Defines the queue.<br />
&nbsp;public final static String QUEUE = "SendJMSQueue";</p>
<p>&nbsp;private QueueConnectionFactory qconFactory;</p>
<p>&nbsp;private QueueConnection qcon;</p>
<p>&nbsp;private QueueSession qsession;</p>
<p>&nbsp;private QueueSender qsender;</p>
<p>&nbsp;private Queue queue;</p>
<p>&nbsp;private TextMessage msg;</p>
<p>&nbsp;/**<br />
&nbsp; * Creates all the necessary objects for sending messages to a JMS queue.<br />
&nbsp; * <br />
&nbsp; * @param ctx<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI initial context<br />
&nbsp; * @param queueName<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name of queue<br />
&nbsp; * @exception NamingException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation cannot be performed<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to initialize due to internal error<br />
&nbsp; */<br />
&nbsp;public void init(Context ctx, String queueName) throws NamingException,<br />
&nbsp;&nbsp;&nbsp;JMSException {<br />
&nbsp;&nbsp;qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
&nbsp;&nbsp;qcon = qconFactory.createQueueConnection();<br />
&nbsp;&nbsp;qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
&nbsp;&nbsp;queue = (Queue) ctx.lookup(queueName);<br />
&nbsp;&nbsp;qsender = qsession.createSender(queue);<br />
&nbsp;&nbsp;msg = qsession.createTextMessage();<br />
&nbsp;&nbsp;qcon.start();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Sends a message to a JMS queue.<br />
&nbsp; * <br />
&nbsp; * @param message<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message to be sent<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to send message due to internal error<br />
&nbsp; */<br />
&nbsp;public void send(String message) throws JMSException {<br />
&nbsp;&nbsp;msg.setText(message);<br />
&nbsp;&nbsp;qsender.send(msg);<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Closes JMS objects.<br />
&nbsp; * <br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to close objects due to internal error<br />
&nbsp; */<br />
&nbsp;public void close() throws JMSException {<br />
&nbsp;&nbsp;qsender.close();<br />
&nbsp;&nbsp;qsession.close();<br />
&nbsp;&nbsp;qcon.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * main() method.<br />
&nbsp; * <br />
&nbsp; * @param args<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebLogic Server URL<br />
&nbsp; * @exception Exception<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation fails<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) throws Exception {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;InitialContext ic = getInitialContext();<br />
&nbsp;&nbsp;&nbsp;QueueSend qs = new QueueSend();<br />
&nbsp;&nbsp;&nbsp;qs.init(ic, QUEUE);<br />
&nbsp;&nbsp;&nbsp;readAndSend(qs);<br />
&nbsp;&nbsp;&nbsp;qs.close();<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;private static void readAndSend(QueueSend qs) throws IOException,<br />
&nbsp;&nbsp;&nbsp;JMSException {<br />
&nbsp;&nbsp;BufferedReader msgStream = new BufferedReader(new InputStreamReader(<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.in));<br />
&nbsp;&nbsp;String line = null;<br />
&nbsp;&nbsp;boolean quitNow = false;<br />
&nbsp;&nbsp;do {<br />
&nbsp;&nbsp;&nbsp;System.out.print("Enter message (\"quit\" to quit): ");<br />
&nbsp;&nbsp;&nbsp;line = msgStream.readLine();<br />
&nbsp;&nbsp;&nbsp;if (line != null &amp;&amp; line.trim().length() != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;qs.send(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("JMS Message Sent: " + line + "\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;quitNow = line.equalsIgnoreCase("quit");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} while (!quitNow);</p>
<p>&nbsp;}</p>
<p>&nbsp;private static InitialContext getInitialContext() throws NamingException {<br />
&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
&nbsp;&nbsp;env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
&nbsp;&nbsp;return new InitialContext(env);<br />
&nbsp;}</p>
<p>}</p>
<p><br />
QueueReceive</p>
<p>import java.util.Hashtable;</p>
<p>import javax.jms.JMSException;<br />
import javax.jms.Message;<br />
import javax.jms.MessageListener;<br />
import javax.jms.Queue;<br />
import javax.jms.QueueConnection;<br />
import javax.jms.QueueConnectionFactory;<br />
import javax.jms.QueueReceiver;<br />
import javax.jms.QueueSession;<br />
import javax.jms.Session;<br />
import javax.jms.TextMessage;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p>public class QueueReceive implements MessageListener {<br />
&nbsp;// Defines the JNDI context factory.<br />
&nbsp;public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";</p>
<p>&nbsp;// Defines the JNDI provider url.<br />
&nbsp;public final static String PROVIDER_URL = " t3://localhost:7001";</p>
<p>&nbsp;// Defines the JMS connection factory for the queue.<br />
&nbsp;public final static String JMS_FACTORY = "SendJMSFactory";</p>
<p>&nbsp;// Defines the queue.<br />
&nbsp;public final static String QUEUE = "SendJMSQueue";</p>
<p>&nbsp;private QueueConnectionFactory qconFactory;</p>
<p>&nbsp;private QueueConnection qcon;</p>
<p>&nbsp;private QueueSession qsession;</p>
<p>&nbsp;private QueueReceiver qreceiver;</p>
<p>&nbsp;private Queue queue;</p>
<p>&nbsp;private boolean quit = false;</p>
<p>&nbsp;/**<br />
&nbsp; * Message listener interface.<br />
&nbsp; * <br />
&nbsp; * @param msg<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message<br />
&nbsp; */<br />
&nbsp;public void onMessage(Message msg) {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String msgText;<br />
&nbsp;&nbsp;&nbsp;if (msg instanceof TextMessage) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;msgText = ((TextMessage) msg).getText();<br />
&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;msgText = msg.toString();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;System.out.println("Message Received: " + msgText);</p>
<p>//&nbsp;&nbsp;&nbsp;if (msgText.equalsIgnoreCase("123")) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;synchronized (this) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quit = true;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.notifyAll(); // Notify main thread to quit<br />
//&nbsp;&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (JMSException jmse) {<br />
&nbsp;&nbsp;&nbsp;jmse.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Creates all the necessary objects for receiving messages from a JMS<br />
&nbsp; * queue.<br />
&nbsp; * <br />
&nbsp; * @param ctx<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI initial context<br />
&nbsp; * @param queueName<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name of queue<br />
&nbsp; * @exception NamingException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation cannot be performed<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to initialize due to internal error<br />
&nbsp; */<br />
&nbsp;public void init(Context ctx, String queueName) throws NamingException,<br />
&nbsp;&nbsp;&nbsp;JMSException {<br />
&nbsp;&nbsp;qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
&nbsp;&nbsp;qcon = qconFactory.createQueueConnection();<br />
&nbsp;&nbsp;qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
&nbsp;&nbsp;queue = (Queue) ctx.lookup(queueName);<br />
&nbsp;&nbsp;qreceiver = qsession.createReceiver(queue);<br />
&nbsp;&nbsp;qreceiver.setMessageListener(this);<br />
&nbsp;&nbsp;qcon.start();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Closes JMS objects.<br />
&nbsp; * <br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to close objects due to internal error<br />
&nbsp; */<br />
&nbsp;public void close() throws JMSException {<br />
&nbsp;&nbsp;qreceiver.close();<br />
&nbsp;&nbsp;qsession.close();<br />
&nbsp;&nbsp;qcon.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * main() method.<br />
&nbsp; * <br />
&nbsp; * @param args<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebLogic Server URL<br />
&nbsp; * @exception Exception<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if execution fails<br />
&nbsp; */</p>
<p>&nbsp;public static void main(String[] args) throws Exception {</p>
<p>&nbsp;&nbsp;InitialContext ic = getInitialContext();<br />
&nbsp;&nbsp;QueueReceive qr = new QueueReceive();<br />
&nbsp;&nbsp;qr.init(ic, QUEUE);</p>
<p>&nbsp;&nbsp;System.out<br />
&nbsp;&nbsp;&nbsp;&nbsp;.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");</p>
<p>&nbsp;&nbsp;// Wait until a "quit" message has been received.<br />
&nbsp;&nbsp;synchronized (qr) {<br />
&nbsp;&nbsp;&nbsp;System.out.println("111111111111");<br />
&nbsp;&nbsp;&nbsp;while (!qr.quit) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("2222222222");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qr.wait();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("333333333");<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (InterruptedException ie) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;qr.close();<br />
&nbsp;}</p>
<p>&nbsp;private static InitialContext getInitialContext() throws NamingException {<br />
&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
&nbsp;&nbsp;env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
&nbsp;&nbsp;return new InitialContext(env);<br />
&nbsp;}</p>
<p>}</p>
<p>&nbsp;</p>
<p>TopicSend</p>
<p>import java.io.BufferedReader;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.util.Hashtable;</p>
<p>import javax.jms.JMSException;<br />
import javax.jms.Session;<br />
import javax.jms.TextMessage;<br />
import javax.jms.Topic;<br />
import javax.jms.TopicConnection;<br />
import javax.jms.TopicConnectionFactory;<br />
import javax.jms.TopicSession;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;<br />
import javax.jms.TopicPublisher;<br />
public class TopicSend {<br />
&nbsp;// Defines the JNDI context factory.<br />
&nbsp;public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";</p>
<p>&nbsp;// Defines the JNDI provider url.<br />
&nbsp;public final static String PROVIDER_URL = " t3://localhost:7001";</p>
<p>&nbsp;// Defines the JMS connection factory for the queue.<br />
&nbsp;public final static String JMS_FACTORY = "SendJMSFactory";</p>
<p>&nbsp;// Defines the queue.<br />
&nbsp;public final static String TOPIC = "SendJMSTopic";</p>
<p>&nbsp;private TopicConnectionFactory tconFactory;</p>
<p>&nbsp;private TopicConnection tcon;</p>
<p>&nbsp;private TopicSession tsession;</p>
<p>&nbsp;private TopicPublisher tsender;</p>
<p>&nbsp;private Topic topic;</p>
<p>&nbsp;private TextMessage msg;<br />
&nbsp;public static InitialContext ic ;</p>
<p>&nbsp;/**<br />
&nbsp; * Creates all the necessary objects for sending messages to a JMS queue.<br />
&nbsp; * <br />
&nbsp; * @param ctx<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI initial context<br />
&nbsp; * @param queueName<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name of queue<br />
&nbsp; * @exception NamingException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation cannot be performed<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to initialize due to internal error<br />
&nbsp; */<br />
&nbsp;public void init(Context ctx, String queueName) throws NamingException,<br />
&nbsp;&nbsp;&nbsp;JMSException {<br />
&nbsp;&nbsp;tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
&nbsp;&nbsp;tcon = tconFactory.createTopicConnection();<br />
&nbsp;&nbsp;tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);<br />
&nbsp;&nbsp;System.out.println(topic);<br />
&nbsp;&nbsp;topic = (Topic) ctx.lookup(queueName);<br />
&nbsp;&nbsp;System.out.println(topic);<br />
&nbsp;&nbsp;tsender = tsession.createPublisher(topic);<br />
&nbsp;&nbsp;msg = tsession.createTextMessage();<br />
&nbsp;&nbsp;tcon.start();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Sends a message to a JMS queue.<br />
&nbsp; * <br />
&nbsp; * @param message<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message to be sent<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to send message due to internal error<br />
&nbsp; */<br />
&nbsp;public void send(String message) throws JMSException ,NamingException{<br />
&nbsp;&nbsp;System.out.println(topic+"-----------");<br />
&nbsp;&nbsp;msg.setText(message);<br />
&nbsp;&nbsp;tsender.publish(msg);<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Closes JMS objects.<br />
&nbsp; * <br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to close objects due to internal error<br />
&nbsp; */<br />
&nbsp;public void close() throws JMSException {<br />
&nbsp;&nbsp;tsender.close();<br />
&nbsp;&nbsp;tsession.close();<br />
&nbsp;&nbsp;tcon.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * main() method.<br />
&nbsp; * <br />
&nbsp; * @param args<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebLogic Server URL<br />
&nbsp; * @exception Exception<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation fails<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) throws Exception {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;ic= getInitialContext();<br />
&nbsp;&nbsp;&nbsp;TopicSend ts = new TopicSend();<br />
&nbsp;&nbsp;&nbsp;ts.init(ic, TOPIC);<br />
&nbsp;&nbsp;&nbsp;readAndSend(ts);<br />
&nbsp;&nbsp;&nbsp;ts.close();<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;private static void readAndSend(TopicSend ts) throws IOException,<br />
&nbsp;&nbsp;&nbsp;JMSException,NamingException {<br />
&nbsp;&nbsp;BufferedReader msgStream = new BufferedReader(new InputStreamReader(<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.in));<br />
&nbsp;&nbsp;String line = null;<br />
&nbsp;&nbsp;boolean quitNow = false;<br />
&nbsp;&nbsp;do {<br />
&nbsp;&nbsp;&nbsp;System.out.print("Enter message (\"quit\" to quit): ");<br />
&nbsp;&nbsp;&nbsp;line = msgStream.readLine();<br />
&nbsp;&nbsp;&nbsp;if (line != null &amp;&amp; line.trim().length() != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;ts.send(line);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("JMS Message Sent: " + line + "\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;quitNow = line.equalsIgnoreCase("quit");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} while (!quitNow);</p>
<p>&nbsp;}</p>
<p>&nbsp;private static InitialContext getInitialContext() throws NamingException {<br />
&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
&nbsp;&nbsp;env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
&nbsp;&nbsp;return new InitialContext(env);<br />
&nbsp;}</p>
<p>}</p>
<p>&nbsp;</p>
<p>TopicReceive1</p>
<p>import java.util.Hashtable;</p>
<p>import javax.jms.JMSException;<br />
import javax.jms.Message;<br />
import javax.jms.MessageListener;<br />
import javax.jms.Session;<br />
import javax.jms.TextMessage;<br />
import javax.jms.Topic;<br />
import javax.jms.TopicConnection;<br />
import javax.jms.TopicConnectionFactory;<br />
import javax.jms.TopicSession;<br />
import javax.jms.TopicSubscriber;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p><br />
public class TopicReceive1 implements MessageListener {<br />
&nbsp;// Defines the JNDI context factory.<br />
&nbsp;public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";</p>
<p>&nbsp;// Defines the JNDI provider url.<br />
&nbsp;public final static String PROVIDER_URL = " t3://localhost:7001";</p>
<p>&nbsp;// Defines the JMS connection factory for the queue.<br />
&nbsp;public final static String JMS_FACTORY = "SendJMSFactory";</p>
<p>&nbsp;// Defines the queue.<br />
&nbsp;public final static String TOPIC = "SendJMSTopic";</p>
<p>&nbsp;private TopicConnectionFactory tconFactory;</p>
<p>&nbsp;private TopicConnection tcon;</p>
<p>&nbsp;private TopicSession tsession;</p>
<p>&nbsp;private TopicSubscriber tsubscriber;</p>
<p>&nbsp;private Topic topic;</p>
<p>&nbsp;private boolean quit = false;</p>
<p>&nbsp;/**<br />
&nbsp; * Message listener interface.<br />
&nbsp; * <br />
&nbsp; * @param msg<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message<br />
&nbsp; */<br />
&nbsp;public void onMessage(Message msg) {<br />
&nbsp;&nbsp;System.out.println("===================");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String msgText;<br />
&nbsp;&nbsp;&nbsp;if (msg instanceof TextMessage) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;msgText = ((TextMessage) msg).getText();<br />
&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;msgText = msg.toString();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;System.out.println("Message Received: " + msgText);</p>
<p>//&nbsp;&nbsp;&nbsp;if (msgText.equalsIgnoreCase("123")) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;synchronized (this) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quit = true;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.notifyAll(); // Notify main thread to quit<br />
//&nbsp;&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (JMSException jmse) {<br />
&nbsp;&nbsp;&nbsp;jmse.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Creates all the necessary objects for receiving messages from a JMS<br />
&nbsp; * queue.<br />
&nbsp; * <br />
&nbsp; * @param ctx<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI initial context<br />
&nbsp; * @param queueName<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name of queue<br />
&nbsp; * @exception NamingException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation cannot be performed<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to initialize due to internal error<br />
&nbsp; */<br />
&nbsp;public void init(Context ctx, String queueName) throws NamingException,<br />
&nbsp;&nbsp;&nbsp;JMSException {<br />
&nbsp;&nbsp;tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
&nbsp;&nbsp;tcon = tconFactory.createTopicConnection();<br />
&nbsp;&nbsp;tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);<br />
&nbsp;&nbsp;topic = (Topic) ctx.lookup(queueName);<br />
&nbsp;&nbsp;tsubscriber = tsession.createSubscriber(topic);<br />
&nbsp;&nbsp;//System.out.println("12");<br />
&nbsp;&nbsp;//Message msg = treceiver.receive();<br />
&nbsp;&nbsp;//msg.acknowledge();<br />
&nbsp;&nbsp;//tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();<br />
&nbsp;&nbsp;//System.out.println(msg);<br />
&nbsp;&nbsp;tsubscriber.setMessageListener(this);<br />
&nbsp;&nbsp;tcon.start();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Closes JMS objects.<br />
&nbsp; * <br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to close objects due to internal error<br />
&nbsp; */<br />
&nbsp;public void close() throws JMSException {<br />
&nbsp;&nbsp;tsubscriber.close();<br />
&nbsp;&nbsp;tsession.close();<br />
&nbsp;&nbsp;tcon.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * main() method.<br />
&nbsp; * <br />
&nbsp; * @param args<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebLogic Server URL<br />
&nbsp; * @exception Exception<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if execution fails<br />
&nbsp; */</p>
<p>&nbsp;public static void main(String[] args) throws Exception {</p>
<p>&nbsp;&nbsp;InitialContext ic = getInitialContext();<br />
&nbsp;&nbsp;TopicReceive1 tr1 = new TopicReceive1();<br />
&nbsp;&nbsp;tr1.init(ic, TOPIC);</p>
<p>&nbsp;&nbsp;System.out<br />
&nbsp;&nbsp;&nbsp;&nbsp;.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;// Wait until a "quit" message has been received.<br />
//&nbsp;&nbsp;synchronized (tr1) {<br />
//&nbsp;&nbsp;&nbsp;System.out.println("111111111111");<br />
//&nbsp;&nbsp;&nbsp;while (!tr1.quit) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("2222222222");<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr1.wait();<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("333333333");<br />
//&nbsp;&nbsp;&nbsp;&nbsp;} catch (InterruptedException ie) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;}<br />
&nbsp;&nbsp;tr1.close();<br />
&nbsp;}</p>
<p>&nbsp;private static InitialContext getInitialContext() throws NamingException {<br />
&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
&nbsp;&nbsp;env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
&nbsp;&nbsp;return new InitialContext(env);<br />
&nbsp;}</p>
<p>}</p>
<p><br />
TopicReceive2</p>
<p><br />
import java.util.Hashtable;</p>
<p>import javax.jms.JMSException;<br />
import javax.jms.Session;<br />
import javax.jms.TextMessage;<br />
import javax.jms.Topic;<br />
import javax.jms.TopicConnection;<br />
import javax.jms.TopicConnectionFactory;<br />
import javax.jms.TopicSession;<br />
import javax.jms.TopicSubscriber;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p><br />
public class TopicReceive2 {<br />
&nbsp;// Defines the JNDI context factory.<br />
&nbsp;public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";</p>
<p>&nbsp;// Defines the JNDI provider url.<br />
&nbsp;public final static String PROVIDER_URL = " t3://localhost:7001";</p>
<p>&nbsp;// Defines the JMS connection factory for the queue.<br />
&nbsp;public final static String JMS_FACTORY = "SendJMSFactory";</p>
<p>&nbsp;// Defines the queue.<br />
&nbsp;public final static String TOPIC = "SendJMSTopic";</p>
<p>&nbsp;private TopicConnectionFactory tconFactory;</p>
<p>&nbsp;private TopicConnection tcon;</p>
<p>&nbsp;private TopicSession tsession;</p>
<p>&nbsp;private TopicSubscriber tsubscriber;</p>
<p>&nbsp;private Topic topic;</p>
<p>&nbsp;private boolean quit = false;</p>
<p><br />
&nbsp;/**<br />
&nbsp; * Creates all the necessary objects for receiving messages from a JMS<br />
&nbsp; * queue.<br />
&nbsp; * <br />
&nbsp; * @param ctx<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI initial context<br />
&nbsp; * @param queueName<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name of queue<br />
&nbsp; * @exception NamingException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if operation cannot be performed<br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to initialize due to internal error<br />
&nbsp; */<br />
&nbsp;public void init(Context ctx, String queueName) throws NamingException,<br />
&nbsp;&nbsp;&nbsp;JMSException,InterruptedException {<br />
&nbsp;&nbsp;tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
&nbsp;&nbsp;tcon = tconFactory.createTopicConnection();<br />
&nbsp;&nbsp;tcon.setClientID("IP10.200.7.104");<br />
&nbsp;&nbsp;tcon.start();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);<br />
&nbsp;&nbsp;System.out.println("333333333333");<br />
&nbsp;&nbsp;topic = (Topic) ctx.lookup(queueName);<br />
&nbsp;&nbsp;//tsubscriber = tsession.createSubscriber(topic);<br />
&nbsp;&nbsp;tsubscriber= tsession.createDurableSubscriber(topic,"88888");<br />
&nbsp;&nbsp; for (int i=0; i&lt;3; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextMessage message = (TextMessage) tsubscriber.receive();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("message["+i+"]: " + message.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.sleep(10000);<br />
&nbsp;&nbsp;//System.out.println("12");<br />
&nbsp;&nbsp;//Message msg = treceiver.receive();<br />
&nbsp;&nbsp;//msg.acknowledge();<br />
&nbsp;&nbsp;//tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();<br />
&nbsp;&nbsp;//System.out.println(msg);</p>
<p>&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * Closes JMS objects.<br />
&nbsp; * <br />
&nbsp; * @exception JMSException<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if JMS fails to close objects due to internal error<br />
&nbsp; */<br />
&nbsp;public void close() throws JMSException {<br />
&nbsp;&nbsp;tsubscriber.close();<br />
&nbsp;&nbsp;tsession.close();<br />
&nbsp;&nbsp;tcon.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * main() method.<br />
&nbsp; * <br />
&nbsp; * @param args<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebLogic Server URL<br />
&nbsp; * @exception Exception<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if execution fails<br />
&nbsp; */</p>
<p>&nbsp;public static void main(String[] args) throws Exception {</p>
<p>&nbsp;&nbsp;InitialContext ic = getInitialContext();<br />
&nbsp;&nbsp;TopicReceive2 tr2 = new TopicReceive2();<br />
&nbsp;&nbsp;tr2.init(ic, TOPIC);</p>
<p>&nbsp;&nbsp;System.out<br />
&nbsp;&nbsp;&nbsp;&nbsp;.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;// Wait until a "quit" message has been received.<br />
//&nbsp;&nbsp;synchronized (tr1) {<br />
//&nbsp;&nbsp;&nbsp;System.out.println("111111111111");<br />
//&nbsp;&nbsp;&nbsp;while (!tr1.quit) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("2222222222");<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr1.wait();<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("333333333");<br />
//&nbsp;&nbsp;&nbsp;&nbsp;} catch (InterruptedException ie) {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;&nbsp;}<br />
//&nbsp;&nbsp;}<br />
&nbsp;&nbsp;tr2.close();<br />
&nbsp;}</p>
<p>&nbsp;private static InitialContext getInitialContext() throws NamingException {<br />
&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
&nbsp;&nbsp;env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
&nbsp;&nbsp;return new InitialContext(env);<br />
&nbsp;}</p>
<p>}<br />
</p><img src ="http://www.blogjava.net/loocky/aggbug/136816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-08-15 09:20 <a href="http://www.blogjava.net/loocky/archive/2007/08/15/136816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下软件安装方法总结(转)</title><link>http://www.blogjava.net/loocky/archive/2007/08/10/135711.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Fri, 10 Aug 2007 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/08/10/135711.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/135711.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/08/10/135711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/135711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/135711.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=message6380806><br>一、rpm包安装方式步骤：<br>引用:<br><br>1、找到相应的软件包，比如soft.version.rpm，下载到本机某个目录；<br><br>2、打开一个终端，su -成root用户；<br><br>3、cd soft.version.rpm所在的目录；<br><br>4、输入rpm -ivh soft.version.rpm<br><br><br><br><br>二、deb包安装方式步骤：<br><br>引用:<br>1、找到相应的软件包，比如soft.version.deb，下载到本机某个目录；<br><br>2、打开一个终端，su -成root用户；<br><br>3、cd soft.version.deb所在的目录；<br><br>4、输入dpkg -i soft.version.deb<br><br><br><br><br>三、tar.gz源代码包安装方式：<br><br>引用:<br>1、找到相应的软件包，比如soft.tar.gz，下载到本机某个目录；<br><br>2、打开一个终端，su -成root用户；<br><br>3、cd soft.tar.gz所在的目录；<br><br>4、tar -xzvf soft.tar.gz //一般会生成一个soft目录<br><br>5、cd soft<br><br>6、./configure<br><br>7、make<br><br>8、make install<br><br><br><br><br>四、tar.bz2源代码包安装方式：<br><br>引用:<br>1、找到相应的软件包，比如soft.tar.bz2，下载到本机某个目录；<br><br>2、打开一个终端，su -成root用户；<br><br>3、cd soft.tar.bz2所在的目录；<br><br>4、tar -xjvf soft.tar.bz2 //一般会生成一个soft目录<br><br>5、cd soft<br><br>6、./configure<br><br>7、make<br><br>8、make install<br><br><br><br><br>五、apt方式安装：<br><br>引用:<br>1、打开一个终端，su -成root用户；<br><br>2、apt-cache search soft 注：soft是你要找的软件的名称或相关信息<br><br>3、如果2中找到了软件soft.version，则用apt-get install soft.version命令安装软件 注：只要你可以上网，只需要用apt-cache search查找软件，用apt-get install软件<br><br><br><br><br>六、bin文件安装：<br><br>如果你下载到的软件名是soft.bin，一般情况下是个可执行文件，安装方法如下：<br><br>引用:<br>1、打开一个终端，su -成root用户；<br><br>2、chmod +x soft.bin<br><br>3、./soft.bin //运行这个命令就可以安装软件了<br><br><br><br><br>七、不需要安装的软件：<br><br>有了些软件，比如lumaqq，是不需要安装的，自带jre解压缩后可直接运行。假设下载的是lumaqq.tar.gz，使用方法如下：<br><br>引用:<br>1、打开一个终端，su -成root用户；<br><br>2、tar -xzvf lumaqq.tar.gz //这一步会生成一个叫LumaQQ的目录<br><br>3、cd LumaQQ<br><br>4、chmod +x lumaqq //设置lumaqq这个程序文件为可运行<br><br>5、此时就可以运行lumaqq了，用命令./lumaqq即可，但每次运行要输入全路径或切换到刚才生成的LumaQQ目录里<br><br>6、为了保证不设置路径就可以用，你可以在/bin目录下建立一个lumaqq的链接，用命令ln -s lumaqq /bin/ 即可，以后任何时候打开一个终端输入lumaqq就可以启动QQ聊天软件了<br><br>7、如果你要想lumaqq有个菜单项，使用菜单编辑工具，比如Alacarte Menu Editor，找到上面生成的LumaQQ目录里的lumaqq设置一个菜单项就可以了，当然你也可以直接到 /usr/share/applications目录，按照里面其它*.desktop文件的格式生成一个自己的desktop文件即可。</div>
<br style="CLEAR: both"><img src ="http://www.blogjava.net/loocky/aggbug/135711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-08-10 09:39 <a href="http://www.blogjava.net/loocky/archive/2007/08/10/135711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计划任务工具 cron 的配置和说明 转自linuxsir.org</title><link>http://www.blogjava.net/loocky/archive/2007/07/24/132008.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Tue, 24 Jul 2007 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/07/24/132008.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/132008.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/07/24/132008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/132008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/132008.html</trackback:ping><description><![CDATA[<h2>计划任务工具 cron 的配置和说明</h2>
<!-- begin content -->
<div class=node>
<div class=content>
<p><strong>作者：</strong>北南南北<br><strong>来自：</strong>LinuxSir.Org<br><strong>摘要：</strong>Linux操作系统中，计划任务通常由cron来承担，了解或掌握cron，能为我们管理服务器带来更多的便利，也能省却更多的时间。本文也举了一些简单明了的例子，为了让新手上路方便；</p>
<p><font size=4><strong>目录</strong></font></p>
<ul><a href="http://www.linuxsir.org/main/?q=node/209#1"><font color=#800080><u>1、计划任务概说；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2"><u><font color=#800080>2、cron；</font></u></a>
    <p>&#160;</p>
    <ul><a href="http://www.linuxsir.org/main/?q=node/209#2.1"><u><font color=#800080>2.1 cron 的安装和启动；</font></u></a>
        <p>&#160;</p>
        <ul><a href="http://www.linuxsir.org/main/?q=node/209#2.1.1"><font color=#800080><u>2.1.1 在Redhat 或 Fedora等RPM包管理的系统的安装；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2.1.2"><font color=#800080><u>2.1.2 在Slackware系统中的安装；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2.1.3"><u><font color=#800080>2.1.3 cron 的开启、停止、重新启动方法；</font></u></a> </ul>
            <p><a href="http://www.linuxsir.org/main/?q=node/209#2.2"><font color=#800080><u>2.2 cron 配置文件；</u></font></a></p>
            <ul><a href="http://www.linuxsir.org/main/?q=node/209#2.2.1"><font color=#800080><u>2.2.1 全局性配置文件；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2.2.2"><font color=#800080><u>2.2.2 cron 配置计划任务的书写格式 </u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2.2.3"><font color=#800080><u>2.2.3 关于同一时间，同时执行多个任务的定义方法；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#2.2.4"><u><font color=#800080>2.2.4 对于用户自身的cron 配置文件的说明；</font></u></a> </ul>
            </ul>
            <p><a href="http://www.linuxsir.org/main/?q=node/209#3"><font color=#800080><u>3、计划任务的应用范围；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#4"><font color=#800080><u>4、关于本文；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#5"><font color=#800080><u>5、后记；</u></font></a><br><a href="http://www.linuxsir.org/main/?q=node/209#6"><u><font color=#800080>6、参考文档；</font></u></a><br><a href="http://www.linuxsir.org/main/?q=node/209#7"><u><font color=#800080>7、相关文档；</font></u></a> </p>
        </ul>
        <p><font color=blue><strong><br>++++++++++++++++++++++++++++++++++++++<br>正文<br>++++++++++++++++++++++++++++++++++++++<br></strong></font></p>
        <p><font id=1 size=4><strong><br>1、计划任务概说；<br></strong></font></p>
        <p>计划任务，是任务在约定的时间执行已经计划好的工作，这是表面的意思。在Linux中，我们经常用到 crond 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点，对httpd 服务器重新启动，这就是一个计划任务；</p>
        <p>下面我们先来说说cron；</p>
        <p><font id=2 size=4><strong><br>2、cron；<br></strong></font></p>
        <p>在Linux系统中，计划任务一般是由cron承担，我们可以把cron设置为开机时自动启动。cron启动后，它会读取它的所有配置文件（全局性配置文件/etc/crontab，以及每个用户的计划任务配置文件），然后cron会根据命令和执行时间来按时来调用度工作任务。</p>
        <p><font id=2.1 size=3><strong><br>2.1 cron 的安装和启动；<br></strong></font></p>
        <p>在一般情况下，cron都是系统默认安装的，我们要学会查看软件包是否已经安装；</p>
        <p><font id=2.1.1 size=2><strong><br>2.1.1 在Redhat 或 Fedora等RPM包管理的系统的安装；<br></strong></font></p>
        <p>判断系统是否已经安装cron相关的包 </p>
        <p><font color=blue>Fedora 5.0 系统的情况；</font></p>
        <p>其它版本的Fedora及Redhat的系统和这相似；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# rpm -qa |grep cron<br>vixie-cron-4.1-54.FC5<br>anacron-2.3-36.1<br>crontabs-1.10-7.1</code></div>
        <p>&#160;</p>
        <p>其中vixie-cron软件包是cron的主程序，您可以通过下面的命令来了解它，其它软件包同理；</p>
        <p>
        <div class=codeblock><code>[root@localhost beinan]# rpm -ql vixie-cron</code></div>
        <p>&#160;</p>
        <p>crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。cron 守护进程检查 crontab 文件来查看某个指定命令被调度执行的时间。如果命令已经调度，守护进程就会执行它们。了解crontabs软件包都安装了些什么，应该用下面的命令；</p>
        <p>
        <div class=codeblock><code>[root@localhost beinan]# rpm -ql crontabs</code></div>
        <p>&#160;</p>
        <p>如果没有安装，可以从光盘中找出文件名带有cron字样的软件包来安装。</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# rpm -ivh vixie-cron-4.1-54.FC5*<br>[root@localhost ~]# rpm -ivh crontabs*</code></div>
        <p>&#160;</p>
        <p>也可以用yum 来在线安装；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# yum install vixie-cron<br>[root@localhost ~]# yum install crontabs</code></div>
        <p>&#160;</p>
        <p><font id=2.1.2 size=2><strong><br>2.1.2 在Slackware系统中的安装；<br></strong></font></p>
        <p>在Slackware中cron软件包是 dcron，您可以在光盘中找出来安装它；</p>
        <p>查看是否已经安装了dcron软件包，您可以这样查看。在这里能列出软件包详细的安装情况；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# more /var/adm/packages/dcron*</code></div>
        <p>&#160;</p>
        <p>如果没有安装，请用下面的命令来安装。在第一张安装盘中找出dcron软件包；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# installpkg dcron*.tgz</code></div>
        <p>&#160;</p>
        <p><font id=2.1.3 size=2><strong><br>2.1.3 cron 的开启、停止、重新启动方法；<br></strong></font></p>
        <p>cron配置文件被修改后，想让新文件生效，必须重新crond服务器，有两种方法可供选择；</p>
        <p><strong><br>第一种 在Fedora或Redhat 等以RPM包管理的系统中；<br></strong></p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# /etc/init.d/crond start<br>[root@localhost ~]# /etc/init.d/crond stop<br>[root@localhost ~]# /etc/init.d/crond restart</code></div>
        <p>&#160;</p>
        <p>如果想在Fedora 和 Redhat 或以这些发行版为基础克隆的发行版，如果想自动开机运行，请用下面的办法；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# chkconfig --levels 35 crond on</code></div>
        <p>&#160;</p>
        <p><strong>第二种：通用</strong></p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# pgrep crond 注：判断crond 是否在运行；<br>[root@localhost ~]# pkill crond 注：杀掉正在运行中的crond；<br>[root@localhost ~]# pgrep crond 注：查看是否被杀掉了；<br>[root@localhost ~]# /usr/sbin/crond 注：运行crond；</code></div>
        <p>&#160;</p>
        <p><font id=2.2 size=3><strong><br>2.2 cron 配置文件；<br></strong></font></p>
        <p>cron 是一个服务器程序，我们都知道Linux的服务器的配置，大多是通过配置文件来完成的，cron自然也不例外，在Redhat/Fedora 等系统中它的全局性配置文件是/etc/crontab；在Slackware系统中，全局性文件是/var/spool/cron/crontabs/root 。每个用户也有自己的cron配置文件，我们可以通过crontab -e 来编辑它；</p>
        <p><font id=2.2.1 size=3><strong><br>2.2.1 全局性配置文件；<br></strong></font></p>
        <p>下面是一个全局性的配置文件例子，以Fedora Core 5为例；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# more /etc/crontab<br>SHELL=/bin/bash<br>PATH=/sbin:/bin:/usr/sbin:/usr/bin<br>MAILTO=root<br>HOME=/<br># run-parts<br>1 * * * * root run-parts /etc/cron.hourly<br>#<br>2 4 * * * root run-parts /etc/cron.daily<br>#<br>22 4 * * 7 root run-parts /etc/cron.weekly<br>#<br>42 4 1 * * root run-parts /etc/cron.monthly<br>#<br>0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg</code></div>
        <p>&#160;</p>
        <p>对于全局性配置文件，我们要用root权限来更改，一般是通过crontab -e 来修改。但有时也并不一定是这样的，比如Fedora Core 5 如果通过crontab -e 修改的是root用户的cron 配置文件。所以我们要在Fedora Core 5中修改全局性配置文件可以用vi 编辑器来修改。vi的用法请参考：<a href="http://www.linuxsir.org/main/?q=node/206"><u><font color=#0000ff>《文件编辑器 vi》</font></u></a></p>
        <p>在全局性配置文件中，定义了可执行命令的路径环境变量，所用SHELL类型的定义等，这些大多不用修改；我们经常添加的是计划任务或修改任务执行的时间等；</p>
        <p>在全局性配置文件中，我们发现有类似这些行；<br>
        <div class=codeblock><code>1 * * * * root run-parts /etc/cron.hourly 注：表示每个小时的第一分钟，开始执行/etc/hourly目录下的可执行程序或脚本；<br>2 4 * * * root run-parts /etc/cron.daily 注：表示每天的4点2分，开始执行/etc/cron.daily目录下的可执行程序或脚本；<br>22 4 * * 7 root run-parts /etc/cron.weekly 注：每年第7个周4点我22分，开始执行 /etc/cron.weekly目录下的可执行程序或脚本；<br>42 4 1 * * root run-parts /etc/cron.monthly 注：每月第1天的4点42分，开始执行/etc/cron.monthly目录下的可执行程序或脚本；</code></div>
        <p>&#160;</p>
        <p>这些行是用来在同一时间批量执行任务的，我们在以后的例子中独立出来解说，在这里只是让大家心中有数；</p>
        <p><font id=2.2.2 size=3><strong><br>2.2.2 cron 配置计划任务的书写格式<br></strong></font></p>
        <p>
        <div class=codeblock><code>分钟 小时 日 月 周 ［用户名］ 命令</code></div>
        <p>&#160;</p>
        <p><strong>说明：</strong></p>
        <pre>第一段应该定义的是：分钟，表示每个小时的第几分钟来执行。范围是从0-59
        第二段应该定义的是：小时，表示从第几个小时来执行，范围是从0-23
        第三段应该定义的是：日期，表示从每个月的第几天执行，范围从1-31
        第四段应该定义的是：月，表示每年的第几个月来执行，范围从1-12
        第五段应该定义的是：周，表示每周的第几天执行，范围从0-6，其中 0表示星期日。
        每六段应该定义的是：用户名，也就是执行程序要通过哪个用户来执行，这个一般可以省略；
        第七段应该定义的是：执行的命令和参数。
        </pre>
        <p><strong>注：</strong>其中用户名可是省略，用户名定义的是程序用哪个用户来执行，比如mysql服务器，我们可以定义成以mysql用户来启动、停止、重新启动，这时要写上用户名；不过对于cron来说意义不是太大，因为每个用户都有自己的cron配置文件。有些程序的启动必须用到root用户，这时我们就可以修改root用户的cron配置文件就行了。在每个用户的配置文件中，不必指定用户名。</p>
        <p>我们可以把计划任务写在全局性配置文件中，如果您想把一个计划放入全局性配置文件中，就得改发行版所对应的cron全局配置文件，比如Fedora 5的全局性配置文件是/etc/crontab文件；</p>
        <p>每个用户也能定义自己的cron配置文件，用crontab -e 命令来定义；</p>
        <p><strong>举一例：让机器在每天8点30分重新启动；</strong></p>
        <p><strong>关于时间</strong>格式中有7个字段。我们可以直接更改或者添加，当然这是系统任务调用。举个例子，比如我在每天的早上8点30分重新启动机器，就可以在<br>/etc/crontab中加入下面的两句，第一句就是注释了。以#号开始，后面写一个自己能知道这是什么任务的备注；</p>
        <p>
        <div class=codeblock><code># reboot OS<br>30 8 * * * root /sbin/reboot</code></div>
        <p>&#160;</p>
        <p>第一段应该定义的是：分钟，表示每个小时的第几分钟来执行。范围是从0-59<br>第二段应该定义的是：小时，表示从第几个小时来执行，范围是从0-23<br>第三段应该定义的是：日期，表示从每个月的第几天执行，范围从1-31<br>第四段应该定义的是：月，表示每年的第几个月来执行，范围从1-12<br>第五段应该定义的是：周，表示每周的第几天执行，范围从0-6，其中 0表示星期日。<br>每六段应该定义的是：用户名，也就是执行程序要通过哪个用户来执行，这个一般可以省略；<br>第七段应该定义的是：执行的命令和参数。</p>
        <p>对比上面的例子就知道，30是不是分钟？？8是不是小时？如果有*代表的地方，表示全部，也就是说，每个月，每天，每星期都要执行。root 表示用root用户执行，命令是/sbin/reboot ，也就是说，系统在每天 8点30分重新启动；</p>
        <p>我们可以把每天8点30分重新启动的计划任务写入cron全局性配置文件中，也可以定义在root用户自己的cron配置文件中。如果定义在root自己的配置文件，请用root身份来执行 crontab -e 来修改配置文件；crontab -e 进入修改配置文件的过程，其实和vi的用法一样，请参看vi 的用法：<a href="http://www.linuxsir.org/main/?q=node/206"><u><font color=#0000ff>《文件编辑器 vi》</font></u></a></p>
        <p><strong>让配置文件生效：</strong>如果让配置文件生效，还得重新启动cron，切记，既然每个用户下的cron配置文件修改后。也要重新启动cron服务器。</p>
        <p><strong>在Fedora 和Redhat中，我们应该用；</strong></p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# /etc/init.d/crond restart</code></div>
        <p>&#160;</p>
        <p>如果让crond 在开机时运行，应该改变其运行级别；</p>
        <p>
        <div class=codeblock><code>[root@localhost ~]# chkconfig --levels 35 crond on</code></div>
        <p>&#160;</p>
        <p><strong>在Slackware中，如果开机自动运行；</strong></p>
        <p>查看/etc/rc.d/rc.M文件是否有如的行，如果没有就加上，大多是有的；</p>
        <p>
        <div class=codeblock><code># Start crond (Dillon's crond):<br>if [ -x /usr/sbin/crond ]; then<br>&nbsp;&nbsp;/usr/sbin/crond -l10 &gt;&gt;/var/log/cron 2&gt;&amp;1<br>&lt;/cdoe&gt;<br>&lt;b&gt;<br>如果想让立即让cron重启生效，也可以用下面的办法；<br>&lt;/b&gt;<br>&lt;code&gt;<br>[root@localhost ~]# pgrep crond 注：查看crond服务器是否运行；<br>2022<br>[root@localhost ~]# pkill crond 注：杀死crond；<br>[root@localhost ~]# pgrep crond 注：查看crond是否退出；<br>[root@localhost ~]# /usr/sbin/crond 注：启动crond；<br>[root@localhost ~]# pgrep crond 注：查看crond 是否已经运行得起来了；<br>3883</code></div>
        <p>&#160;</p>
        <p><font id=2.2.3 size=3><strong><br>2.2.3 关于同一时间，同时执行多个任务的定义方法；<br></strong></font></p>
        <p>我们在前面已经说过，在全局性配置文件中，有类似如下的段落；</p>
        <p>
        <div class=codeblock><code>1 * * * * root run-parts /etc/cron.hourly 注：表示每个小时的第一分钟，开始执行/etc/hourly目录下的可执行程序或脚本；<br>2 4 * * * root run-parts /etc/cron.daily 注：表示每天的4点2分，开始执行/etc/cron.daily目录下的可执行程序或脚本；<br>22 4 * * 7 root run-parts /etc/cron.weekly 注：每年第7个周4点我22分，开始执行 /etc/cron.weekly目录下的可执行程序或脚本；<br>42 4 1 * * root run-parts /etc/cron.monthly 注：每月第1天的4点42分，开始执行/etc/cron.monthly目录下的可执行程序或脚本；</code></div>
        <p>&#160;</p>
        <p>举例来说，我想在每天5点10分来重新启动httpd 服务器，与此同时，我们也可以同时下载一个ISO文件。如果我们按书写计划任务的规则一条一条的来书写，并添加到全局是有点麻烦。不如写一个脚本放在/etc/crond.daily目录中。然后把其权限设置为755 （关于权限的设置，请参考：<a href="http://www.linuxsir.org/main/?q=node/196"><u><font color=#0000ff>《Linux 文件和目录的属性》</font></u></a>）。</p>
        <p>当然我们得改一改上面的 带有/etc/cron.daily那行，改为如下；</p>
        <p>
        <div class=codeblock><code>10 5 * * * root run-parts /etc/cron.daily<br>&lt;/cdoe&gt;<br>然后我们到/etc/crond.daily目录中创建两个文件，一个是用来重启httpd服务器的，如下；<br>&lt;code&gt;<br>[root@localhost cron.daily]# touch httpd.sh<br>[root@localhost cron.daily]# chmod 755 httpd.sh<br>[root@localhost cron.daily]# echo "/etc/init.d/httpd restart" &gt; httpd.sh<br>[root@localhost cron.daily]# more httpd.sh<br>/etc/init.d/httpd restart</code></div>
        <p>&#160;</p>
        <p>如果我想在每天5点20分下载FC5的镜像，可以再创建一个文件fc5down.sh</p>
        <p>
        <div class=codeblock><code>[root@localhost cron.daily]# touch fc5down.sh<br>[root@localhost cron.daily]# chmod 755 fc5down.sh<br>[root@localhost cron.daily]# echo "/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso" &gt; fc5down.sh<br>[root@localhost cron.daily]# more fc5down.sh<br>/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso</code></div>
        <p>&#160;</p>
        <p>然后我们重新启动一下crond就行了；</p>
        <p>
        <div class=codeblock><code>[root@localhost cron.daily]# pkill crond<br>[root@localhost cron.daily]# prep crond<br>[root@localhost cron.daily]# crond&amp;</code></div>
        <p>&#160;</p>
        <p><strong>注意：</strong>我只是想说明一下，在同一时间 执行多个计划任务的简单用法，并不是有意教给您每天早上都下载FC5的映像。我举这个例子是为了初学者了解这个功能。如果您有好多的任务在某一时刻执行，那就自己写脚本文件。放在/etc目录下的cron.hourly 、cron.daily 、cron.weekly 、cron.monthly 目录中。凡是放进这些目录的可执行脚本，都能在约定的时间内准确执行。每个目录有每个目录的用途；</p>
        <p><font id=2.2.4 size=3><strong><br>2.2.4 对于用户自身的cron 配置文件的说明；<br></strong></font></p>
        <p>每个用户都有自己的cron配置文件，通过crontab -e 就可以编辑，一般的情况下，在Fedora和Redhat的发行版，我们编辑好用户的cron配置文件保存退出后，系统会自动就存放于/var/spool/cron/目录中，文件以用户名命名。在Slackware中是位于/var/spool/cron/crontabs/目录中。其它的发行版都差不多，有点类似。自己找找吧；查看用户的计划任务是crontab -l </p>
        <p>
        <div class=codeblock><code>crontab -e 注：编辑用户的cron配置文件；<br>crontab -l 注：查看用户的计划任务；</code></div>
        <p>&#160;</p>
        <p>比如我用beinan用户来运行crontab -e ；</p>
        <p>
        <div class=codeblock><code>[beinan@localhost ~]$ id 注：判断所用用户身份；<br>uid=500(beinan) gid=500(beinan) groups=500(beinan)<br>[beinan@localhost ~]$ crontab -e 注：编辑用户beinan的计划任务；</code></div>
        <p>&#160;</p>
        <p>我们在里面定义一个任务；</p>
        <p>
        <div class=codeblock><code>40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso</code></div>
        <p>&#160;</p>
        <p>保存退出后，我们用下面的命令来查看beinan用户的计划任务；</p>
        <p>
        <div class=codeblock><code>[beinan@localhost ~]$ crontab -l<br>40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso</code></div>
        <p>&#160;</p>
        <p>配置好后，我们还要重新启动crond服务器，每个用户cron配置文件的改动都得重新启动crond服务器；前面已经说过了，这里省略；值得注意的是重启crond服务器，需要root权限，您可以用su命令切换到root 用户，然后再来重启crond；</p>
        <p><strong><br>在Fedora或Redhat等以RPM包管理的发行版中；<br></strong></p>
        <p>
        <div class=codeblock><code>[beinan@localhost ~]$ su<br>口令：<br>[root@localhost beinan]# /etc/init.d/crond restart<br>停止 crond： [确定]<br>启动 crond： [确定]</code></div>
        <p>&#160;</p>
        <p><strong><br>也可以先杀死crond，再运行crond命令的办法来启动；<br></strong></p>
        <p>
        <div class=codeblock><code>[root@localhost beinan]# pkill crond<br>[root@localhost beinan]# pgrep crond<br>[root@localhost beinan]# /usr/sbin/crond<br>[root@localhost beinan]# pgrep crond<br>6664</code></div>
        <p>&#160;</p>
        <p><font id=3 size=4><strong><br>3、计划任务的应用范围；<br></strong></font></p>
        <p>计划任务主要是让系统自动完成一些工作。比如我们可以让系统自动在某一时刻清理或备份httpd服务器的日志，然后重新启动httpd服务器，这对网络管理员来说是很重要的。也可以让系统自动清空位于/tmp目录的垃圾文件。</p>
        <p>另外值得一提的是，LinuxSir.Org 有很多子站，每个子站都有RSS，能让这些站点的RSS相互投递，也是用cron来完成，比如是在早上4点左右开始执行这个任务。这是一个极为耗费资源的过程，如果不是放在在线人少的时候，基本无法完成，所以只能放在早上进行。作为SIR的管理员，不可能每天早上4点起来点鼠标来完成这些事吧。所以最好的办法就是通过cron来自动运行，以在服务器最清闲的时候来完成这项工作；</p>
        </div>
        </div><img src ="http://www.blogjava.net/loocky/aggbug/132008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-07-24 11:14 <a href="http://www.blogjava.net/loocky/archive/2007/07/24/132008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>redhat enterprise 4 x的分辨率设置高了的解决办法</title><link>http://www.blogjava.net/loocky/archive/2007/07/24/131966.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Tue, 24 Jul 2007 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/07/24/131966.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/131966.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/07/24/131966.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/131966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/131966.html</trackback:ping><description><![CDATA[分辨率设置高了X起来后花屏，无法通过X界面恢复回去，只能用普通用户进来后，su 到root上来找到XORG.CONF&nbsp;&nbsp;&nbsp;文件<br><br>修改/etc/X11/xorg.conf&nbsp; <br><br>screen里面的设置最大的那个去掉就好了，重启就可以了<img src ="http://www.blogjava.net/loocky/aggbug/131966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-07-24 09:19 <a href="http://www.blogjava.net/loocky/archive/2007/07/24/131966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>redhat 关机注销命令详解</title><link>http://www.blogjava.net/loocky/archive/2007/07/17/130807.html</link><dc:creator>小小程序程序员混口饭吃</dc:creator><author>小小程序程序员混口饭吃</author><pubDate>Tue, 17 Jul 2007 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/loocky/archive/2007/07/17/130807.html</guid><wfw:comment>http://www.blogjava.net/loocky/comments/130807.html</wfw:comment><comments>http://www.blogjava.net/loocky/archive/2007/07/17/130807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loocky/comments/commentRss/130807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loocky/services/trackbacks/130807.html</trackback:ping><description><![CDATA[<p><strong>一、注销，关机，重启</strong></p>
<p>　　注销系统的logout命令</p>
<p>　　1，Logout 注销是登陆的相对操作，登陆系统后，若要离开系统，用户只要直接下达logout命令即可:</p>
<p>　　[root@localhost root]#logout</p>
<p>　　Red Hat Linuxrelease 9(Shike)</p>
<p>　　Kernel 2.4.20.8 on an i686</p>
<p>　　Login: &#8592; 回到登陆的画面</p>
<p>　　2，关机或重新启动的shutdown命令</p>
<p>　　Shutdown命令可以关闭所有程序，依照用户的需要，重新启动或关机。</p>
<p>　　参数说明如下:</p>
<p>　　 立即关机:-h 参数让系统立即关机。范例如下:</p>
<p>　　[root@localhost root]#shutdown &#8211;h now &#8592; 要求系统立即关机</p>
<p>　　 指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令，范例如下:</p>
<p>　　[root@localhost root]#shutdown now &#8592; 立刻关机</p>
<p>　　[root@localhost root]#shutdown +5 &#8592; 5分钟后关机</p>
<p>　　[root@localhost root]#shutdown 10:30 &#8592; 在10:30时关机</p>
<p>　　 关机后自动重启:-r 参数设置关机后重新启动。范例如下:</p>
<p>　　[root@localhost root]#shutdown -r now &#8592; 立刻关闭系统并重启</p>
<p>　　[root@localhost root]#shutdown -r 23:59 &#8592; 指定在23:59时重启动</p>
<p>　　3，重新启动计算机的reboot命令</p>
<p>　　顾名思义，reboot命令是用来重新启动系统的。常用的参数如下:</p>
<p>　　 -f 参数:不依正常的程序运行关机，直接关闭系统并重新启动计算机。</p>
<p>　　 -I 参数:在在重新启动之前关闭所有网络接口。</p>
<p>　　虽然reboot命令有个参数可以使用，但是一般只需要单独运行reboot命令就可以了</p><img src ="http://www.blogjava.net/loocky/aggbug/130807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loocky/" target="_blank">小小程序程序员混口饭吃</a> 2007-07-17 13:27 <a href="http://www.blogjava.net/loocky/archive/2007/07/17/130807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>