﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-guiying</title><link>http://www.blogjava.net/guiying/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:00:09 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:00:09 GMT</pubDate><ttl>60</ttl><item><title>Linux网络编程中的地址问题</title><link>http://www.blogjava.net/guiying/archive/2012/08/18/385755.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Sat, 18 Aug 2012 15:14:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/18/385755.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385755.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/18/385755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385755.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">平时我们使用的IP地址是192.168.1.11这种类型的字符串;而在Linux内核中是用二进制方式表达的IP地址。在程序设计中经常要用到字符串表达方式的IP地址和二进制的IP地址之间的转换。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　面对网络编程中众多的地址函数，你hold住了么，tiger哥没hold住，所以就写了此篇文章，希望大家能hold住网络编程。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　前言：结构体struct in_addr结构struct in_addr 在文件中定义，结构in_addr 有一个unsigned long int 类型的成员变量s_addr.通常所说的IP地址的二进制形式就保存在成员变量s_addr中。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　结构struct in_addr的原型如下：structin_addr{ unsigned long int s_addr;/*IP地址*/ }一。字符串IP地址转换为二进制形式的IP地址函数1.inet系列函数的原型：#include #include #include int inet_aton(const char *cp，struct in_addr *inp);int addr_t inet_addr(const char *cp);int addr_t inet_network(const char *cp);char * inet_ntoa(struct in_addr in);struct in_addr inet_makeaddr(int net，int host);in_addr_t inet_lnaof(struct in_addr in);in_addr_t inet_netof(struct in_addr in);2.inet_aton()函数int inet_aton(const char*cp，struct in_addr *inp)</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　1&gt;函数作用：inet_ation()函数将在cp中存储的点分十进制字符串类型的IP地址，转换为二进制的IP地址，转换后的值保存在指针inp指向的结构struct in_addr中。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;形参？ const char *cp：指向字符类型的IP地址。例如&#8220;192.168.1.11&#8221;？ struct in_addr *inp：指向二进制的网络字节顺序的IP地址structin_addr{ unsignedlong s_addr } 3&gt;函数执行成功则返回非0值，参数无效则返回0. 4&gt;实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main()</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ char buffer[32];structin_addr in;in.s_addr =0;/*输入一个字符串形式的IP地址*/ printf(&#8220;pleaseinput the ip addrss\n&#8221;);scanf(&#8220;%s&#8221;，buffer);buffer[31]=&#8216;\0&#8217;;printf(&#8220;original IP地址：%s\n&#8221;，buffer);if( 0 == inet_aton(buffer，&amp;in)){ perror(&#8220;inet_aton&#8221;);exit(1);} else { printf(&#8220;after transfer：0x%0x\n&#8221;，in.s_addr);} 5&gt; inet_aton函数最后计算出来的是网络字节序的二进制IP 3.inet_addr()函数in_addr_t inet_addr(const char *cp)</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　1&gt;函数作用：它将参数cp所指向的字符串形式的IP地址(&#8220;192.168.1.11&#8221;)转换为二进制的网络字节序的IP地址形式该函数的缺点是：如果IP地址是255.255.255.255.那么调用inet_addr()函数后将返回-1(因为-1的补码形式是0xFFFFFFFF)。所以不建议使用inet_addr()函数，而是使用inet_aton()函数。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;函数形参：const char*cp：cp指向字符串形式的IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　3&gt;函数返回值：函数成功后返回二进制的网络字节序的IP地址(struct in_add)，否则返回-1. 4&gt;inet_addr计算出来的是网络字节序的二进制IP 5&gt;函数实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main()</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ char buffer[32];structin_addr in;in.s_addr =0;/*输入一个字符串形式的IP地址*/ printf(&#8220;pleaseinput the ip addrss\n&#8221;);scanf(&#8220;%s&#8221;，buffer);buffer[31]=&#8216;\0&#8217;;printf(&#8220;original IPaddress：%s\n&#8221;，buffer);if((in.s_addr = inet_addr(buffer))==INADDR_NONE){ perror(&#8220;inet_addr&#8221;);exit(1);} else { printf(&#8220;after transfer：0x%0x\n&#8221;，in.s_addr);} 4.inet_network in_addr_t inet_network(constchar *cp)</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　1&gt;函数作用：将参数cp指向的字符串形式的网络地址转换为主机字节顺序形式的二进制IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;函数形参？ const char *cp： cp指向字符串形式的IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　3&gt;函数返回值：执行成功后返回转换后的结果，参数无效后返回-1. 4&gt;inet_network返回的是主机字节序5&gt;函数实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main()</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ char buffer[32];structin_addr in;in.s_addr =0;/*输入一个字符串形式的IP地址*/ printf(&#8220;pleaseinput the ip addrss\n&#8221;);scanf(&#8220;%s&#8221;，buffer);buffer[31]=&#8216;\0&#8217;;printf(&#8220;original IPaddress：%s\n&#8221;，buffer);if((in.s_addr = inet_addr(buffer))==INADDR_NONE){ perror(&#8220;inet_addr&#8221;);exit(1);} else { printf(&#8220;after transfer：0x%0x\n&#8221;，in.s_addr);}总结：1.inet_addr和inet_network函数都是用于将字符串形式转换为整数形式用的;2.inet_addr返回的整数形式是网络字节序，而inet_network返回的整数形式是主机字节序。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　3.inet_addr 和inet_network有一个小缺陷，那就是当IP是255.255.255.255时，这两个函数会认为这是个无效的IP地址，这是历史遗留问题，其实在目前大部分的路由器上，这个 255.255.255.255的IP都是有效的。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　4.inet_aton认为255.255.255.255是有效的，所以建议使用inet_aton.并且inet_aton函数返回的是网络字节序的IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　二。进制IP地址转换为字符串形式的IP地址1.char * inet_ntoa(struct in_addr in);1&gt;函数作用：将数值为in的网络字节序形式的二进制IP地址转换为字符串形式的IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;形参：struct in_addr in：指向二进制的IP地址3&gt;函数返回值：执行成功返回结果字符串的指针，参数无效返回NULL. 4&gt;函数实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main()</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ char buffer[32];char *str;structin_addr in;in.s_addr =0;/*输入一个字符串形式的IP地址*/ printf(&#8220;pleaseinput the ip addrss\n&#8221;);scanf(&#8220;%s&#8221;，buffer);buffer[31]=&#8216;\0&#8217;;printf(&#8220;original IP地址：%s\n&#8221;，buffer);if( 0 == inet_aton(buffer，&amp;in)){ perror(&#8220;inet_aton&#8221;);exit(1);} else { printf(&#8220;the first transfer：0x%0x\n&#8221;，in.s_addr);} printf(&#8220;begin two process：\n&#8221;);if( (str =inet_ntoa(in) == NULL ){ printf(&#8220;inet_ntoa：argumentinvalid\n&#8221;);} else { printf(&#8220;thesecond transfer：%s\n&#8221;，str);}说明：1.函数inet_ntoa()的返回值为一个指向字符串的指针，该内存函数inet_ntoa()每次调用都会重新覆盖，因此函数不安全，可能存在某种隐患2.实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main()</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ structin_addr ip1，ip2;char *str1 ;char *str2;ip1.s_addr = 192&lt;&lt;24| 168 &lt;&lt;16 |1 &lt;&lt;8 | 1;ip2.s_addr =255&lt;&lt;24 | 255 &lt;&lt;16 |255&lt;&lt;8|255;str1 = inet_ntoa(ip1);str2 = inet_ntoa(ip2);printf(&#8220;ip1：0x%x&#224;%s\n&#8221;，ip1.s_addr，str1);printf(&#8220;ip2：0x%x&#224;%s\n&#8221;，ip2.s_addr，str2);}输出结果为：ip1： 0xc0a80101&#224;255.255.255.255;ip2：0xffffffff&#224;255.255.255.255;表明函数inet_ntoa在进行二进制IP地址到字符串IP地址的转换过程中是不可重入的，这个函数转换两个不同的IP地址得到了同一个结果。此类函数在调用之后，需要立即将结果取出，没有取出结果之前不能进行同样函数的调用。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　三。最新的地址转换函数inet_pton()和inet_ntop()函数inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6.算是比较新的函数了。inet_pton函数原型如下[将&#8220;点分十进制&#8221; -&gt; &#8220;整数&#8221;]，并且这两个函数是一套安全的协议无关的地址转换函数。所谓安全即这两个函数是可重入的，并且这些函数支持多种地址类型，包括IPv4和IPv6. 1.inet_pton()函数1&gt;函数功能inet_pton()函数将字符串类型的IP地址转换为二进制类型。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;函数原型#include #include #include intinet_pton(int af， const char *src， void *dst);3&gt;函数形参：？ int af：af表示网络类型的协议族，在IPv4下的值为AF_INET;？ src：存放需要转换的字符串？ dst ：存放转换后的结果，在IPv4下，dst指向结构struct in_addr的指针。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　4&gt;函数返回值当函数inet_pton()的返回值为-1的时候，通常是用于af所指定的协议族不支持造成，此时errno的返回值为EAFNOSUPPORT;当函数的返回值为0时，表示src指向的值不是合法的IP地址;当函数的返回值为正值时，表示转换成功。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2.inet_ntop()函数1&gt;函数功能inet_pton()函数将二进制的网络IP地址转换为字符串。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;函数原型：#include #include #include intinet_nton(int af， const void *src， char *dst，socklen_t cnt);3&gt;函数形参：？ int af：af表示网络类型的协议族，在IPv4下的值为AF_INET;？ src ：为需要转换的二进制IP地址，在IPv4下，src指向一个structin_addr结构类型的指针。？ dst指向保存结果缓冲区的指针？ cnt的值是dst缓冲区的大小4&gt;函数返回值Inet_ntop()函数返回一个指向dst的指针。当发生错误时，返回NULL.当af设定的协议族不支持时，errno设置为EAFNOSUPPORT;当dst缓冲区大小过小的时候errno的值为ENOSPC. 3.函数实例：#include #include #include</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　#include #include #include int main(int argc，char *argv[])</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　{ struct in_addr ip;char ipstr[] = &#8220;192.168.1.1&#8221;;char addr[ADDRLEN];const char * str = NULL;int err = 0;if(err &gt; 0){ printf(&#8220;inet_pton：ip %s value is ：0x%x\n&#8221;，ipstr，ip.s_addr);} //把192.168.12.255转换为网络字节序ip.s_addr = htonl(192 &lt;&lt; 24 | 168&lt;&lt;16 | 12&lt;&lt;8 | 255);str = (const char *)inet_ntop(AF_INET，(void*)&amp;ip，(char *)&amp;addr[0]，ADDRLEN);if(str){ printf(&#8220;inet_ntop ：ip 0x%x is%s\n&#8221;，ip.s_addr，str);}四。inet_makeaddr()函数，inet_lnaof()函数和inet_netof()函数1.struct in_addr inet_makeaddr(int net，int host)</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　1&gt;函数功能：一个主机的IP地址分为网络地址和主机地址，inet_makeaddr()函数将主机字节序的网络地址net和主机地址host合并成一个网络字节序的IP地址。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　2&gt;函数形参：？ int net：存放网络号参数(二进制形式的主机字节序)？ int host：存放主机号地址(二进制形式的主机字节序)</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">　　3&gt;函数返回值：返回一个网络字节序的IP地址4&gt;函数实例：unsigned long net，host;net = 0x0000007F;host = 0x00000001;struct in_addr ip = inet_makeaddr(net，hst);2.in_addr_t inet_lnaof(struct in_addr in)</p><img src ="http://www.blogjava.net/guiying/aggbug/385755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-18 23:14 <a href="http://www.blogjava.net/guiying/archive/2012/08/18/385755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>离职引发的诸多感触</title><link>http://www.blogjava.net/guiying/archive/2012/08/18/385753.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Sat, 18 Aug 2012 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/18/385753.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385753.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/18/385753.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385753.html</trackback:ping><description><![CDATA[<span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;由于最近家里诸事繁多，目前的现状再也无法为继了，于是做出了一个重要的决定--离职。事实上，在现在的公司做出这样的决定也是顺理成章的事情，毕竟在去年的这个时候一起风雨同舟的同事们都已经陆续离职了，我是为数不多坚持到现在的项目成员了。当然我也并没有继续之前的项目，而且被外派到北京的另外一个项目中。刚到伊始，由于该项目组的压力很大，周围的同事们也都比较敬业，再有这也是我第一次正式和北京的同事们一起合作，当然也是我第一次感受到北京软件开发的浓浓氛围。坦白的讲，这个项目组所做的东西和我的技术匹配度并不是很高，还好大家都比较职业，并且分工明确，而分到我负责的部分也是相对比较擅长的，即核心逻辑组件的开发和设计，至于UI逻辑和底层技术攻关部分都交给了其他人。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之前也有过几次辞职的经历，只是这次的感觉比较奇怪，可能是年龄的原因吧，确实不能做到年轻时那样毫无顾忌了。即便这次仍然能顺利找到新的工作，但是下一次呢？这种想法在之前的离职中是从未考虑的。有鉴于此，就用了将近一周的时间进行了深入的思考。离职的真实原因究竟是什么，即便是有多个理由，到底哪一个才是最最重要的呢？然后又想，离职的目的又是什么，也就是说为了什么，而这个目的一旦达到之后又能给你带来什么，所带来的这些又能对今后的发展有什么样的帮助，归根结底一句话，主因和长远的规划是否是匹配的。带着这样一连串的疑问开始了自我反省的过程。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还是先说说原因吧。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一，家庭的负担。主要来自父母的身体，再有就是孩子还小，这样便无法保持这种每周出差的现状了。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二，工作感觉不好。每周在天津工作的时候，周围没有一个Team Member，连沟通和开开玩笑的人都没有，周围都是其他项目组的成员，没有一个认识的。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第三，沟通效率偏低，有的时候因为一个很简单的Bug或新需求，不得不反复很多次，这种异地的工作方式在沟通上确实存在极大的障碍。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第四，现有的工作和我未来的技术方向不是非常匹配。即便如此，毕竟是老Programmer了，应付起来问题不大。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第五，对移动设备的开发仍然保持着极大的热情，希望能够继续从事这一方面的技术研发工作。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第六、在了解之后，感觉外包公司的文化和所要求的技能对我来说，确实非常不合适。不过这里的项目运作方式确实给了我一种耳目一新的感觉。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 16px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>差不多就是这些了吧。从上面的几条中进行分析，第一条是刚性的需求，没有什么可说的，这是充分必要条件。而在其他原因之中，第五条是最最重要的，尽管已经Coding很多很多年，但继续Coding下去的热情仍然和当初一样炽烈，也真的希望能够兑现入行之初的誓言，Coding到退休。然而所不同的是，随着年龄的改变和经验的增多，不可能再像以前那样浑浑噩噩的去Coding了。自己一直非常渴望能够找到一个非常非常适合自己，同时又非常非常有兴趣的方向，在这条路上，最大化自己的经验值，用几年的时间做出一个真正属于自己，同时又能证明自己价值的软件产品来。</span><br style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 16px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>当然每个人都希望有一份薪水丰厚的工作，毕竟需要养家糊口，生儿育女。所以我们在急于实现理想的同时也不能不顾及来自于现实的考验。我想，能够完全放得下去殊死一搏并最终取得成功的人应该是极少数，更多的人没有这样的勇气和运气。我作为一名老Programmer，在心态上相比于以前更为平和了，毕竟积蓄和收入都还算说的过去。然而希望赢得尊重的心却更为浓烈了，比如说，在最近这一年多的时间里，坚持写博客和技术分享；之前独立开发的服务器平台已经为多家小型公司使用并成功部署上线；随着架构设计经验的不断提升，设计期间考虑的视角也更为多样。尽管如此，心里始终还是埋藏着那个巨大的缺憾，为什么仍然没有一个真正属于自己的产品呢？为什么不能像一个建筑师那样告诉周围人，这个建筑是我的作品。</p><img src ="http://www.blogjava.net/guiying/aggbug/385753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-18 23:13 <a href="http://www.blogjava.net/guiying/archive/2012/08/18/385753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas ajax登录方式跨域时session丢失问题解决</title><link>http://www.blogjava.net/guiying/archive/2012/08/18/385754.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Sat, 18 Aug 2012 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/18/385754.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385754.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/18/385754.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385754.html</trackback:ping><description><![CDATA[<p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><strong>问题</strong>：在ie浏览器下，域名A通过iframe的方式把登录信息post到域名为B的cas服务器上，经过debug发现A获取loginTicket时的sessionId和post过去时的sessionid不一致。只有ie浏览器有这个问题，火狐谷歌浏览器正常。</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><strong>原因</strong>：查资料知道<span style="color: #333333; line-height: 26px; ">IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie，火狐和谷歌目前还不支持P3P安全特性，所以它们不存在此问题了。</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #333333; line-height: 26px; "><span style="font-size: 18px; "><strong>解决方法</strong>：在第一次获取loginTicket时在response中设置p3p声明，如下：<br /><br /></span></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">response.setHeader("P3P",&nbsp;"CP=CURa&nbsp;ADMa&nbsp;DEVa&nbsp;PSAo&nbsp;PSDo&nbsp;OUR&nbsp;BUS&nbsp;UNI&nbsp;PUR&nbsp;INT&nbsp;DEM&nbsp;STA&nbsp;PRE&nbsp;COM&nbsp;NAV&nbsp;OTC&nbsp;NOI&nbsp;DSP&nbsp;COR");</span></div></p><img src ="http://www.blogjava.net/guiying/aggbug/385754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-18 23:13 <a href="http://www.blogjava.net/guiying/archive/2012/08/18/385754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中修改IP</title><link>http://www.blogjava.net/guiying/archive/2012/08/08/385099.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Wed, 08 Aug 2012 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/08/385099.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385099.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/08/385099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385099.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">现在正在复习linux，将一些比较常用的东西记下来，一遍以后再次复习</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">使用root用户登录，或者用普通用户登录之后使用su root切换，相信正常人都会选择前者。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">1、切换目录：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cd&nbsp; /etc/sysconfig/network-scripts</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">2、使用vi编辑器打开ifcfg-eth0</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">vi&nbsp; ifcfg-eth0</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">修改其中内容：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">DEVICE=eth0</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">BOOTPROTO=static</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">IPADDR=192.168.1.3</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">NETMASK=255.255.255.0</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">GATEWAY=192.168.1.1</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">HWADDR=原来是什么就是什么</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ONBOOT=yes</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">然后重启网卡服务：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">service network restart</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">如果无法使用service,那么将/sbin加入环境变量，如果可以使用则不需要执行下面命令：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">export PATH=$PATH:/sbin</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">这种修改方法是永久的，即使你重启后仍然有效，还有一种比较快捷的方法如下：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ifconfig eth0 192.168.1.3 netmask=255.255.255.0 up</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">立马生效。</p><img src ="http://www.blogjava.net/guiying/aggbug/385099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-08 23:47 <a href="http://www.blogjava.net/guiying/archive/2012/08/08/385099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中常用命令学习总结</title><link>http://www.blogjava.net/guiying/archive/2012/08/08/385098.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Wed, 08 Aug 2012 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/08/385098.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385098.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/08/385098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385098.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">前面的章节里对linux的文件的权限做了简单的解释。现在来看看常见的命令，从简单的开始：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">1 、切换目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cd</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">到/tmp 目录：cd /tmp</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">到上层目录：cd ..</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">2 、查看当前目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">pwd</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">3、 创建一个新的文件夹：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">mkdir</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">创建一层目录：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/08/1344406955_6081.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">创建多层目录：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/08/1344407191_3780.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">4 、删除目录：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">rmdir [-p]&nbsp;&nbsp; 如果需要层级删除目录，就需要带上p（只能删除空目录）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">5、查询环境变量</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">echo $PATH&nbsp; 或者$PATH</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">6、切换用户：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">su 用户名</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">7、移动文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;<img alt="" src="http://my.csdn.net/uploads/201208/08/1344407675_2035.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">仔细阅读上面的命令，你会发现mv还可以对文件进行从命名，上面的命令将hellot.txt从a中移动到了b中，并改名为hello1.txt</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">8、查看文件与目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ls</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ls -a&nbsp; 目录名称：列出目录中所有的文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ls -al 目录名：列出长字符串，包含文件的一些详细信息</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">如果没有给定目录名，那么就是当前目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">9、文件的复制：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cp [-adfilprsu] 源文件&nbsp; 目标文件&nbsp;&nbsp;&nbsp; //将源文件拷贝到目标文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cp&nbsp; src1,src2,... des&nbsp;&nbsp; //将多个源文件拷贝到目的文件夹</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cp这个命令非常重要，不同的身份执行对命令产生不同的效果，尤其是-a,-p参数，对不同的身份来说，区别非常大。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">例1：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">使用root执行：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/08/1344409294_8551.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">如果我们要将文件的所有的属性复制过来，则要加上参数-a</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">复制一个目录到另外一个目录 cp -r /src /desc</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">10 、移除文件或目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">rm [-fir] 文件或目录</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-f 强制的意思，忽略不存在的文件，不会出现警告信息</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-i互动模式：删除前，会询问是否删除</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-r ：递归删除</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">这里不再演示，记得之前的rmdir吗，只能删除空目录，所以删除非空目录只能使用rm -r</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">11、文件类容查询</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cat</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-b:列出行号</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-n:列出行号，包括空白行</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/08/1344409841_9401.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">cat 是一次性将数据显示到屏幕上，如果想一页一页的看怎么办？</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">使用more命令</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">more在运行的过程中，你有几个按键可以按：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">空格键：代表向下翻一页</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">Enter:代表向下滚动一行</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">q:离开more</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">b：往回翻页</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">12 、创建文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">touch</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">touch a.txt 就会在当前目录下创建a.txt</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">13、查找文件的命令</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">whereis ,find</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">whereis [-bmsu]&nbsp; 文件或目录名</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-b:二进制文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-m:只找在说明文件manual路径下的问津</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-s:只找source源文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-u:查找不在上述三个选项中的其他特殊文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">whereis ifconfig</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">下面看看find命令</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">find [path] [option] [actioin]</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">查找/home下面属于gavin的文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">find&nbsp;&nbsp; /home&nbsp; -user&nbsp; gavin</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">查找系统中不属于任何人的文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">find /&nbsp; -nouser</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">查找文件名为passwd的这个文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">find&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; -name passwd</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">查找文件类型为socket的文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">find&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp; -type s</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">14、磁盘和目录的容量</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">df:列出文件系统的整体磁盘使用量</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">du:评估文件系统的磁盘使用量</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">15 创建链接文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">ln&nbsp; [-sf] 源文件&nbsp;&nbsp; 目标文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-s&nbsp; :创建软连接，如果不加则是硬连接</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-f:如果目标文件存在，则删除后再建</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">[root@localhost test2]# echo 'good'&gt;a.txt<br />[root@localhost test2]# ls<br />a.txt<br />[root@localhost test2]# ln -s a.txt b<br />[root@localhost test2]# ls<br />a.txt&nbsp; b<br />[root@localhost test2]# ll<br />total 12<br />-rw-r--r-- 1 root root 5 Aug&nbsp; 8 01:09 a.txt<br />lrwxrwxrwx 1 root root 5 Aug&nbsp; 8 01:09 b -&gt; a.txt<br />[root@localhost test2]# echo 'hello'&gt;&gt;b<br />[root@localhost test2]# cat b<br />good<br />hello<br />[root@localhost test2]# cat a.txt<br />good<br />hello<br />[root@localhost test2]# ln a.txt c<br />[root@localhost test2]# ll<br />total 20<br />-rw-r--r-- 2 root root 11 Aug&nbsp; 8 01:09 a.txt<br />lrwxrwxrwx 1 root root&nbsp; 5 Aug&nbsp; 8 01:09 b -&gt; a.txt<br />-rw-r--r-- 2 root root 11 Aug&nbsp; 8 01:09 c<br />[root@localhost test2]# echo 'bad'&gt;&gt;c<br />[root@localhost test2]# cat c<br />good<br />hello<br />bad<br />[root@localhost test2]# cat a.txt<br />good<br />hello<br />bad<br />[root@localhost test2]# cat b<br />good<br />hello<br />bad<br />[root@localhost test2]# rm a.txt<br />rm: remove regular file `a.txt'? y<br />[root@localhost test2]# cat b<br />cat: b: No such file or directory<br />[root@localhost test2]# cat c<br />good<br />hello<br />bad<br />[root@localhost test2]#</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">运行上面的命令行，相信你对ln的使用会非常清楚的。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">15、挂载CD</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/08/1344415416_4798.jpg" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">16、文件压缩</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">tar</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-c:创建一个压缩文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-v:显示压缩过程</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-f:给出压缩文件名</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-x:解压文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">-t::查看压缩包中又哪些文件</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img src="http://my.csdn.net/uploads/201208/08/1344416649_6761.jpg" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><img src ="http://www.blogjava.net/guiying/aggbug/385098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-08 23:46 <a href="http://www.blogjava.net/guiying/archive/2012/08/08/385098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法学习之字符串左移和右移</title><link>http://www.blogjava.net/guiying/archive/2012/08/08/385097.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Wed, 08 Aug 2012 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/08/385097.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/385097.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/08/385097.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/385097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/385097.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">1.设计一个算法，把一个含有N个元素的数组循环右移K位，要求时间复杂度为O（N），</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">且只允许使用两个附加变量。<br />方法一：<br />每次将数组中的元素右移一位，循环K次，则实现了右移K位。<br />例如，<br />原始字符串：abcd1234<br />右移一位：4abcd123<br />右移一位：34abcd12<br />右移一位：234abcd1<br />右移一位：1234abcd<br />循环4次，则实现了右移4次</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">实现函数如下：<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;right_shift(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">str,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;K)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;K&nbsp;</span><span style="color: #000000; ">%=</span><span style="color: #000000; ">&nbsp;N;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">目的是，当K&nbsp;&gt;&nbsp;N时，移动K次与移动K-i*N次是一样的。</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(K</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;str[N&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;N&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;str[i&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><br /><p>从上面的实现代码可以看出，<br />由于K %= N， 所以while循环的K值是小于N的。所以时间复杂度最大为O(N^2), 空间复杂度为O(1)，不符合题目要求。</p><p>方法二：<br />对于原始字符串abcd1234，右移2位后为：34abcd12。<br />通过比较可以看出，有两段子字符串的顺序是不变的。abcd12和34。<br />则可发现，右移K位的过程就是把数组的两部分交换的过程。</p><p>例如：abcd12|34.<br />对abcd12逆序排列：21dcba<br />对34逆序排列：&nbsp;&nbsp; 43<br />对全部的21dcba|43进行逆序排列：34abcd21.</p><p>得出如下结论：<br />将字符串S="abcd1234"分为两部分X="abcd12"和Y="34"。那么S=(X, Y)<br />X逆序记为X'="21dcba"<br />Y逆序记为Y'="43"<br />则(X', Y')="21dcba43"整体再逆序为"34abcd12" = (Y, X)</p><p>即(X', Y')' = (Y, X)</p><p>代码实现如下：</p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;reverse(<span style="color: #0000FF; ">char</span>*&nbsp;str,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;begin,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;end)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(&nbsp;;&nbsp;begin&nbsp;&lt;&nbsp;end;&nbsp;begin++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;str[end];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[end]&nbsp;=&nbsp;str[begin];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[begin]&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;right_shift(<span style="color: #0000FF; ">char</span>&nbsp;*str,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;N,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;K)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;K&nbsp;%=&nbsp;N;<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;0,&nbsp;N&nbsp;-&nbsp;K&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;N&nbsp;-&nbsp;K,&nbsp;N&nbsp;-&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;0,&nbsp;N&nbsp;-&nbsp;1);<br />}</div><br /><br /><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">该算法则实现了在线性时间内实现右移操作了。</p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">编写主函数测试如下：</p><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;stdlib.h&gt;<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;str[]&nbsp;=&nbsp;"abcd1234";<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;initial&nbsp;string:%s\n",&nbsp;str);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;right_shift(str,&nbsp;8,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;string&nbsp;after&nbsp;right&nbsp;shift:%s\n",&nbsp;str);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0<br />}</div><br /><span style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">2.实现对字符串进行左旋转的函数，要求对长度为n的字符串操作的时间复杂度为O(n), 空间复杂度为O(1).</span><br style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">例如，原始字符串：abcd1234，左旋转2位后为：cd1234ab</span><br style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">通过上面的1的分析，只是把右移改为左移。其他方法相同。</span><br style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">代码实现如下：</span>&nbsp;<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;reverse(<span style="color: #0000FF; ">char</span>*&nbsp;str,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;begin,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;end)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(&nbsp;;&nbsp;begin&nbsp;&lt;&nbsp;end;&nbsp;begin++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;str[end];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[end]&nbsp;=&nbsp;str[begin];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[begin]&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;right_shift(<span style="color: #0000FF; ">char</span>&nbsp;*str,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;N,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;K)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;K&nbsp;%=&nbsp;N;<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;0,&nbsp;K&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;K,&nbsp;N&nbsp;-&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;reverse(str,&nbsp;0,&nbsp;N&nbsp;-&nbsp;1);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;str[]&nbsp;=&nbsp;"abcd1234";<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;initial&nbsp;string:%s\n",&nbsp;str);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;right_shift(str,&nbsp;8,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;string&nbsp;after&nbsp;right&nbsp;shift:%s\n",&nbsp;str);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0<br />}</div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>&nbsp;</p><img src ="http://www.blogjava.net/guiying/aggbug/385097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-08 23:45 <a href="http://www.blogjava.net/guiying/archive/2012/08/08/385097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让数据库游标变得简单</title><link>http://www.blogjava.net/guiying/archive/2012/08/01/384563.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Wed, 01 Aug 2012 14:13:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/01/384563.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/384563.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/01/384563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/384563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/384563.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong><span style="font-size: 18px; ">（一）浅谈游标</span></strong></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>（<span style="font-family: Calibri; ">1</span>）游标的概念</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 游标是指向查询结果集的一个指针，它是一个通过定义语句与一条<span style="font-family: Calibri; ">Select</span>语句相关联的一组<span style="font-family: Calibri; ">SQL</span>语句，即从结果集中逐一的读取一条记录。游标包含两方面的内容：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#9679;</span>游标结果集：执行其中的<span style="font-family: Calibri; ">Select</span>语句所得到的结果集；</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#9679;</span>游标位置：一个指向游标结果集内的某一条记录的指针</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 利用游标可以单独操纵结果集中的每一行。游标在定义以后存在两种状态：关闭和打开。当游标关闭时，其查询结果集不存在；只有当游标打开时，才能按行读取或修改结果集中的数据。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; （<span style="font-family: Calibri; ">2</span>）浅谈游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span>游标我们可以通俗的解释为变动的标示。正如它的解释一样，数据库中的游标其实也是一种读取数据的方式。举个简单的例子来说：我有一个电话本，电话本上的号码首先是按地域划分的，现在我想找个家住廊坊的李四。首先我们要做的是先找到廊坊地区的电话表，找到后的表也即是我们上面所说的游标结果集；而为了找到李四我们可能会用手一条一条逐行的扫过，以帮助我们找到所需的那条记录。对应于数据库来说，这就是游标的模型。所以，你可以这样想象：表格是数据库中的表，而我们的手好比是游标。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总结来说游标就好比是在电话本上逐一扫描号码的手指。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong><span style="font-size: 18px; ">（二）使用游标</span></strong></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>一个应用程序中可以使用两种类型的游标：前端（客户）游标和后端（服务器）游标，它们是两个不同的概念。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>但无论使用哪种游标，都必须经过如下的步骤：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#9679;</span>声明游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#9679;</span>打开游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#9679;</span>从游标中操作数据</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#9679;</span>关闭游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>下面我们主要讲述下服务器游标：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>（<span style="font-family: Calibri; ">1</span>）定义游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>使用游标之前必须先声明它。声明指定定义游标结果集的查询。通过使用<span style="font-family: Calibri; ">for update</span>或<span style="font-family: Calibri; ">for read only</span>关键词将游标显式定义成可更新的或只读的。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Declare cursor_name&nbsp; cursor</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; For select_statement</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; [for{read only|update[of colum_name_list]}]</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>举例：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Declare&nbsp; company_crsr cursor</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For select name,salary from company where salary&gt;2000</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For update of name,salary</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>上面我们声明了一个名为<span style="font-family: Calibri; ">company_crsr</span>的游标。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>（<span style="font-family: Calibri; ">2</span>）打开游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open</span>的语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open&nbsp;</span>游标名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在声明游标后，必须打开它以便用<span style="font-family: Calibri; ">fetch,update,delete</span>读取、修改、删除行。在打开一个游标后，它将被放在游标结果集的首行前，必须用<span style="font-family: Calibri; ">fetch</span>语句访问该首行。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>（<span style="font-family: Calibri; ">3</span>）读取游标数据</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>在声明并打开一个游标后，可用<span style="font-family: Calibri; ">fetch</span>命令从游标结果集中获取数据行。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fetch</span>的语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fetch&nbsp;</span>[[Next | Prior | First | Last | Absolute{n|@nvar} |Relative {n|@nvar}]</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From]<span style="font-family: Calibri; ">&nbsp;&nbsp;</span>游标名<span style="font-family: Calibri; ">&nbsp;[into&nbsp;</span>变量列表<span style="font-family: Calibri; ">]</span></span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>参数说明：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next</span>：返回结果集中当前行的下一行，如果该语句是第一次读取结果集中数据则返回的是第一行</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Prior</span>：返回结果集中当前行的上一行，如果该语句是第一次读取结果集中的数据则无记录结果返回并把游标位置设置为第一行。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; First</span>：返回游标第一行；<span style="font-family: Calibri; ">Last</span>：返回游标中的最后一行；</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Absolute{n|@nvar}</span>：如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为正数，返回从游标头开始的第<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>行并将返回的行变成新的当前行。如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为负数，返回游标尾之前的第<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>行并将返回的行变成新的当前行。如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为<span style="font-family: Calibri; ">&nbsp;0</span>，则没有行返回。<span style="font-family: Calibri; ">n&nbsp;</span>必须为整型常量且<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>必须为<span style="font-family: Calibri; ">smallint</span>、<span style="font-family: Calibri; ">tinyint&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;int</span>。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RELATIVE {n | @nvar}</span>：如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为正数，返回当前行之后的第<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>行并将返回的行变成新的当前行。如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为负数，返回当前行之前的第<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>行并将返回的行变成新的当前行。如果<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>为<span style="font-family: Calibri; ">&nbsp;0</span>，返回当前行。如果对游标的第一次提取操作时将<span style="font-family: Calibri; ">FETCH RELATIVE&nbsp;</span>的<span style="font-family: Calibri; ">&nbsp;n&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;@nvar&nbsp;</span>指定为负数或<span style="font-family: Calibri; ">&nbsp;0</span>，则没有行返回。<span style="font-family: Calibri; ">n&nbsp;</span>必须为整型常量且<span style="font-family: Calibri; ">@nvar&nbsp;</span>必须为<span style="font-family: Calibri; ">&nbsp;smallint</span>、<span style="font-family: Calibri; ">tinyint&nbsp;</span>或<span style="font-family: Calibri; ">&nbsp;int</span>。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>举例：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Fetch &nbsp;next</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;company_crsr into @name,@salary</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server</span>在每次读取后返回一个状态值。可用<span style="font-family: Calibri; ">@@sql_status</span>访问该值，下表给出了可能的<span style="font-family: Calibri; ">@@sql_status</span>值及其意义。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 值意义：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0</span>&#8212;&#8212;<span style="font-family: Calibri; ">Fetch</span>语句成功</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;1</span>&#8212;&#8212;<span style="font-family: Calibri; ">Fetch</span>语句导致一错误</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;2</span>&#8212;&#8212;结果集没有更多的数据，当前位置位于结果集最后一行，而客户对该游标仍发出<span style="font-family: Calibri; ">Fetch</span>语句时。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; 若游标是可更新的，可用<span style="font-family: Calibri; ">update</span>和<span style="font-family: Calibri; ">delete</span>语句来更新和删除行。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; 删除游标当前行的语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete [from]&nbsp;</span>表名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where current of&nbsp;</span>游标名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;举例：<span style="font-family: Calibri; ">delete from authors where current of authors_crsr</span></span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp; 当游标删除一行后，<span style="font-family: Calibri; ">SQL Server</span>将游标置于被删除行的前一行上。</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更新游标当前行的语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update&nbsp;</span>表名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set column_name1={expression1|NULL|(select_statement)}</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [,column_name2={expression2|NULL|(select_statement)}</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&#8230;&#8230;]</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where current of&nbsp;</span>游标名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举例：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update company</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set name=&#8221;</span>张三<span style="font-family: Calibri; ">&#8221;,salary=&#8221;5000&#8221;</span></span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: Calibri; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where current of company_crsr</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;（<span style="font-family: Calibri; ">4</span>）关闭游标</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当结束一个游标结果集时，可用<span style="font-family: Calibri; ">close</span>关闭。该语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close&nbsp;</span>游标名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关闭游标并不改变其定义，可用<span style="font-family: Calibri; ">open</span>再次打开。若想放弃游标，必须使用<span style="font-family: Calibri; ">deallocate</span>释放它，<span style="font-family: Calibri; ">deallocater</span>的语法为：</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deallocater cursor&nbsp;</span>游标名</span></p><p style="color: #333333; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deallocater</span>语句通知<span style="font-family: Calibri; ">SQL Server</span>释放<span style="font-family: Calibri; ">Declare</span>语句使用的共享内存，不再允许另一进程在其上执行<span style="font-family: Calibri; ">Open</span>操作。</span></p><img src ="http://www.blogjava.net/guiying/aggbug/384563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-01 22:13 <a href="http://www.blogjava.net/guiying/archive/2012/08/01/384563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle函数之case和decode的用法区别及性能比较</title><link>http://www.blogjava.net/guiying/archive/2012/08/01/384562.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Wed, 01 Aug 2012 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/08/01/384562.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/384562.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/08/01/384562.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/384562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/384562.html</trackback:ping><description><![CDATA[<p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp; &nbsp;在oracle世界，你可以使用：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 1）case表达式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 2）decode函数</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 来实现逻辑判断。<span style="font-family: 宋体; ">Oracle</span><span style="font-family: 宋体; ">的DECODE函数功能很强，灵活运用的话可以避免多次扫描，从而提高查询的性能。而CASE是9i以后提供的语法，这个语法更加的灵活，提供了IF THEN ELSE的功能。</span></span><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp; &nbsp;case表达式</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; case表达式，可分两种，简单和搜索，简单case后接表达式，如：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/01/1343788760_3938.png" width="624" height="238" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 对于简单的case需要几点注意：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 1）寻找when的优先级：从上到下</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 2）再多的when，也只有一个出口，即其中有一个满足了expr就马上退出case</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 3）不能把return_expr和else_expr指定为null，而且，expr、comparison_expr和return_expr的数据类型必须相同。</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><img alt="" src="http://my.csdn.net/uploads/201208/01/1343789537_4202.png" width="602" height="229" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; " /></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 搜索case：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp; CASE WHEN condition THEN return_expr</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;[WHEN condition THEN return_expr]</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp; ELSE else_expr</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp; END</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="color: #ff6600; ">&nbsp;&nbsp;&nbsp; 例子：</span></p><div bg_sql"="" style="width: 692px; color: #362e2b; line-height: 25px; text-align: left; "><div><div><strong>[sql]</strong>&nbsp;<a href="http://blog.csdn.net/linwaterbin/article/details/7817162#" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/linwaterbin/article/details/7817162#" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 582px; top: 1727px; width: 17px; height: 17px; z-index: 99; border-image: initial; "><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="17" height="17" name="ZeroClipboardMovie_1" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=17&amp;height=17" wmode="transparent" style="-webkit-animation-duration: 0.001s; -webkit-animation-name: nodeInserted; "></div></div></div><ol start="1"><li style="border-width: initial; border-color: initial; line-height: 20px; ">SELECT&nbsp;(<span style="color: #ff1493; ">CASE</span>&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;0&nbsp;<span style="color: #808080; ">AND</span>&nbsp;3999&nbsp;THEN&nbsp;&nbsp;'&nbsp;0&nbsp;-&nbsp;3999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;4000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;7999&nbsp;THEN&nbsp;'&nbsp;4000&nbsp;-&nbsp;7999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;8000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;11999&nbsp;THEN&nbsp;&nbsp;'&nbsp;8000&nbsp;-&nbsp;11999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;12000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;16000&nbsp;THEN&nbsp;'12000&nbsp;-&nbsp;16000'&nbsp;END)&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;AS&nbsp;BUCKET,&nbsp;<span style="color: #ff1493; ">COUNT</span>(*)&nbsp;AS&nbsp;Count_in_Group&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">FROM&nbsp;customers&nbsp;WHERE&nbsp;cust_city&nbsp;=&nbsp;'Marshal'&nbsp;GROUP&nbsp;BY&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;(<span style="color: #ff1493; ">CASE</span>&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;0&nbsp;<span style="color: #808080; ">AND</span>&nbsp;3999&nbsp;THEN&nbsp;'&nbsp;0&nbsp;-&nbsp;3999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;4000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;7999&nbsp;THEN&nbsp;'&nbsp;4000&nbsp;-&nbsp;7999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;8000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;11999&nbsp;THEN&nbsp;&nbsp;'&nbsp;8000&nbsp;-&nbsp;11999'&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;WHEN&nbsp;cust_credit_limit&nbsp;<span style="color: #808080; ">BETWEEN</span>&nbsp;&nbsp;12000&nbsp;<span style="color: #808080; ">AND</span>&nbsp;16000&nbsp;THEN&nbsp;'12000&nbsp;-&nbsp;16000'&nbsp;END);&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">BUCKET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT_IN_GROUP&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">-------------&nbsp;--------------&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;0&nbsp;-&nbsp;3999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;4000&nbsp;-&nbsp;7999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;8000&nbsp;-&nbsp;11999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">12000&nbsp;-&nbsp;16000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;</li></ol></div><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 用decode可以违反第3NF（行不可再分，列不可再分，列不可重复）：列重复</p><div bg_sql"="" style="width: 692px; color: #362e2b; line-height: 25px; text-align: left; "><div><div><strong>[sql]</strong>&nbsp;<a href="http://blog.csdn.net/linwaterbin/article/details/7817162#" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/linwaterbin/article/details/7817162#" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 582px; top: 2161px; width: 17px; height: 17px; z-index: 99; border-image: initial; "><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="17" height="17" name="ZeroClipboardMovie_2" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=17&amp;height=17" wmode="transparent" style="-webkit-animation-duration: 0.001s; -webkit-animation-name: nodeInserted; "></div></div></div><ol start="1"><li style="border-width: initial; border-color: initial; line-height: 20px; ">hr@ORCL&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;a;&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;NAME&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">----------&nbsp;----------&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;a&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;b&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;c&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;a&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">hr@ORCL&gt;&nbsp;select&nbsp;<span style="color: #ff1493; ">sum</span>(decode(id,1,1,0))&nbsp;think,&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff1493; ">sum</span>(decode(id,2,2,0))&nbsp;water,&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff1493; ">sum</span>(decode(id,3,3,0))&nbsp;linshuibin&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;a;&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THINK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WATER&nbsp;LINSHUIBIN&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">----------&nbsp;----------&nbsp;----------&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;</li></ol></div><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 一个字段，decode函数可以完全改写简单case；</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 多个字段，需要复杂的case，方可。</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 语法：<br />&nbsp;&nbsp;&nbsp; DECODE(value,if1,then1,if2,then2,if3,then3,...,else)，表示如果value等于if1时，DECODE函数的</span><span style="font-size: 18px; ">结果返then1,...,如果不等于任何一个if值，则返回else。可以用函数或表达式来替代value，if，</span><span style="font-size: 18px; ">then，else从而作出一些更有用的比较。</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; 来看看具体的运用：<br />&nbsp;&nbsp;&nbsp; 1 假设我们想给百度职员加工资，其标准是：工资在8000元以下的将加20％；工资在8000元以上的加</span><span style="font-size: 18px; ">15％<br />&nbsp;&nbsp;&nbsp; 则：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary)&nbsp;"revised_salary"&nbsp;from employee</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp; &nbsp;2 表table_subject，有subject_name列。要求按照：语、数、外的顺序进行排序<br />&nbsp;&nbsp;&nbsp; 则：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp; select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3)</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000; ">decode和简单case的性能比较</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; color: #ff0000; ">&nbsp;&nbsp;&nbsp;</span></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><span style="font-family: 宋体; ">Oracle</span><span style="font-family: 宋体; ">的DECODE函数功能很强，灵活运用的话可以避免多次扫描，从而提高查询的性能。而CASE是9i以后提供的语法，这个语法更加的灵活，提供了IF THEN ELSE的功能。</span></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><br /></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><span style="font-family: 宋体; ">对于很多情况，DECODE和CASE都能解决问题，个人更倾向于使用DECODE，一方面是从8i保留下来的习惯，另一方面是DECODE的语法更加的简洁，代码量要小一些。</span></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><span style="font-family: 宋体; ">不过今天在看Oracle9i的数据仓库手册时发现，Oracle在文档中提到CASE语句的效率会更高一些，尤其是CASE表达式&nbsp;WHEN&nbsp;常量&nbsp;THEN的语法，效率要比CASE WHEN表达式&nbsp;THEN的语法更高一些。对于后面这种说法倒是没有太多的疑问，对于CASE比DECODE效率高这种说法倒是第一次看到，印象中DECODE效率很高，应该不会比CASE的效率差。</span></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><span style="font-family: 宋体; ">到底效率如何，还是要具体的实例来说：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">SQL&gt; CREATE TABLE T AS<br />2 SELECT A.*<br />3 FROM DBA_OBJECTS A, DBA_MVIEWS;</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Table created.</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">SQL&gt; SELECT COUNT(*) FROM T;</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">COUNT(*)<br />----------<br />6075760</span></span></p><p "="" style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; text-indent: 21pt; "><span style="font-family: 宋体; ">下面检查DECODE和两种CASE语句的效率：</span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">SQL&gt; SET ARRAY 1000<br />SQL&gt; SET TIMING ON<br />SQL&gt; SET AUTOT TRACE&nbsp;<br />SQL&gt; SELECT DECODE(OWNER, 'SYSTEM', 'SYSTEM', 'SYS', 'SYSTEM', 'USER')&nbsp;<br />2 FROM T;</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">6075760 rows selected.</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Elapsed: 00:00:07.24</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Execution Plan<br />----------------------------------------------------------<br />Plan hash value: 1601196873</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">--------------------------------------------------------------------------<br />| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |<br />--------------------------------------------------------------------------<br />| 0 | SELECT STATEMENT | | 4245K| 68M| 13828 (1)| 00:03:14 |<br />| 1 | TABLE ACCESS FULL| T | 4245K| 68M| 13828 (1)| 00:03:14 |<br />--------------------------------------------------------------------------</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Note<br />-----<br />- dynamic sampling used for this statement</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><br /><span style="font-family: 宋体; ">Statistics<br />----------------------------------------------------------<br />0 recursive calls<br />0 db block gets<br />47551 consistent gets<br />0 physical reads<br />0 redo size<br />46288564 bytes sent via SQL*Net to client<br />67317 bytes received via SQL*Net from client<br />6077 SQL*Net roundtrips to/from client<br />0 sorts (memory)<br />0 sorts (disk)<br />6075760 rows processed</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">SQL&gt; SELECT CASE OWNER WHEN 'SYSTEM' THEN 'SYSTEM'<br />2 WHEN 'SYS' THEN 'SYSTEM'&nbsp;<br />3 ELSE 'USER' END&nbsp;<br />4 FROM T;</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">6075760 rows selected.</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Elapsed: 00:00:07.22</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Execution Plan<br />----------------------------------------------------------<br />Plan hash value: 1601196873</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">--------------------------------------------------------------------------<br />| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |<br />--------------------------------------------------------------------------<br />| 0 | SELECT STATEMENT | | 4245K| 68M| 13828 (1)| 00:03:14 |<br />| 1 | TABLE ACCESS FULL| T | 4245K| 68M| 13828 (1)| 00:03:14 |<br />--------------------------------------------------------------------------</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Note<br />-----<br />- dynamic sampling used for this statement</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><br /><span style="font-family: 宋体; ">Statistics<br />----------------------------------------------------------<br />0 recursive calls<br />0 db block gets<br />47551 consistent gets<br />0 physical reads<br />0 redo size<br />46288578 bytes sent via SQL*Net to client<br />67317 bytes received via SQL*Net from client<br />6077 SQL*Net roundtrips to/from client<br />0 sorts (memory)<br />0 sorts (disk)<br />6075760 rows processed</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">SQL&gt; SELECT CASE WHEN OWNER = 'SYSTEM' THEN 'SYSTEM'<br />2 WHEN OWNER = 'SYS' THEN 'SYSTEM'&nbsp;<br />3 ELSE 'USER' END&nbsp;<br />4 FROM T;</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">6075760 rows selected.</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Elapsed: 00:00:07.23</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Execution Plan<br />----------------------------------------------------------<br />Plan hash value: 1601196873</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">--------------------------------------------------------------------------<br />| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |<br />--------------------------------------------------------------------------<br />| 0 | SELECT STATEMENT | | 4245K| 68M| 13828 (1)| 00:03:14 |<br />| 1 | TABLE ACCESS FULL| T | 4245K| 68M| 13828 (1)| 00:03:14 |<br />--------------------------------------------------------------------------</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><span style="font-family: 宋体; ">Note<br />-----<br />- dynamic sampling used for this statement</span></span></p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 9pt; "><br /><span style="font-family: 宋体; ">Statistics<br />----------------------------------------------------------<br />0 recursive calls<br />0 db block gets<br />47551 consistent gets<br />0 physical reads<br />0 redo size<br />46288585 bytes sent via SQL*Net to client<br />67317 bytes received via SQL*Net from client<br />6077 SQL*Net roundtrips to/from client<br />0 sorts (memory)<br />0 sorts (disk)<br />6075760 rows processed</span></span></p><img src ="http://www.blogjava.net/guiying/aggbug/384562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-08-01 22:09 <a href="http://www.blogjava.net/guiying/archive/2012/08/01/384562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库之查询核心</title><link>http://www.blogjava.net/guiying/archive/2012/07/27/384207.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Fri, 27 Jul 2012 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/07/27/384207.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/384207.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/07/27/384207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/384207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/384207.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">&nbsp;我们在学习数据库的时候经常用到数据库的查询语句，它的重要性可想而知，下面我就来分析一下吧。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><div bg_sql"="" style="width: 1097px; line-height: 25px; text-align: left; "><div><div><strong>[sql]</strong>&nbsp;<a href="http://blog.csdn.net/liutengteng130/article/details/7790726#" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/liutengteng130/article/details/7790726#" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 375px; top: 515px; width: 17px; height: 17px; z-index: 99; border-image: initial; "><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="17" height="17" name="ZeroClipboardMovie_1" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=17&amp;height=17" wmode="transparent"></div></div></div><ol start="1"><li style="border-width: initial; border-color: initial; line-height: 20px; ">txtSQL&nbsp;=&nbsp;"select*from&nbsp;student_Info&nbsp;where&nbsp;student_ID='"&nbsp;&amp;&nbsp;Trim(txtSID.Text)&nbsp;&amp;&nbsp;"'"&nbsp;&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">&nbsp;&nbsp;</li><li style="border-width: initial; border-color: initial; line-height: 20px; ">Set&nbsp;mrc&nbsp;=&nbsp;executeSQL(txtSQL,&nbsp;MsgText)&nbsp;&nbsp;</li></ol></div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">select * from student_Info 这句是查询表</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">student_Info where student_ID = '" &amp; Trim(txtSID.Text) &amp; "'" 这句是筛选条件 其中Trim（）是去前后空格，txtSID.Text这个控件上输入的值。</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">student_ID等于你控件上输入的值。</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">ExecuteSQL(txtSQL, MsgText) 很明显是执行SQL。&nbsp;</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">ExecuteSQL</span><span style="font-family: Calibri; "><span style="font-size: 18px; ">是自定义函数。</span></span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">传递参数SQL传递查询语句，MsgString传递查询信息。自身以一个数据集对象的形式返回 。</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;<span style="font-size: 18px; ">一定是执行SQL语句，里面的两个参数 txtSQL 是指 用来执行的SQL语句 比如：elect * from 表</span></p><p dir="ltr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">MsgText参数 指的是实行完SQL语句后的弹出框 是成功了还是失败了之类的<br /></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">第一句的意思就是：查询学生信息表，筛选出学生<span style="font-family: Calibri; ">ID</span>号为<span style="font-family: Calibri; ">txtSID.Text</span>的学生。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">第二句的意思是：执行<span style="font-family: Calibri; ">sql</span>语句，并把<span style="font-family: Calibri; ">MsgText</span>作为参数传递进去，返回一个<span style="font-family: Calibri; ">set</span>类型的数据。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">举列：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>假如我把我们班的所有的同学排成一列，站在第一位的号码是<span style="font-family: Calibri; ">1</span>，排在<span style="font-family: Calibri; ">1</span>后面的号码为<span style="font-family: Calibri; ">2</span>，以此类推。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">第一句<span style="font-family: Calibri; ">sql</span>的意思就是：我现在找到一个同学李四，然后告诉他让他把号码是<span style="font-family: Calibri; ">5</span>的同学给找出来。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">那么这个同学就会从<span style="font-family: Calibri; ">1</span>数到<span style="font-family: Calibri; ">5</span>，就把号码是<span style="font-family: Calibri; ">5</span>的同学给找了出来。<span style="font-family: Calibri; ">txtSQL</span>就相当于李四。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">但是数据库的<span style="font-family: Calibri; ">sql</span>查询时通过索引查询的，在数据库中不是通过<span style="font-family: Calibri; ">1,2,3,4,5</span>数到<span style="font-family: Calibri; ">5</span>才找到的。而是通过索引直接找到的。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">举例：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; "><span style="font-family: Calibri; ">&nbsp;&nbsp;&nbsp;&nbsp;</span>我找的这个同学手里会有一个名单，每个名字前都有学号。直接叫学号对应的名字，这个人就被找到了。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">这个学号就相当于索引。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">我要从<span style="font-family: Calibri; ">student_info</span>里面找人，但是，这个人的<span style="font-family: Calibri; ">ID</span>必须是<span style="font-family: Calibri; ">txtSID.Text</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: 18px; ">例如：我从<span style="font-family: Calibri; ">5</span>年级<span style="font-family: Calibri; ">1</span>班的<span style="font-family: Calibri; ">86</span>个人中找人，我只找一个，这个人的名字叫张三（<span style="font-family: Calibri; ">txtSID.Text</span>）</span></p><img src ="http://www.blogjava.net/guiying/aggbug/384207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-07-27 22:26 <a href="http://www.blogjava.net/guiying/archive/2012/07/27/384207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多两个“0”带来的思考</title><link>http://www.blogjava.net/guiying/archive/2012/07/27/384205.html</link><dc:creator>手心上的冰山</dc:creator><author>手心上的冰山</author><pubDate>Fri, 27 Jul 2012 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/guiying/archive/2012/07/27/384205.html</guid><wfw:comment>http://www.blogjava.net/guiying/comments/384205.html</wfw:comment><comments>http://www.blogjava.net/guiying/archive/2012/07/27/384205.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/guiying/comments/commentRss/384205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guiying/services/trackbacks/384205.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: KaiTi_GB2312; font-size: 17px; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;在做学生管理系统中，由于并不太理解函数的意思，前几天就在程序的后面多写了两个0</span>&nbsp;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">span&nbsp;</span><span style="color: #FF0000; ">style</span><span style="color: #0000FF; ">="font-family:KaiTi_GB2312;font-size:18px;"</span><span style="color: #0000FF; ">&gt;</span>Private&nbsp;Sub&nbsp;MDIForm_Load()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'从注册表中取得上次关闭MDIForm时的大小<br />&nbsp;&nbsp;&nbsp;&nbsp;Me.Left&nbsp;=&nbsp;GetSetting(App.Title,&nbsp;"Settings",&nbsp;"MainLeft",&nbsp;30000)<br />&nbsp;&nbsp;&nbsp;&nbsp;Me.Top&nbsp;=&nbsp;GetSetting(App.Title,&nbsp;"Settings",&nbsp;"MainTop",&nbsp;30000)<br />&nbsp;&nbsp;&nbsp;&nbsp;Me.Width&nbsp;=&nbsp;GetSetting(App.Title,&nbsp;"Settings",&nbsp;"MainWidth",&nbsp;80000)<br />&nbsp;&nbsp;&nbsp;&nbsp;Me.Height&nbsp;=&nbsp;GetSetting(App.Title,&nbsp;"Settings",&nbsp;"MainHeight",&nbsp;80000)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />End&nbsp;Sub<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">span</span><span style="color: #0000FF; ">&gt;<br /></span><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; font-size: 18px; ">&nbsp; 当时并没有做任何记录，异地访问的过程当中，数据库能连上是没有任何问题，但是就是加载的登录界面就消失了，没有任何反应、提示错误之类的，后来在师傅的指导下，才发现这个问题，是由于多了两个0，是窗体的大小不能显示出来了，超出了屏幕的显示范围。我还以为真的消失了呢？</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; "><span style="font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<strong>发现自己的问题：第一：没有及时的记录</strong></span></span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; font-size: 18px; "><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二：没有遵循严格的编程标准</strong></span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; font-size: 18px; "><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三：没有及时的学习相关的知识</strong></span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><strong><span style="font-family: KaiTi_GB2312; font-size: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第四：思考的还是太少，考虑不全，&#8220;为人民服务的宗旨&#8221;落实的不好</span></strong></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; font-size: 18px; ">&nbsp;&nbsp;&nbsp; 随后进行了相关知识的学习<br /></span></p><pre id="best-answer-content" class="reply-text mb10" name="code" style="white-space: pre-wrap; word-wrap: break-word; color: #333333; font-size: 14px; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: KaiTi_GB2312; font-size: 18px; ">VB之savesetting|GetSetting用法（保存与索取数据）
VB 中提供了用于访问注册表的方法

