<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[眼睛.世界]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[上帝给了我黑色的眼睛，我用它来看世界]]></description>
<link>http://hi.baidu.com/laoflch</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[[转] 一套感动上万人流泪的黄色漫画！]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/8a7c824634d2b1036a63e5f4.html]]></link>
        <description><![CDATA[
		
		<div >
<h1><a href="http://bbs.chinanews.com.cn/forumdisplay.php?fid=176&amp;filter=type&amp;typeid=1">[原创]</a> 一套感动上万人流泪的黄色漫画！</h1>
</div>
<div class="t_msgfontfix">
<table cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <td class="t_msgfont">一套感动上万人流泪的黄色漫画！</td>
        </tr>
    </tbody>
</table>
<div class="postattachlist"><dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566147&amp;k=444ead90d88112950a6095214fc84524&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">1.jpg</a> <em>(44.92 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:656</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="1.jpg" file="./attachments/day_090911/09091111151d1de98b80e3b0c8.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111151d1de98b80e3b0c8.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566148&amp;k=82a9288c22d82d9ba149cff614e3d58b&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">2.jpg</a> <em>(50.1 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:127</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="2.jpg" file="./attachments/day_090911/0909111115c27270373b443fa4.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115c27270373b443fa4.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566149&amp;k=82754b97e7c48c5e7b6c9dc54d52f548&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">3.jpg</a> <em>(42.4 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:94</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="3.jpg" file="./attachments/day_090911/09091111152d9f76521d937d10.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111152d9f76521d937d10.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566150&amp;k=29c14321d2d3df3fb6b3014c016ae034&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">4.jpg</a> <em>(47.71 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:94</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="4.jpg" file="./attachments/day_090911/09091111152846a9468198bea7.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111152846a9468198bea7.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566151&amp;k=666222f8e8db169f584ed1255a91a5d5&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">5.jpg</a> <em>(44.56 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:88</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="5.jpg" file="./attachments/day_090911/0909111115badad9c773e4350f.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115badad9c773e4350f.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566152&amp;k=fbdc84dc658d6f387e7f20518b666820&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">6.jpg</a> <em>(51.21 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:71</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="6.jpg" file="./attachments/day_090911/0909111115b04185c4ba473aa4.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115b04185c4ba473aa4.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566153&amp;k=1d6bac8bff9b132c550bf2babd24a3c0&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">7.jpg</a> <em>(56.12 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:81</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="7.jpg" file="./attachments/day_090911/09091111158bfc76676020497d.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111158bfc76676020497d.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566154&amp;k=ebe50249c25d1379f49cd5fc7c839d84&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">8.jpg</a> <em>(52.42 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:74</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="8.jpg" file="./attachments/day_090911/0909111115edca37f72c2a3e34.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115edca37f72c2a3e34.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566155&amp;k=df026a2bda3312368ef8da3dd4bc0b45&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">9.jpg</a> <em>(42.44 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:88</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="9.jpg" file="./attachments/day_090911/09091111157d09eee30a2fce80.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111157d09eee30a2fce80.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566156&amp;k=34d4c1ac8685e432d9ed38002ac05c8e&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">10.jpg</a> <em>(49.1 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:82</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="10.jpg" file="./attachments/day_090911/0909111115cb228c411d7c9363.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115cb228c411d7c9363.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566157&amp;k=ccfea8c9b63da15a5c03c1f5b34c8f3f&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">11.jpg</a> <em>(45.23 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:92</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="11.jpg" file="./attachments/day_090911/0909111115bd6919c0206c47a5.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115bd6919c0206c47a5.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566158&amp;k=7178e6749af9630012aa745967d996ca&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">12.jpg</a> <em>(56.9 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:73</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="12.jpg" file="./attachments/day_090911/09091111150310963450e53a20.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111150310963450e53a20.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566159&amp;k=1517d392ad45bce2757b66abc92e3c42&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">13.jpg</a> <em>(42.18 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:69</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="13.jpg" file="./attachments/day_090911/09091111152784189c8c20082e.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111152784189c8c20082e.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566160&amp;k=2926deff0d2d6fbb495f762b824149ae&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">14.jpg</a> <em>(46.14 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:83</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="14.jpg" file="./attachments/day_090911/090911111568930c300da6ada9.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/090911111568930c300da6ada9.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566161&amp;k=1788697f207757f32668811970157008&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">15.jpg</a> <em>(39.68 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:72</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="15.jpg" file="./attachments/day_090911/090911111543f01a8549eacdbe.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/090911111543f01a8549eacdbe.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566162&amp;k=4217b076fc4361dab277f6e4444d1b84&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">16.jpg</a> <em>(48.48 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:82</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="16.jpg" file="./attachments/day_090911/0909111115fff7a3b6ac98231f.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115fff7a3b6ac98231f.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566163&amp;k=f332543b8c603f8b9913fa7ef06ec297&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">17.jpg</a> <em>(53.24 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:71</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="17.jpg" file="./attachments/day_090911/0909111115a0b11abfd0d3ca02.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115a0b11abfd0d3ca02.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566164&amp;k=2ba31d5aa5876cade9823957a048b216&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">18.jpg</a> <em>(43.08 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:70</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="18.jpg" file="./attachments/day_090911/0909111115c75ff91323359e47.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115c75ff91323359e47.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566165&amp;k=1f9ea49da7daed78882dc3c0c8d76a5a&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">19.jpg</a> <em>(29.56 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:76</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="19.jpg" file="./attachments/day_090911/0909111115966a501b1a138db9.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115966a501b1a138db9.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566166&amp;k=eb9e105f83b87e5d9c2ef15694c0b21c&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">20.jpg</a> <em>(56.01 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:73</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="20.jpg" file="./attachments/day_090911/090911111522bb298da66f54fb.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/090911111522bb298da66f54fb.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566167&amp;k=386d8f87cf2ffcd405896e8453c6489c&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">21.jpg</a> <em>(56.75 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:72</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="21.jpg" file="./attachments/day_090911/09091111156b6898f590450391.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/09091111156b6898f590450391.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566168&amp;k=3b7246c718ee6e1f7041af14fd39a21f&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">22.jpg</a> <em>(19.69 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:76</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="22.jpg" file="./attachments/day_090911/0909111115f681fdbab587a716.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115f681fdbab587a716.jpg"></p>
</dd></dl>   <dl class="t_attachlist attachimg"><dt> <br>
</dt><dd>
<p class="imgtitle"><a target="_blank" class="bold" href="http://bbs.chinanews.com.cn/attachment.php?aid=566169&amp;k=8fb6bed3437e265af97f0eda51c92114&amp;t=1253109337&amp;fid=176&amp;nothumb=yes&amp;sid=6b57bAtRUhEF2x6I1N0a2hTQ4BqFJEBHStbdeCw%2FtqeiK9I">23.jpg</a> <em>(50.19 KB)</em></p>
<div style="display: none;" class="attach_popup">
<div class="cornerlayger">
<p>下载次数:88</p>
<p><span title="2009-9-11 11:15">5&#160;天前&#160;11:15</span></p>
</div>
</div>
<p> </p>
<p><img width="580" alt="23.jpg" file="./attachments/day_090911/0909111115ceb71987ae6c1742.jpg" src="http://bbs.chinanews.com.cn/attachments/day_090911/0909111115ceb71987ae6c1742.jpg"></p>
</dd></dl></div>
</div> <a href="http://hi.baidu.com/laoflch/blog/item/8a7c824634d2b1036a63e5f4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/%C8%CB%C9%FA%C8%D5%D6%BE">人生日志</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/8a7c824634d2b1036a63e5f4.html#comment">查看评论</a>]]></description>
        <pubDate>2009-09-16  22:01</pubDate>
        <category><![CDATA[人生日志]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/8a7c824634d2b1036a63e5f4.html</guid>
</item>

<item>
        <title><![CDATA[资治通鉴 卷三]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/e86f343e5f9262f2838b130c.html]]></link>
        <description><![CDATA[
		
		或问：&ldquo;仪、秦学乎鬼谷术而习乎纵横言，安中国者各十余年，是夫？&rdquo;
<p><wbr></wbr> <wbr></wbr> <wbr></wbr> 曰：&ldquo;诈人也，圣人恶诸。&rdquo;曰：&ldquo;孔子读而仪、秦行，何如也？&rdquo;曰：&ldquo;甚矣凤鸣而鸷翰也！&rdquo; &ldquo;然则子贡不为欤？&rdquo;曰：&ldquo;乱而不解，子贡耻诸。&rdquo;说而不富贵，仪、秦耻诸。&rdquo;或曰：&ldquo;仪、秦其才矣乎，迹不蹈已？&rdquo;曰：&ldquo;昔在任人，帝而难之。不以才乎？才乎才，非吾徒之才也！&rdquo;</p>
<p><wbr></wbr></p>
<p><wbr></wbr> <wbr></wbr> <wbr></wbr> <em>注解：</em></p>
<p><wbr></wbr> <wbr></wbr> <wbr></wbr><em> 有人问：&ldquo;张仪、苏秦学习鬼谷子的谋略智慧，推行合纵连横之术，各自使中国得到十几年的安定。是这样吗？&rdquo;杨雄回答说：&ldquo;四处骗人，行不义之事，圣人很厌 恶这样的人。&rdquo; &ldquo;有人问：读孔子的书而做张仪、苏秦那样的事，怎么样呢？杨雄回答说：&ldquo;这就好比有凤凰般的嗓音却长着凶鸟的羽毛，糟糕透了！&rdquo;有人问：&ldquo;然而孔子的弟子 子贡不正是这样干的吗？&rdquo;回答说：&ldquo;子贡为的是排难解纷，张仪、苏秦为的是谋取富贵，游说的目的不同。&rdquo;有人问：&ldquo;张仪、苏秦能不蹈前人旧辙，也算是卓越 的人才吧！&rdquo;回答说：&ldquo;上古时舜帝对奸佞之人加以拒斥，能说不考虑才干吗？那种人才倒是有才，但不是我们所认为的才干！&rdquo;</em></p>
<p> </p>
<p> </p>
<p>赵王封其弟为平原君。平原君好士，食客尝数千人。有公孙龙者，善为坚白同异之辩，平原君客之。孔穿自鲁适赵，与公孙龙论臧三耳，龙甚辩析。子高弗应，俄而 辞出，明日复见平原君。平原君曰：&ldquo;畴昔公孙之言信辩也，先生以为何如？&rdquo;对曰：&ldquo;然。几能令臧三耳矣。虽然，实难！仆愿得又问于君：今谓三耳甚难而实非 也，谓两耳甚易而实是也，不知君将从易而是者乎，其亦从难而非者乎？&rdquo;平原君无以应。明日，谓公孙龙曰：&ldquo;公无复与孔子高辩事也！其人理胜于辞；公辞胜于 理，终必受诎。&rdquo; <br>
<br>
邹衍过赵，平原君使与公孙龙论白马非马之说。邹子曰：&ldquo;不可。夫辩者，别殊类使不相害，序异端使不相乱。抒意通指，明其所谓，使人与知焉，不务相迷也。故 胜者不失其所守，不胜者得其所求。若是，故辩可为也。及至 烦文以相假，饰辞以相，巧譬以相移，引人使不得及其意，如此害大道。夫崐缴纫争言而竞后息，不能无害君子，衍不为也。&rdquo;座皆称善。公孙龙由是遂诎。 </p>
<p> </p>
<p><em>注解：<br>
<br>
赵王封弟弟赵胜为平原君。平原君好养士，门下的食客常有几千人。其中有个公孙龙，善于作&ldquo;坚白同异&rdquo;的辩论考证，平原君尊他为座上宾。孔穿从鲁国来到赵 国，与公孙龙辩论&ldquo;奴婢有三个耳朵&rdquo;的观点，公孙龙辩解十分精微，孔穿无以对答，一会儿就告辞了。第二天他再见平原君，平原君问：&ldquo;昨天公孙龙的一番论述 头头是道，先生觉得如何？&rdquo;回答说：&ldquo;是的，他几乎能让奴婢真的长出三只耳朵来。说起来虽然如此，实际上是困难的。我想再请教您：现在论证三个耳朵十分困 难，又非事实；论证两个耳朵十分容易而确属事实，不知道您将选择容易、真实的，还是选择困难、虚假的？&rdquo;平原君也哑口无言。第二天，平原君对公孙龙说：&ldquo; 您不要再和孔穿辩论了，他的道理胜过言辞，而您的言辞胜过道理，最后肯定占不了上风。&rdquo; <br>
<br>
邹衍路过赵国，平原君让他和公孙龙辩论&ldquo;白马非马&rdquo;的观点。邹衍说：&ldquo;不行。所谓辩论，应该区别不同类型，不相侵害；排列不同概念，不相混淆；抒发自己的 意旨和一般概念，表明自己的观点，让别人理解，而不是困惑迷惘。如此，辩论的胜者能坚持自己的立场，不胜者也能得到他所追求的真理，这样的辩论是可以进行 的。如果用繁文缛节来作为凭据，用巧言饰辞来互相诋毁，用华丽词藻来从偷换概念，吸引别人使之不得要领，就会妨害治学的根本道理。那种纠缠不休，咄咄逼 人，总要别人认输才肯住口的作法，有害君子风度，我邹衍是绝不参加的。&rdquo;在座的人听罢都齐声叫好。从此，公孙龙便受到了冷落。</em></p> <a href="http://hi.baidu.com/laoflch/blog/item/e86f343e5f9262f2838b130c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/%C9%FA%BB%EE%B8%D0%CE%F2">生活感悟</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/e86f343e5f9262f2838b130c.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-03  12:37</pubDate>
        <category><![CDATA[生活感悟]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/e86f343e5f9262f2838b130c.html</guid>
</item>

<item>
        <title><![CDATA[SQL语句性能调整原则]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/20be3bde767d9f50cdbf1aa4.html]]></link>
        <description><![CDATA[
		
		一、问题的提出<br>
在应用系统开发初期，由于开发数据库数据比较少，对于查询SQL语句，复杂视图的的编<br>
写等体会不出SQL语句各种写法的性能优劣，但是如果将应用系统提交实际应用后，随着<br>
数据库中数据的增加，系统的响应速度就成为目前系统需要解决的最主要的问题之一。<br>
系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据，劣质SQL语句和优质<br>
SQL语句之间的速度差别可以达到上百倍，可见对于一个系统不是简单地能实现其功能就<br>
可，而是要写出高质量的SQL语句，提高系统的可用性。<br>
在多数情况下，Oracle使用索引来更快地遍历表，优化器主要根据定义的索引来提高性<br>
能。但是，如果在SQL语句的where子句中写的SQL代码不合理，就会造成优化器删去索引<br>
而使用全表扫描，一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应<br>
清楚优化器根据何种原则来删除索引，这有助于写出高性能的SQL语句。<br>
二、SQL语句编写注意问题<br>
下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中<br>
，即使某些列存在索引，但是由于编写了劣质的SQL，系统在运行该SQL语句时也不能使<br>
用该索引，而同样使用全表扫描，这就造成了响应速度的极大降低。<br>
1. IS NULL 与 IS NOT NULL<br>
不能用null作索引，任何包含null值的列都将不会被包含在索引中。即使索引有多列这<br>
样的情况下，只要这些列中有一列含有null，该列就会从索引中排除。也就是说如果某<br>
列存在空值，即使对该列建索引也不会提高性能。<br>
任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。<br>
2. 联接列<br>
对于有联接的列，即使最后的联接值为一个静态值，优化器是不会使用索引的。我们一<br>
起来看一个例子，假定有一个职工表（employee），对于一个职工的姓和名分成两列存<br>
放（FIRST_NAME和LAST_NAME），现在要查询一个叫比尔.克林顿（Bill Cliton）的职工<br>
。<br>
下面是一个采用联接查询的SQL语句，<br>
select * from employss<br>
where<br>
first_name||''||last_name ='Beill Cliton';<br>
上面这条语句完全可以查询出是否有Bill Cliton这个员工，但是这里需要注意，系统优<br>
化器对基于last_name创建的索引没有使用。<br>
当采用下面这种SQL语句的编写，Oracle系统就可以采用基于last_name创建的索引。<br>
Select * from employee<br>
where<br>
first_name ='Beill' and last_name ='Cliton';<br>
遇到下面这种情况又如何处理呢？如果一个变量（name）中存放着Bill Cliton这个员工<br>
的姓名，对于这种情况我们又如何避免全程遍历，使用索引呢？可以使用一个函数，将<br>
变量name中的姓和名分开就可以了，但是有一点需要注意，这个函数是不能作用在索引<br>
列上。下面是SQL查询脚本：<br>
select * from employee<br>
where<br>
first_name = SUBSTR('&amp;&amp;name',1,INSTR('&amp;&amp;name',' ')-1)<br>
and<br>
last_name = SUBSTR('&amp;&amp;name',INSTR('&amp;&amp;name&rsquo;,' ')+1)<br>
3. 带通配符（%）的like语句<br>
同样以上面的例子来看这种情况。目前的需求是这样的，要求在职工表中查询名字中包<br>
含cliton的人。可以采用如下的查询SQL语句：<br>
select * from employee where last_name like '%cliton%';<br>
这里由于通配符（%）在搜寻词首出现，所以Oracle系统不使用last_name的索引。在很<br>
多情况下可能无法避免这种情况，但是一定要心中有底，通配符如此使用会降低查询速<br>
度。然而当通配符出现在字符串其他位置时，优化器就能利用索引。在下面的查询中索<br>
引得到了使用：<br>
select * from employee where last_name like 'c%';<br>
4. Order by语句<br>
ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没<br>
有什么特别的限制，也可以将函数加入列中（象联接或者附加等）。任何在Order by语<br>
句的非索引项或者有计算表达式都将降低查询速度。<br>
仔细检查order by语句以找出非索引项或者表达式，它们会降低性能。解决这个问题的<br>
办法就是重写order by语句以使用索引，也可以为所使用的列建立另外一个索引，同时<br>
应绝对避免在order by子句中使用表达式。<br>
5. NOT<br>
我们在查询时经常在where子句使用一些逻辑表达式，如大于、小于、等于以及不等于等<br>
等，也可以使用and（与）、or（或）以及not（非）。NOT可用来对任何逻辑运算符号取<br>
反。下面是一个NOT子句的例子：<br>
... where not (status ='VALID')<br>
如果要使用NOT，则应在取反的短语前面加上括号，并在短语前面加上NOT运算符。NOT运<br>
算符包含在另外一个逻辑运算符中，这就是不等于（&lt;&gt;）运算符。换句话说，即使不在<br>
查询where子句中显式地加入NOT词，NOT仍在运算符中，见下例：<br>
... where status &lt;&gt;'INVALID';<br>
再看下面这个例子：<br>
select * from employee where salary&lt;&gt;3000;<br>
对这个查询，可以改写为不使用NOT：<br>
select * from employee where salary&lt;3000 or salary&gt;3000;<br>
虽然这两种查询的结果一样，但是第二种查询方案会比第一种查询方案更快些。第二种<br>
查询允许Oracle对salary列使用索引，而第一种查询则不能使用索引。<br>
6. IN和EXISTS<br>
有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在w<br>
here子句中可以使用两种格式的子查询。<br>
第一种格式是使用IN操作符：<br>
... where column in(select * from ... where ...);<br>
第二种格式是使用EXIST操作符：<br>
... where exists (select 'X' from ...where ...);<br>
我相信绝大多数人会使用第一种格式，因为它比较容易编写，而实际上第二种格式要远<br>
比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXIS<br>
TS的子查询。<br>
第二种格式中，子查询以&lsquo;select 'X'开始。运用EXISTS子句不管子查询从表中抽取什<br>
么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作（<br>
这里假定在where语句中使用的列存在索引）。相对于IN子句来说，EXISTS使用相连子查<br>
询，构造起来要比IN子查询困难一些。<br>
通过使用EXIST，Oracle系统会首先检查主查询，然后运行子查询直到它找到第一个匹配<br>
项，这就节省了时间。Oracle系统在执行IN子查询时，首先执行子查询，并将获得的结<br>
果列表存放在在一个加了索引的临时表中。在执行子查询之前，系统先将主查询挂起，<br>
待子查询执行完毕，存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN<br>
通常查询速度快的原因。<br>
同时应尽可能使用NOT EXISTS来代替NOT IN，尽管二者都使用了NOT（不能使用索引而降<br>
低速度），NOT EXISTS要比NOT IN查询效率更高<br>
<br>
(第六点好像不多，有待进一步证实) <a href="http://hi.baidu.com/laoflch/blog/item/20be3bde767d9f50cdbf1aa4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/20be3bde767d9f50cdbf1aa4.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-02  09:12</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/20be3bde767d9f50cdbf1aa4.html</guid>
</item>

<item>
        <title><![CDATA[oracle的分析函数over 及开窗函数]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/c86c3efd4d9d9e1e08244ddf.html]]></link>
        <description><![CDATA[
		
		<div style="margin: 15px;" >
<div><font size="2">一：分析函数<strong style="color: black; background-color: rgb(160, 255, 255);">over</strong><br>
<strong style="color: black; background-color: rgb(255, 255, 102);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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 style="font-size: 12px;" class="javascript">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> </p>
<p><font face="verdana, arial, helvetica" size="2"><span style="font-size: 12px;" class="javascript">求个人工资占部门工资的百分比 </span></font></p>
<font face="verdana, arial, helvetica" size="2">                                    </font>
<p><font face="verdana, arial, helvetica" size="2"><font face="verdana, arial, helvetica" size="2"><span style="font-size: 12px;" class="javascript">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></font></p>
<font face="verdana, arial, helvetica" size="2">                                    </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: rgb(160, 255, 255);">over</strong>（order by salary） 按照salary排序进行累计，order by是个默认的开窗函数<br>
&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255);">over</strong>（partition by deptno）按照部门分区<br>
2：<br>
&nbsp;&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">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: rgb(160, 255, 255);">over</strong>(partition by null)</font></div>
</div>
</div> <a href="http://hi.baidu.com/laoflch/blog/item/c86c3efd4d9d9e1e08244ddf.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/c86c3efd4d9d9e1e08244ddf.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-02  09:01</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/c86c3efd4d9d9e1e08244ddf.html</guid>
</item>

<item>
        <title><![CDATA[OLAP函数语法的总结]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/267df3cb8cbfbc17bf09e6de.html]]></link>
        <description><![CDATA[
		
		ORACLE OLAP 函数<br>
最近这个东东用得特别多，总结了一下 。 <br>
语法: FUNCTION_NAME(,,...) <br>
OVER<br>
()<br>
OLAP函数语法四个部分:<br>
1、function本身 用于对窗口中的数据进行操作；<br>
2、partitioning clause 用于将<zmkey class="zoomino-searchword" style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; margin-right: 3px; cursor: pointer; float: none;">结果集<img class="zoominoBgImage" style="border: medium none ; margin: 0pt; background: transparent none repeat scroll 0% 0%; float: none; height: 14px; width: 12px; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="file:///E:/doc/sql/OLAP%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93_files/z-keyword.gif"></zmkey><zmkey class="zoomino-searchword" style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; margin-right: 3px; cursor: pointer; float: none;">分区<img class="zoominoBgImage" style="border: medium none ; margin: 0pt; background: transparent none repeat scroll 0% 0%; float: none; height: 14px; width: 12px; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="file:///E:/doc/sql/OLAP%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93_files/z-keyword.gif"></zmkey>；<br>
3、order by clause 用于对分区中的数据进行排序；<br>
4、windowing clause 用于定义function在其上操作的行的集合，即function所影响的范围。<br>
一、order by对窗口的影响<br>
不含order by的：<br>
SQL&gt; select deptno,sal,sum(sal) over()<br>
2  from emp;<br>
不含order by时，默认的窗口是从结果集的第<zmkey class="zoomino-searchword" style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; margin-right: 3px; cursor: pointer; float: none;">一行<img class="zoominoBgImage" style="border: medium none ; margin: 0pt; background: transparent none repeat scroll 0% 0%; float: none; height: 14px; width: 12px; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="file:///E:/doc/sql/OLAP%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93_files/z-keyword.gif"></zmkey>直到末尾。<br>
含order by的：<br>
SQL&gt; select deptno,sal,<br>
2         sum(sal) over(order by deptno) as sumsal <br>
3  from emp;<br>
当含有order by时，默认的窗口是从第一行直到当前分组的最后一行。<br>
二、用于排列的函数<br>
SQL&gt; select empno, deptno, sal,<br>
2         rank() over <br>
3         (partition by deptno order by sal desc nulls last) as rank,<br>
4         dense_rank() over <br>
5         (partition by deptno order by sal desc nulls last) as dense_rank,<br>
6         row_number() over <br>
7         (partition by deptno order by sal desc nulls last) as row_number<br>
8   from  emp;<br>
三、用于合计的函数<br>
SQL&gt; select deptno,sal,<br>
2         sum(sal) over (partition by deptno) as sumsal,<br>
3         avg(sal) over (partition by deptno) as avgsal,<br>
4         count(*) over (partition by deptno) as count,<br>
5         max(sal) over (partition by deptno) as maxsal<br>
6    from emp;<br>
四、开窗语句<br>
1、rows窗口: &quot;rows 5 preceding&quot;<br>
适用于任何类型而且可以order by多列。 <br>
SQL&gt; select deptno,ename,sal,<br>
2         sum(sal) over (order by deptno rows 2 preceding) sumsal<br>
3    from emp;<br>
rows 2 preceding:将当前行和它前面的两行划为一个窗口，因此sum函数就作  用在这三行上面<br>
SQL&gt; select deptno,ename,sal,<br>
2         sum(sal) over <br>
3         (partition by deptno order by ename rows 2 preceding) sumsal<br>
4    from emp<br>
5  order by deptno,ename;<br>
加了partiton by分区后之后，rows 2 preceding(窗口)只在当前分区内生效，不会影响分区之外的行。<br>
SQL&gt; select ename,sal,hiredate,<br>
2         first_value(ename)over <br>
3         (order by hiredate asc rows 5 preceding) first_ename,<br>
4         first_value(hiredate) over<br>
5         (order by hiredate asc rows 5 preceding) first_hiredate<br>
6    from emp<br>
7  order by hiredate asc;<br>
order by hiredate asc rows 5 preceding: order by之后，取当前行的前5行+当前行作为窗口(共6行)。<br>
2、&quot;range unbounded preceding&quot;<br>
range unbounded preceding会把当前行之前的所有行都包含进来，但当partition by时:<br>
SQL&gt; select deptno,ename,sal,<br>
2         sum(sal) over <br>
3         (partition by deptno order by deptno range unbounded preceding) sumsal<br>
4    from emp;<br>
SQL&gt; select deptno,ename,sal,<br>
2         sum(sal) over <br>
3         (order by deptno range unbounded preceding) sumsal<br>
4   from  emp;<br>
这SQL句子和下面这SQL是等价的:<br>
select deptno,ename,sal,<br>
sum(sal) over (order by deptno) sumsal<br>
from  emp;<br>
因为order by的默认窗口总是从结果集的第一<zmkey class="zoomino-searchword" style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; margin-right: 3px; cursor: pointer; float: none;">行开<img class="zoominoBgImage" style="border: medium none ; margin: 0pt; background: transparent none repeat scroll 0% 0%; float: none; height: 14px; width: 12px; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="file:///E:/doc/sql/OLAP%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93_files/z-keyword.gif"></zmkey>始到它分组的最后一行。<br>
而partiton by的默认窗口总是从分区的第一行开始。<br>
3、range窗口: &quot;range 100 preceding&quot;<br>
这个子句只适用于number和date，而且只能order by一列。<br>
如果over()里asc排列，意思是[number-100,number]这样一个<zmkey class="zoomino-searchword" style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; margin-right: 3px; cursor: pointer; float: none;">闭区间<img class="zoominoBgImage" style="border: medium none ; margin: 0pt; background: transparent none repeat scroll 0% 0%; float: none; height: 14px; width: 12px; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="file:///E:/doc/sql/OLAP%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93_files/z-keyword.gif"></zmkey>是它的窗口。<br>
如果over()里desc排列，意思是[number,number+100]这样一个闭区间是它的窗口。<br>
4、窗口总结<br>
1、unbounded preceding:从当前分区的第一行开始，到当前行结束。<br>
2、current row:从当前行开始，也结束于当前行。<br>
3、[numeric expression] preceding:对于rows来说从当前行之前的第[numeric expression]行开始，到当前行结束。对range来说从小于数值<br>
表达式的值开始，到当前行结束。<br>
4、[numeric expression] following:与[numeric expression] preceding相反。 <a href="http://hi.baidu.com/laoflch/blog/item/267df3cb8cbfbc17bf09e6de.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/267df3cb8cbfbc17bf09e6de.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-02  08:56</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/267df3cb8cbfbc17bf09e6de.html</guid>
</item>

<item>
        <title><![CDATA[云计算]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/fd43b9ad021d4d014a36d6d7.html]]></link>
        <description><![CDATA[
		
		<p>Markus Klems<br>
<a target="_blank" href="http://www.cncloudcomputing.com/">云计算</a>是一个囊括了开发，负载平衡，商业模式，以及架构的时髦词，是软件业的未来模式（Software10.0），或者简单地讲，云计算就是以Internet为中心的软件。</p>
<p>Reuven Cohen</p>
<table cellspacing="0" cellpadding="0" border="1" align="right" class="mod_img">
    <tbody>
        <tr>
            <td><a target="_blank" href="http://tupian.hudong.com/a1_36_33_01300000171098122518333400532_jpg.html" title="点击查看原图"><img hspace="0" border="0" src="http://a1.att.hudong.com/36/33/01300000171098122518333400532_s.jpg" alt="云计算Facebook页面" title="Facebook页面"><img src="http://www.hudong.com/images/enlarge.gif" style="position: absolute; top: 3487px; left: 668px;"></a></td>
        </tr>
        <tr>
            <td align="middle"><font style="font-size: 12px;"><strong>Facebook页面</strong></font></td>
        </tr>
    </tbody>
</table>
<br>
云计算是一种基于Web的服务，目的是让用户只为自己需要的功能付钱，同时消除传统软件在硬件，软件，专业技能方面的投资。云计算让用户脱离技术与部署上的复杂性而获得应用。
<p>Douglas Gourlay<br>
云计算指的是一个大的宏图，基本上说，就是让用户透过<a href="http://www.hudong.com/wiki/Internet" title="Internet" class="innerlink" target="_blank" >Internet</a>访问技术服务，现在，每次登陆<a href="http://www.hudong.com/wiki/Facebook" title="Facebook" class="innerlink" target="_blank" >Facebook</a>或搜索航班，事实上都是在使用云计算。</p>
<p>Praising Gaw<br>
云计算就是新的<a href="http://www.hudong.com/wiki/Web2.0" title="Web2.0" class="innerlink" target="_blank" >Web2.0</a>，一种既有技术上的市场绽放。就象以前人们在自己的网站上放一点ajax就宣称自己是Web2.0一样，云计算是一个新的流行词。</p>
<p>积极的一面是，Web2.0最终抓住了主流眼球，同样，云计算概念最终也会改变人们的思想，最终爆发出各种各样的概念，托管服务，<a href="http://www.hudong.com/wiki/ASP" title="ASP" class="innerlink" target="_blank" >ASP</a>，网格计算，软件作为服务，平台作为服务，任何东西作为服务。</p>
<p>Briande Haaff</p>
<table cellspacing="0" cellpadding="0" border="1" align="right" class="mod_img">
    <tbody>
        <tr>
            <td><a target="_blank" href="http://tupian.hudong.com/a4_76_35_01300000171098122518351130962_jpg.html" title="点击查看原图"><img hspace="0" border="0" src="http://a4.att.hudong.com/76/35/01300000171098122518351130962_s.jpg" alt="微软高管谈云计算" title="微软高管谈云计算"><img src="http://www.hudong.com/images/enlarge.gif" style="position: absolute; top: 3927px; left: 668px;"></a></td>
        </tr>
        <tr>
            <td align="middle"><font style="font-size: 12px;"><strong>微软高管谈云计算</strong></font></td>
        </tr>
    </tbody>
</table>
<br>
从<a href="http://www.hudong.com/wiki/%E6%B6%88%E8%B4%B9%E8%80%85" title="消费者" class="innerlink" target="_blank" >消费者</a>的角度看，SaaS是云计算的一种，然而行业内的人必须明白这到底是什么意思。简单说，云计算就是SaaS的升华。
<p>Ben Kepes<br>
云模式的初衷是让硬件层的消费象按需计算，按所需存储空间那样进行，而为了让云模式带来更多力量，我们需要在整个应用架构中，在一个虚拟的环境中实现配制，部署，服务。</p>
<p>Omar Sultan<br>
<a target="_blank" href="http://www.cncloudcomputing.com/">云计算</a>就是为一些需要动态改变的需要访问资源与服务。应用和服务请求的资源来自&ldquo;云&rdquo;，而不是固定的有形的实体。云就是一些可以自我维护和管理的虚拟资源。</p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"> </p>
<font face="宋体" class="Apple-style-span">
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0">云计算(Cloud Computing)是一种新兴的商业计算模型。它将计算任务分布在大量计算机构成的资源池上，使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务。<br>
云计算的定义有着狭义和广义之分。狭义的云计算，指的是厂商通过分布式计算和虚拟化技术搭建数据中心或超级计算机，以免费或按需租用方式向技术开发者或 者企业客户提供数据存储、分析以及科学计算等服务，比如亚马逊数据仓库出租生意、微软的SSDS等。广义的云计算，则指厂商通过建立网络服务器集群，向各 种不同类型客户提供在线软件服务、硬件租借、数据存储、计算分析等不同类型的服务。显然，广义的云计算包括了更多的厂商和服务类型，例如以八百客、沃利森 为主开发的在线CRM软件，国内用友、金蝶等老牌管理软件厂商也推出的在线财务软件，谷歌发布的Google应用程序套装等，都可纳入这一范畴。</p>
</font>
<div class="content_h2">
<h2>云计算-发展条件</h2>
<span>             <a name="9"> </a>             <a target="_self" href="http://www.hudong.com/editsectionauth/%E4%BA%91%E8%AE%A1%E7%AE%97/9">               <img src="http://www.hudong.com/images/bjbd.gif">             </a>             <a href="http://www.hudong.com/wiki/%E4%BA%91%E8%AE%A1%E7%AE%97#catalog">               <img src="http://www.hudong.com/images/hml.gif">             </a>           </span></div>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"> </p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"> </p>
<table cellspacing="0" cellpadding="0" border="1" align="right" class="mod_img">
    <tbody>
        <tr>
            <td><a target="_blank" href="http://tupian.hudong.com/a3_82_35_01300000171098122518357629141_jpg.html" title="点击查看原图"><img hspace="0" border="0" src="http://a3.att.hudong.com/82/35/01300000171098122518357629141_s.jpg" alt="云计算美国核电站核反应堆示意图" title="美国核电站核反应堆示意图"><img src="http://www.hudong.com/images/enlarge.gif" style="position: absolute; top: 4555px; left: 668px;"></a></td>
        </tr>
        <tr>
            <td align="middle"><font style="font-size: 12px;"><strong>美国核电站核反应堆示意图</strong></font></td>
        </tr>
    </tbody>
</table>
<span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; ">有以下五个主要原因使得分布式计算</span><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; ">（云计算）</span><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; ">必然会越来越普遍，逐渐发展成主流的计算模式而取代集中式的大型计算机： </span>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"> </p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; ">1、现在分布式系统的第一个原因就是因为他具有比集中式系统更好的性能价格比。你不要花几十万美元就能获得高效能计算。 </span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"><br>
2、多数应用本身就是分布式的。如<a href="http://www.hudong.com/wiki/%E5%B7%A5%E4%B8%9A" title="工业" class="innerlink" target="_blank" >工业</a>企业应用，管理部门和现场不在同一个地方。 </p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; "><br>
3、高可靠性。冗余不仅是生物进化的必要条件，而且也是<a href="http://www.hudong.com/wiki/%E4%BF%A1%E6%81%AF%E6%8A%80%E6%9C%AF" title="信息技术" class="innerlink" target="_blank" >信息技术</a>。现代<a href="http://www.hudong.com/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F" title="分布式系统" class="innerlink" target="_blank" >分布式系统</a>具有高度容错机制，控制<a href="http://www.hudong.com/wiki/%E6%A0%B8%E5%8F%8D%E5%BA%94%E5%A0%86" title="核反应堆" class="innerlink" target="_blank" >核反应堆</a>主要采用分布式来实现高可靠性。 </span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; "><br>
4、可扩展性。买一台性能更高的大型机，或者再买一台性能相同的大型机的费用都比添加几台<a href="http://www.hudong.com/wiki/PC" title="PC" class="innerlink" target="_blank" >PC</a>的费用高得多。 </span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt; line-height: 18pt; text-align: left;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; color: rgb(0, 0, 0); font-style: normal; "><br>
5、高度灵活性。能够兼容不同硬件厂商的产品，兼容低配置机器和外设而获得高性能计算。 <br>
</span></p> <a href="http://hi.baidu.com/laoflch/blog/item/fd43b9ad021d4d014a36d6d7.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/fd43b9ad021d4d014a36d6d7.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-25  09:05</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/fd43b9ad021d4d014a36d6d7.html</guid>
</item>

<item>
        <title><![CDATA[转载：JavaSwing也惊艳之一：水晶之恋（二）]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/a44c3afb9a7f82254e4aea4e.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal"><strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">四、融入<span>Swing</span>组件</span></span></span></span></strong></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">以上例子仅使用了<span>Java2D</span>进行绘图。在实际使用中，需要将这些效果应用的<span>Swing</span>组件中，例如按钮等。一个简单的方式是：将以上图形效果在内存中生成内存图片并封装到一个<span>ImageIcon</span>中，然后将<span>ImageIcon</span>图标作为<span>JButton</span>的图标进行显示。<br>
</span></span></span></span></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Image createImageIcon(Image phantom, </span><span style="color: rgb(0, 0, 255);">int</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> size) {<br>
BufferedImage bi </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);<br>
&nbsp;&nbsp;  Graphics2D g2d </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> bi.createGraphics();<br>
&nbsp;&nbsp;  g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);<br>
<br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> center </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> size </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">;<br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> radius </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> center;<br>
<br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">此处进行画图</span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);"><br>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;  g2d.dispose();<br>
&nbsp;&nbsp;</span></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">return</span></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"> bi;<br>
}<br>
</span></span></span></span></div>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">  </span></span></span>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">然后，用这些<span>Icon</span>创建一些按钮并显示：</span></span></span></span></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) </span><span style="color: rgb(0, 0, 255);">throws</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Exception {<br>
JFrame frame </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> JFrame();<br>
&nbsp;&nbsp;  frame.getContentPane().setLayout(</span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> FlowLayout());<br>
&nbsp;&nbsp;  frame.getContentPane().add(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JButton(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">按钮1</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ImageIcon(createImageIcon(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">60</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">))));<br>
&nbsp;&nbsp;  frame.getContentPane().add(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JButton(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">按钮2</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ImageIcon(createImageIcon(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">60</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">))));<br>
&nbsp;&nbsp;  frame.getContentPane().add(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JButton(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">按钮3</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ImageIcon(createImageIcon(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">60</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">))));<br>
&nbsp;&nbsp;  frame.getContentPane().add(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JButton(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">使用Java2D创建的立体水晶风格的按钮</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ImageIcon(createImageIcon(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">30</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">))));<br>
&nbsp;&nbsp;  frame.setSize(</span><span style="color: rgb(0, 0, 0);">500</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">300</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">);<br>
&nbsp;&nbsp;  frame.setTitle(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">Java也惊艳</span><span style="color: rgb(0, 0, 0);">&quot;</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">);<br>
&nbsp;&nbsp;  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br>
&nbsp;&nbsp;  TWaverUtil.centerWindow(frame);<br>
&nbsp;&nbsp;  frame.setVisible(</span><span style="color: rgb(0, 0, 255);">true</span></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">);<br>
}<br>
</span></span></span></span></div>
<br>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;   </span></span></span>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">效果如下图：</span></span></span></span></p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><img height="300" width="500" border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1-4.png"></span></span></span></span></p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">本例子没有使用<span>Look And Feel</span>。你也可以使用<span>JGoodies</span>来美化一下，效果肯定更好。</span></span></span></span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">五、总结</span></span></span></span></strong></p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">可以看出，画出这类立体水晶效果并不难，只需仔细观察这些效果的光学细节，并用<span>Java2D</span>的<span>API</span>来实现即可。这些例子稍作改进，就可以用来绘制<span>JButton</span>等<span>Swing</span>组件，并用在实际项目中。或者，也可以应用这些技巧来做一些复杂图形界面，如在<span>TWaver</span>中做出的网络拓扑图效果：</span></span></span></span></p>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">  <img border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1_t.png"></span></span></span>
<p class="MsoNormal"><strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">本文知识要点：</span></span></span></span></strong></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span><span>n<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   </span></span></span><span>渐变填充：这个使用<span>GradientPaint</span>就行了；</span></span></span></span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span><span>n<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   </span></span></span><span>使用<span>Clip</span>：类似蒙版<span>/</span>剪切的<span>Java2D</span>技术。看看<span>Graphics</span>的<span>setClip</span>函数就明白了；</span></span></span></span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span><span>n<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   </span></span></span><span>Area</span><span>的使用：主要是<span>Area</span>的相交、合并等几个常见图形处理手法。详细请看<span>java.awt.geom.Area</span>类；</span></span></span></span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span><span>n<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   </span></span></span><span>生成内存图片：主要是<span>BufferedImage</span>类的使用；</span></span></span></span></p>
<p class="MsoNormal"> </p>
<span style="font-size: 10.5pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">如果大家感兴趣，可以尝试用上述<span>Java2D</span>技巧实现下图效果：<br>
<img border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/swing1/1_7.png"><br>
<span style="color: rgb(255, 0, 0);">以上内容转载请注明</span></span></span></span></span> <a href="http://hi.baidu.com/laoflch/blog/item/a44c3afb9a7f82254e4aea4e.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/a44c3afb9a7f82254e4aea4e.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-20  14:10</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/a44c3afb9a7f82254e4aea4e.html</guid>
</item>

<item>
        <title><![CDATA[转载：JavaSwing也惊艳之一：水晶之恋（一）]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/efa002821c68a597f703a64e.html]]></link>
        <description><![CDATA[
		
		<strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">一、序言</span></span></span></span></strong>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">关于&ldquo;<span>Java</span>做不好桌面&rdquo;的争论已经由来已久。虽然<span>Swing</span>和<span>Java2D</span>已经有超过十年的历史，也有<span>JIDE</span>、<span>JGoodies</span>、<span>TWaver</span>等不少开源<span>Swing</span>组件，但是用<span>Java</span>做桌面程序仍然不是一件轻松的事。本《<span>Java</span>也惊艳》系列文章，就是想通过一些简单生动的例子，和大家一起认识<span>Java</span>、探索<span>Swing</span>。其实你只需要多一点创意、多一点耐心，你的<span>Java</span>程序也可以&ldquo;惊艳&rdquo;！本文就带您一起进入<span>Java</span>的&ldquo;水晶之恋&rdquo;。</span></span></span></span></p>
<p class="MsoNormal"><strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">二、立体水晶效果</span></span></span></span></strong></p>
<p class="MsoNormal"> </p>
<span style="font-size: 10.5pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">受苹果公司的影响，现在立体水晶风格的界面非常流行。<span>Java</span>也可以吗？我们不妨先尝试一下用<span>Java</span>绘制一个立体水晶风格的按钮到底有多难。一个立体的水晶按钮应当有一个图标、一个圆角矩形区域、边框以及一些立体反光效果，如下图：<br>
<img height="74" width="550" border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1-0.png"><br>
</span></span></span>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">简单思路如下：先画矩形区域，然后画图标，然后设置<span>clip</span>并画高亮反光区域，最后画外部边框。</span></span></span></span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">具体实现比较简单，主要代码如下：<br>
</span></span></span></span></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">Color color </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> TWaverUtil.getRandomColor(); <br>
RoundRectangle2D body </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> RoundRectangle2D.Float(x, y, size, size, size </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">, size </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">3</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw body </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">g2d.setColor(color); <br>
GradientPaint paint </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> GradientPaint(x, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  y, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  color.darker(), <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  x, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  y </span><span style="color: rgb(0, 0, 0);">+</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> size, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  color.brighter().brighter()); <br>
g2d.setPaint(paint); <br>
g2d.fill(body); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw image </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">g2d.setClip(body); <br>
Image image </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> TWaverUtil.getImage(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">/glass/</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">.png</span><span style="color: rgb(0, 0, 0);">&quot;</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
g2d.drawImage(image, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  x </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> (size </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> image.getWidth(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)) </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  y </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> (size </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> image.getHeight(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)) </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
g2d.setClip(</span><span style="color: rgb(0, 0, 255);">null</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw highlight. </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">Shape highlightArea </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> createHighlightShape(x, y, size, body); <br>
g2d.setColor(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Color(</span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">150</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">)); <br>
g2d.fill(highlightArea); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw outline. </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">g2d.setColor(color.darkGray); <br>
g2d.draw(body);<br>
</span></span></span></span></div>
</span><span style="font-size: 10.5pt;"><br>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">其中，对高亮区域的计算，可以用一个圆心在左上方的大圆形和矩形进行剪切：<br>
</span></span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Shape createHighlightShape(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> centerX, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> centerY, </span><span style="color: rgb(0, 0, 255);">int</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> size, Shape body) { <br>
</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> size </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">4</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> x </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> centerX </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> size </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2.3</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> y </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> centerY </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> size </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">3.2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
&nbsp;&nbsp;  Ellipse2D.Double circle </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Ellipse2D.Double(x, y, myRadius, myRadius); <br>
&nbsp;&nbsp;  Area area </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Area(circle); <br>
&nbsp;&nbsp;  area.intersect(</span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Area(body)); <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"> area; <br>
}<br>
</span></span></span></span></div>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">  </span></span></span>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">运行程序效果如下：</span></span></span></span></p>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">  <img height="700" width="700" border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1-1.png"></span></span></span>
<p class="MsoNormal"><strong><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><br>
三、更多变化</span></span></span></span></strong></p>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="font-size: 10.5pt;">根据上面例子稍作形状变换，可以画出立体水晶球的按钮。</span><br>
</span></span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">Color color </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> TWaverUtil.getRandomColor(); <br>
<br>
Ellipse2D.Double circle </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Ellipse2D.Double(centerX </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> radius, centerY </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> radius, radius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">, radius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw body </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">g2d.setColor(color); <br>
GradientPaint paint </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> GradientPaint(centerX, centerY, color, centerX, centerY </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> radius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">, color.brighter().brighter()); <br>
g2d.setPaint(paint); <br>
g2d.fill(circle); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw image </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">g2d.setClip(circle); <br>
Image image </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> TWaverUtil.getImage(</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">/glass/</span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">&quot;</span><span style="color: rgb(0, 0, 0);">.png</span><span style="color: rgb(0, 0, 0);">&quot;</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
g2d.drawImage(image, <br>
centerX </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> image.getWidth(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  centerY </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> image.getHeight(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
g2d.setClip(</span><span style="color: rgb(0, 0, 255);">null</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
<br>
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">draw highlight. </span></span></span></span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">Shape highlightArea </span><span style="color: rgb(0, 0, 0);">=</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> createHighlightShape(centerX, centerY, radius); <br>
g2d.setColor(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Color(</span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">255</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">150</span></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">)); <br>
g2d.fill(highlightArea);<br>
</span></span></span></span></div>
<br>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">唯一略有不同的部分是，水晶球的高亮区域要用两个圆形拼切：</span></span></span></span></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Shape createHighlightShape(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> centerX, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> centerY, </span><span style="color: rgb(0, 0, 255);">int</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> radius) { <br>
</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> radius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0.8</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> x </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> centerX </span><span style="color: rgb(0, 0, 0);">-</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> myRadius; <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> y1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> centerY </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">5</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">double</span><span style="color: rgb(0, 0, 0);"> y2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> centerY </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> myRadius </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">; <br>
<br>
&nbsp;&nbsp;  Ellipse2D.Double circle1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Ellipse2D.Double(x, y1, myRadius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">, myRadius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
&nbsp;&nbsp;  Ellipse2D.Double circle2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Ellipse2D.Double(x, y2, myRadius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">, myRadius </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);">); <br>
<br>
&nbsp;&nbsp;  Area area </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Area(circle1); <br>
&nbsp;&nbsp;  area.intersect(</span><span style="color: rgb(0, 0, 255);">new</span></span></span></span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 0);"> Area(circle2)); <br>
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"> area; <br>
}<br>
</span></span></span></span></div>
<span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">  </span></span></span>
<p class="MsoNormal"><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);">运行效果如下：<br>
<img height="700" width="700" border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1-2.png"><br>
<br>
<span style="font-size: 10.5pt;">如果再来点儿循环、随机大小、随机位置、随机颜色，就可以做出绚丽的&ldquo;吹肥皂泡&rdquo;的效果</span><br>
</span></span></span><span><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="color: rgb(0, 128, 0);"><img height="538" width="660" border="0" src="http://www.blogjava.net/images/blogjava_net/swing/Swing/%E6%B0%B4%E6%99%B6/1_3.png"><br>
<br>
</span></span></span></span></span></p> <a href="http://hi.baidu.com/laoflch/blog/item/efa002821c68a597f703a64e.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/efa002821c68a597f703a64e.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-20  14:10</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/efa002821c68a597f703a64e.html</guid>
</item>

<item>
        <title><![CDATA[动态加解密技术综述]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/647d59c8c4b421107f3e6f96.html]]></link>
        <description><![CDATA[
		
		　　现代密码学经过几十年的研究和发展，多种安全性高的加密算被广泛地应用在各种信息安全产品中，其中数据加密技术是密码学的一个重要应用领域。本文将介绍动态加解密技术。<span>    <br>
</span>
<p>　　随着计算机和网络技术的飞速发展，越来越多的信息以电子形式存储在个人和商用电脑中，并且通过网络进行广泛地传递， 在大量的信息存储和交换中，信息的安全问题越来越引起人们的重视。信息保密的理论基础是密码学，根据现代密码学的理论，一个好的加密算法的安全性只依赖于 密钥，加密算法的公开与否不影响其安全性。现代密码学经过几十年的研究和发展，已经发明了许多安全性很高的加密算法，并且被广泛地应用在各种信息安全产品 中，其中数据加密技术是密码学的一个重要应用领<a target="_bank" href="http://whatis.ctocio.com.cn/searchwhatis/194/7352194.shtml" class="fllink">域</a>。数据加密产品由于实现的方法和层次的不同，决定了其应用领域和范围。</p>
<p>　　数据加密技术按照实现的方法可划分为静态加密和动态加密，从实现的层次上则可分为文件级加密和存储设备级加密。</p>
<p>　　<strong>1.静态加密与动态加密</strong></p>
<p>　　静态加密是指在加密期间，待加密的数据处于未使用状态，这些数据一旦加密，在使用前，需首先通过静态解密得到明文，然后才能使用。目前市场上许多加密软件产品就属于这种加密方式。</p>
<p>　　与静态加密不同，动态加密(也称实时加密，透明加密等，其英文名为encrypt on-th<a target="_bank" href="http://whatis.ctocio.com.cn/searchwhatis/246/5947746.shtml" class="fllink">e-</a>fly)， 是指数据在使用过程中自动对数据进行加密或解密操作，无需用户的干预，合法用户在使用加密的文件前，也不需要进行解密操作即可使用，表面看来，访问加密的 文件和访问未加密的文件基本相同，对合法用户来说，这些加密文件是&ldquo;透明的&rdquo;，即好像没有加密一样，但对于没有访问权限的用户，即使通过其它非常规手段得 到了这些文件，由于文件是加密的，因此也无法使用。由于动态加密技术不仅不改变用户的使用习惯，而且无需用户太多的干预操作即可实现文档的安全，因而近年 来得到了广泛的应用。</p>
<p>　　由于动态加密要实时加密数据，必须动态跟踪需要加密的数据流，而且其实现的层次一般位于系统内核中，因此，从实现的技术角度看，实现动态加密要比静态加密难的多，需要解决的技术难点也远远超过静态加密。</p>
<p>　　<strong>2.动态加密实现的层次级别</strong></p>
<p>　　在不同的操作系中(如WINDOWS、LINUX、UNIX等)，虽然数据的具体组织和存储结构会有所不同，但它们均可用图1的模型进行表示，即应用程序在访问存储设备数据时，一般都通过<a target="_bank" href="http://whatis.ctocio.com.cn/searchwhatis/250/7333750.shtml" class="fllink">操作系统</a>提供的API 调用<a target="_bank" href="http://whatis.ctocio.com.cn/searchwhatis/192/7352192.shtml" class="fllink">文件系统</a>， 然后文件系统通过存储介质的驱动程序访问具体的存储介质。其中层次I和II属于应用层;层次III和IV属于操作系统内核层。这种组织结构决定了加密系统 的实现方式，在数据从存储介质到应用程序所经过的每个路径中，均可对访问的数据实施加密/解密操作，其中模型中的层次I只能捕获应用程序自身读写的数据， 其他应用程序的数据不经过该层，因此，在层次I中只能实现静态加密，无法实现动态加密;即使是层次II，也并不是所有文件数据均通过该层，但在该层可以拦 截到各种文件的打开、关闭等操作。因此，在应用层实现的动态加解密产品无法真正做到&ldquo;实时&rdquo;加密/解密操作，一般只能通过其他变相的方式进行实现(一般均 在层次II进行实现)。例如，在应用程序打开文件时，先直接解密整个文件或解密整个文件到其他路径，然后让应用程序直接(重定向)访问这个完全解密的文 件，而在应用程序关闭这个文件时，再将已解密的文件进行加密。其实质是静态加解密过程的自动化，并不属于严格意义上的动态加密。</p>
<p>　　由于目前的操作系统，如Windows/Linux/Unix等，只有在内核层才能拦截到各种文件或磁盘操作，因此，真正的动态加解密产品只能 在内核层进行实现。在图1给出的模型中，在内核层中的文件系统可以拦截到所有的文件操作，但并不能拦截到所有的存储设备(在下面的叙述中，我们一般用磁盘 来表示存储设备)操作，要拦截所有的存储设备操作，必须在存储设备驱动程序中进行拦截，操作系统的对存储设备的访问形式决定了动态加解密安全产品的两大种 类：基于文件级的动态加解密产品和基于磁盘级的动态加解密产品。</p>
<p align="center"><img height="447" width="388" src="http://new.51cto.com/files/uploadimg/20080925/1330040.jpg"></p>
<p align="center">　　图1操作系统的存储设备访问模型</p>
<p align="center"> </p>
<p align="center"><strong>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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>
</strong></p>
<p>　　在<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/192/7352192.shtml" target="_bank">文件系统</a>层，不仅能够获得文件的各种信息，而且能够获得访问这些文件的<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/292/7333792.shtml" target="_bank">进程</a>信息和用户信息等，因此，可以研制出功能非常强大的文档安全产品。就动态加解密产品而言，有些文件系统自身就支持文件的动态加解密，如Windows系统中的NTFS文件系统，其本身就提供了EFS(<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/184/5947684.shtml" target="_bank">Encryption</a> File <a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/494/6026494.shtml" target="_bank">System</a>) 支持，但作为一种通用的系统，虽然提供了细粒度的控制能力(如可以控制到每个文件)，但在实际应用中，其加密对象一般以分区或目录为单位，难以做到满足各 种用户个性化的要求，如自动加密某些类型文件等。虽然有某些不足，但支持动态加密的文件系统在某种程度上可以提供和磁盘级加密技术相匹敌的安全性。由于文 件系统提供的动态加密技术难以满足用户的个性化需求，因此，为第三方提供动态加解密安全产品提供了足够的空间。</p>
<p>　　要研发在文件级的动态加解密安全产品，虽然与具体的<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/250/7333750.shtml" target="_bank">操作系统</a>有关，但仍有多种方法可供选择，一般可通过<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/119/5948119.shtml" target="_bank">Hook</a>或 过滤驱动等方式嵌入到文件系统中，使其成为文件系统的一部分，从某种意义上来说，第三方的动态加解密产品可以看作是文件系统的一个功能扩展，这种扩展往往 以模块化的形式出现，能够根据需要进行挂接或卸载，从而能够满足用户的各种需求，这是作为文件系统内嵌的动态加密系统难以做到的。</p>
<p>　　下面我们以亿赛通公司的SmartSec为例，分析一下文件动态加解密的具体实现方式。图2给出了SmartSec的实现原理，从中可以看 出，SmartSec的动态加解密是以文件过滤驱动程序的方式进行实现的(位于层次III)，同时在应用层(层次II)和内核层(层次III)均提供访问 控制功能，除此之外，还提供了日志和程序行为控制等功能，这种通过应用层和内核层相互配合的实现方式，不仅能提供更高的安全性，而且有助于降低安全系统对 系统性能的影响。</p>
<p align="center"><img height="329" width="368" src="http://new.51cto.com/files/uploadimg/20080925/1330041.jpg"></p>
<p align="center">　　图2 SmartSec系统中动态加解密的实现</p>
<p align="center"><strong>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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>
</strong></p>
<p>　　对于信息安全要求比较高的用户来说，文件级加密是难以满足要求的。例如，在Windows系统中(在其它<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/250/7333750.shtml" target="_bank">操作系统</a>中 也基本类似)，我们在访问文件时，会产生各种临时文件，虽然这些临时文件在大多数情况下，会被应用程序自动删除，但某些情况下，会出现漏删的情况，即使临 时文件被删除，但仍然可以通过各种数据恢复软件将其进行恢复，在实际应用中，这些临时文件一般不会被加密，从而成为信息泄密的一个重要渠道。更进一步，即 使将临时文件也进行了加密处理，但系统的页面交换文件等(如Windows的<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/397/6025897.shtml" target="_bank">Pagefile</a>.sys等，除<a class="fllink" href="http://whatis.ctocio.com.cn/searchwhatis/192/7352192.shtml" target="_bank">文件系统</a>内嵌的加密方式外，第三方动态加解密产品一般不能对系统文件进行加密，否则会引起系统无法启动等故障)也会保留用户访问文件的某些信息，从而引起信息的泄密。</p>
<p>　　有一种方式可以避免上述提到的各种漏洞，那就是将存储设备上包括操作系统在内的所有数据全部加密，要达到这个目的，只有基于磁盘级的动态加解密 技术才能满足要求。静态加密技术在这种情况下，一般无法使用，这是因为操作系统被加了密，要启动系统，必须先解密操作系统才能启动，如果采用静态加解密方 式，只能在每次关机后将磁盘上的所有数据进行加密，在需要启动时再解密磁盘上的所有数据(至少也得解密所有的操作系统文件，否则系统无法启动)，由于操作 系统占用的空间越来越大，这个过程所需要的时间是难以忍受的。</p>
<p>　　与静态方式不同，在系统启动时，动态加解密系统实时解密硬盘的数据，系统读取什么数据，就直接在内存中解密数据，然后将解密后的数据提交给操作 系统即可，对系统性能的影响仅与采用的加解密算法的速度有关，对系统性能的影响也非常有限，这类产品对系统性能总体的影响一般不超过10%(取目前市场上 同类产品性能指标的最大值)。图3给出了亿赛通公司基于磁盘级动态加解密的安全产品DiskSec的实现原理，从中可以看出，DiskSec的动态加解密 算法位于操作系统的底层，操作系统的所有磁盘操作均通过DiskSec进行，当系统向磁盘上写入数据时，DiskSec首先加密要写入的数据，然后再写入 磁盘;反之，当系统读取磁盘数据时，DiskSec会自动将读取到的数据进行解密，然后再提交给操作系，因此，加密的磁盘数据对操作系统是透明的，也就是 说，在操作系统看来，磁盘上的加密数据和未加密的状态是一样的。</p>
<p align="center"><img height="297" width="258" src="http://new.51cto.com/files/uploadimg/20080925/1330042.jpg"></p>
<p align="center">　　图3磁盘级动态加解密的实现</p>
<p>　　<strong>5.文件级和磁盘级动态加密的比较</strong></p>
<p>　　这两类加密方法均有各自的优点和缺点，磁盘级加密与文件级加密方式相比，主要优点是：加密强度高，安全性好。</p>
<p>　　由于这一级别的加密方式直接对磁盘物理扇区进行加密，不考虑文件等存储数据的逻辑概念，在这种加密方式下，任何存储在磁盘上的数据均是加密的， 相反，采用文件级的加密方式一般只对用户指定的某些文件进行加密，而这些文件在用户日常使用中，由于临时文件等均会带来安全隐患。因此，采用磁盘级的加密 方式要较文件级的加密方式安全。</p>
<p>　　磁盘级加密的主要缺点是：不够灵活方便，适用面比较窄。</p>
<p>　　与文件级的加密方式不同，由于磁盘级的加密方式没有文件、目录等概念，难以对指定的文件或目录进行加密、隐藏等操作，反之，文件级的加密方式可以采用各种灵活的加密手段，能够做到更细粒度的控制，用户不仅可以指定要加密的文件类型或目录，同时也可以隐藏某些目录等。</p> <a href="http://hi.baidu.com/laoflch/blog/item/647d59c8c4b421107f3e6f96.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/647d59c8c4b421107f3e6f96.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-17  09:49</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/647d59c8c4b421107f3e6f96.html</guid>
</item>

<item>
        <title><![CDATA[新模版]]></title>
        <link><![CDATA[http://hi.baidu.com/laoflch/blog/item/c8b6a93f86e7aaeb55e723cd.html]]></link>
        <description><![CDATA[
		
		&nbsp;&nbsp;  今天忙了几个小时，终于完成了现在这个模版，感觉如何？ 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/laoflch/blog/category/it%B5%E3%B5%CE">it点滴</a>&nbsp;<a href="http://hi.baidu.com/laoflch/blog/item/c8b6a93f86e7aaeb55e723cd.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-07  15:52</pubDate>
        <category><![CDATA[it点滴]]></category>
        <author><![CDATA[laoflch]]></author>
		<guid>http://hi.baidu.com/laoflch/blog/item/c8b6a93f86e7aaeb55e723cd.html</guid>
</item>


</channel>
</rss>