GetSetting 函数, 从 Windows 注册表中的应用程序项目返回注册表项设置值。SaveSetting 语句, 在 Windows 注册表中保存或建立应用程序项目。

DeleteSetting 语句, 在 Windows 注册表中，从应用程序项目里删除区域或注册表项设置。

GetAllSettings 函数, 从 Windows 注册表中返回应用程序项目的所有注册表项设置及其相应值（开始是由 SaveSetting 产生）。

诸如窗口位置、使用的文件以及其它项目等程序设置值是存储在各种 .ini 文件中。在 Windows NT、Windows 95 以及 Windows 的较新版本中，这些程序设置值则是存储在系统注册位置中。

Visual Basic 提供了一个标准的注册位置以存储创建于 Visual Basic 的应用程序的程序信息：

HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section\key

<strong>    GetSetting 函数</strong> 从 Windows 注册表中的应用程序项目返回注册表项设置值。语法GetSetting(appname, section, key[, default])GetSetting 函数的语法具有下列命名参数：部分描述appname必要。字符串表达式，包含应用程序或工程的名称，要求这些应用程序或工程有注册表项设置。section必要。字符串表达式，包含区域名称，要求该区域有注册表项设置。key必要。字符串表达式，返回注册表项设置的名称。default可选。表达式，如果注册表项设置中没有设置值，则返回缺省值。如果省略，则 default 取值为长度为零的字符串 ("")。说明如果 GetSetting 的参数中的任何一项都不存在，则 GetSetting 返回 default 的值。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　该方法其实读取，注册表中HKEY_CURRENT_USER\Software\VB and VBA Program Settings下相应的值。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－ </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　语法 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　<strong>GetSetting</strong>(appname, section, key[, default]) </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　GetSetting 函数的语法具有下列命名参数： </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　部分 描述 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　appname 必要。字符串表达式，包含应用程序或工程的名称，要求这些应用程序或工程有注册表项设置。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　section 必要。字符串表达式，包含区域名称，要求该区域有注册表项设置。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　key 必要。字符串表达式，返回注册表项设置的名称。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　default 可选。表达式，如果注册表项设置中没有设置值，则返回缺省值。如果省略，则 default 取值为长度为零的字符串 ("")。 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　说明 </span><div class="spctrl"></div><span style="font-family: KaiTi_GB2312; font-size: 18px; ">　　如果 GetSetting 的参数中的任何一项都不存在，则 GetSetting 返回 default 的值。</span></pre><span style="color: #0000FF; "><br /></span></div><img src ="http://www.blogjava.net/guiying/aggbug/384205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guiying/" target="_blank">手心上的冰山</a> 2012-07-27 22:23 <a href="http://www.blogjava.net/guiying/archive/2012/07/27/384205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>