﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-因爱而生</title><link>http://www.blogjava.net/zhukuanglong/</link><description>矿矿 的编程生活</description><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 16:20:20 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 16:20:20 GMT</pubDate><ttl>60</ttl><item><title>巧用ps提高求职成功率[转]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241891.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 21 Nov 2008 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241891.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/241891.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241891.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/241891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/241891.html</trackback:ping><description><![CDATA[&#8220;补充说明&#8221;通常是在求职简历的结束部分，可以填写，也可以空着。不过，如果能够善于利用它，求职成功率将会大大提高。毕竟，作为求职简历的最后部分，它是表现自我的最后机会。 <span><br />
<br />
</span>　　在&#8220;补充说明&#8221;中填写的最佳信息因人而异，这取决于求职者的职业目标和背景。请记住，求职简历是自我营销的手段，其中的信息应当有助于向用人单位推销自己，以实现自己的职业目标。可以这样考虑问题：如果这是向潜在的用人单位推销自己的最会机会，你会说些什么？ <span><br />
<br />
</span>　　以下是一些填写&#8220;补充说明&#8221;的思路，供大家参考： <span><br />
<br />
</span>　　<strong>能力或业绩总结</strong> <span><br />
<br />
</span>　　在补充说明对自己的能力和职业生涯进行总结。在能力或业绩总结中要突出自己主要的&#8220;卖点&#8221;和成功案例——这一切都应当与你想要应聘的职位有关系。 <br />
<br />
　　<strong>获奖情况</strong> <span><br />
<br />
</span>　　用列举自己的获奖情况作为求职简历的结束，会给用人单位留下深刻印象。 <span><br />
<br />
</span>　　<strong>证明书或推荐信</strong> <span><br />
<br />
</span>　　你是否收到过对于你的工作情况表示满意的推荐信或业绩评估证明？如果有，可以摘选其中的精采部分作为&#8220;补充说明&#8221;。 <span><br />
<br />
</span>　　<strong>发表作品</strong> <span><br />
<br />
</span>　　如果在报刊、杂志上发表过作品，可以考虑在&#8220;补充说明&#8221;里罗列出来。 <span><br />
<br />
</span>　　<strong>专利 </strong><span><br />
<br />
</span>　　如果拥有专利（包括正在申请的），请在&#8220;补充说明&#8221;中列出。 <span><br />
<br />
</span>　　<strong>演讲能力</strong> <span><br />
<br />
</span>　　许多职位要有演讲能力才能胜任。列举自己参加过的演讲、主题发言会给用人单位留下好印象。 <span><br />
<br />
</span>　　<strong>计算机运用技能</strong> <span><br />
<br />
</span>　　在&#8220;补充说明&#8221;中列举自己在计算机操作系统、网络和硬件等方面的技能，多多益善。 <span><br />
<br />
</span>　　<strong><span><span>培训</span></span>情况</strong> <span><br />
<br />
</span>　　在&#8220;补充说明&#8221;中列出自己参加过的专业<span><span>培训</span></span>和继续教育。 <span><br />
<br />
</span>　　<strong>再次强调工作地点</strong> <span><br />
<br />
</span>　　在&#8220;补充说明&#8221;中再次强调工作地点不失为结束求职简历的好办法。 <span><br />
<br />
</span>　　<strong>说明自己愿意出差</strong> <span><br />
<br />
</span>　　如果愿意出差，可以在补充说明中加以说明，用人单位或许会因为这一点而看上你。 <span><br />
<br />
</span>　　<strong>应该省略的内容</strong> <span><br />
<br />
</span>　　补充说明不要涉及婚姻状况、年龄、有多少个孩子等情况，如果兴趣爱好与工作无关，最好也不要提及。<br />
<br />
&nbsp;来源:<a href="http://content.chinahr.com/" target="_blank">中华英才网</a>&nbsp;
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/241891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-11-21 20:01 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式元字符列表</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241888.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 21 Nov 2008 11:35:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241888.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/241888.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/241888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/241888.html</trackback:ping><description><![CDATA[<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; background: rgb(255,255,255); margin-bottom: 7.5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">下表是元字符及其在正则表达式上下文中的行为的一个完整列表：</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">字符&nbsp;描述</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如，'n'&nbsp;匹配字符&nbsp;"n"。'\n'&nbsp;匹配一个换行符。序列&nbsp;'\'&nbsp;匹配&nbsp;""&nbsp;而&nbsp;"\("&nbsp;则匹配&nbsp;"("。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配输入字符串的开始位置。如果设置了&nbsp;RegExp&nbsp;对象的&nbsp;Multiline&nbsp;属性，^&nbsp;也匹配&nbsp;'\n'&nbsp;或&nbsp;'\r'&nbsp;之后的位置。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">$</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配输入字符串的结束位置。如果设置了RegExp&nbsp;对象的&nbsp;Multiline&nbsp;属性，$&nbsp;也匹配&nbsp;'\n'&nbsp;或&nbsp;'\r'&nbsp;之前的位置。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">*</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配前面的子表达式零次或多次。例如，zo*&nbsp;能匹配&nbsp;"z"&nbsp;以及&nbsp;"zoo"。&nbsp;*&nbsp;等价于{0,}。[/size]</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">+</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配前面的子表达式一次或多次。例如，'zo+'&nbsp;能匹配&nbsp;"zo"&nbsp;以及&nbsp;"zoo"，但不能匹配&nbsp;"z"。+&nbsp;等价于&nbsp;{1,}。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">?</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配前面的子表达式零次或一次。例如，"do(es)?"&nbsp;可以匹配&nbsp;"do"&nbsp;或&nbsp;"does"&nbsp;中的"do"&nbsp;。?&nbsp;等价于&nbsp;{0,1}。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{n}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">n&nbsp;<font face="宋体">是一个非负整数。匹配确定的&nbsp;n&nbsp;次。例如，'o{2}'&nbsp;不能匹配&nbsp;"Bob"&nbsp;中的&nbsp;'o'，但是能匹配&nbsp;"food"&nbsp;中的两个&nbsp;o。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{n,}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">n&nbsp;<font face="宋体">是一个非负整数。至少匹配n&nbsp;次。例如，'o{2,}'&nbsp;不能匹配&nbsp;"Bob"&nbsp;中的&nbsp;'o'，但能匹配&nbsp;"foooood"&nbsp;中的所有&nbsp;o。'o{1,}'&nbsp;等价于&nbsp;'o+'。'o{0,}'&nbsp;则等价于&nbsp;'o*'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{n,m}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">m&nbsp;<font face="宋体">和&nbsp;n&nbsp;均为非负整数，其中n&nbsp;&lt;=&nbsp;m。最少匹配&nbsp;n&nbsp;次且最多匹配&nbsp;m&nbsp;次。刘，&nbsp;"o{1,3}"&nbsp;将匹配&nbsp;"fooooood"&nbsp;中的前三个&nbsp;o。'o{0,1}'&nbsp;等价于&nbsp;'o?'。请注意在逗号和两个数之间不能有空格。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">?</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">当该字符紧跟在任何一个其他限制符&nbsp;(*,&nbsp;+,&nbsp;?,&nbsp;{n},&nbsp;{n,},&nbsp;{n,m})&nbsp;后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串&nbsp;"oooo"，'o+?'&nbsp;将匹配单个&nbsp;"o"，而&nbsp;'o+'&nbsp;将匹配所有&nbsp;'o'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">.</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配除&nbsp;"\n"&nbsp;之外的任何单个字符。要匹配包括&nbsp;'\n'&nbsp;在内的任何字符，请使用象&nbsp;'[.\n]'&nbsp;的模式。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(pattern)</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配pattern&nbsp;并获取这一匹配。所获取的匹配可以从产生的&nbsp;Matches&nbsp;集合得到，在VBScript&nbsp;中使用&nbsp;SubMatches&nbsp;集合，在JScript&nbsp;中则使用&nbsp;{CONTENT}&#8230;&nbsp;属性。要匹配圆括号字符，请使用&nbsp;'\('&nbsp;或&nbsp;'\)'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(?:pattern)</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配&nbsp;pattern&nbsp;但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用&nbsp;"或"&nbsp;字符&nbsp;(|)&nbsp;来组合一个模式的各个部分是很有用。例如，&nbsp;'industr(?:y|ies)&nbsp;就是一个比&nbsp;'industry|industries'&nbsp;更简略的表达式。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(?=pattern)</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">正向预查，在任何匹配&nbsp;pattern&nbsp;的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，&nbsp;'Windows&nbsp;(?=95|98|NT|2000)'&nbsp;能匹配&nbsp;"Windows&nbsp;2000"&nbsp;中的&nbsp;"Windows"&nbsp;，但不能匹配&nbsp;"Windows&nbsp;3.1"&nbsp;中的&nbsp;"Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(?!pattern)</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">负向预查，在任何不匹配Negative&nbsp;lookahead&nbsp;matches&nbsp;the&nbsp;search&nbsp;string&nbsp;at&nbsp;any&nbsp;point&nbsp;where&nbsp;a&nbsp;string&nbsp;not&nbsp;matching&nbsp;pattern&nbsp;的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows&nbsp;(?!95|98|NT|2000)'&nbsp;能匹配&nbsp;"Windows&nbsp;3.1"&nbsp;中的&nbsp;"Windows"，但不能匹配&nbsp;"Windows&nbsp;2000"&nbsp;中的&nbsp;"Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">x|y</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配&nbsp;x&nbsp;或&nbsp;y。例如，'z|food'&nbsp;能匹配&nbsp;"z"&nbsp;或&nbsp;"food"。'(z|f)ood'&nbsp;则匹配&nbsp;"zood"&nbsp;或&nbsp;"food"。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">[xyz]</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">字符集合。匹配所包含的任意一个字符。例如，&nbsp;'[abc]'&nbsp;可以匹配&nbsp;"plain"&nbsp;中的&nbsp;'a'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">[^xyz]</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">负值字符集合。匹配未包含的任意字符。例如，&nbsp;'[^abc]'&nbsp;可以匹配&nbsp;"plain"&nbsp;中的'p'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">[a-z]</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">字符范围。匹配指定范围内的任意字符。例如，'[a-z]'&nbsp;可以匹配&nbsp;'a'&nbsp;到&nbsp;'z'&nbsp;范围内的任意小写字母字符。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">[^a-z]</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]'&nbsp;可以匹配任何不在&nbsp;'a'&nbsp;到&nbsp;'z'&nbsp;范围内的任意字符。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\b</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个单词边界，也就是指单词和空格间的位置。例如，&nbsp;'er\b'&nbsp;可以匹配"never"&nbsp;中的&nbsp;'er'，但不能匹配&nbsp;"verb"&nbsp;中的&nbsp;'er'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\B</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配非单词边界。'er\B'&nbsp;能匹配&nbsp;"verb"&nbsp;中的&nbsp;'er'，但不能匹配&nbsp;"never"&nbsp;中的&nbsp;'er'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\cx</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配由x指明的控制字符。例如，&nbsp;\cM&nbsp;匹配一个&nbsp;Control-M&nbsp;或回车符。&nbsp;x&nbsp;的值必须为&nbsp;A-Z&nbsp;或&nbsp;a-z&nbsp;之一。否则，将&nbsp;c&nbsp;视为一个原义的&nbsp;'c'&nbsp;字符。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\d</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个数字字符。等价于&nbsp;[0-9]。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\D</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个非数字字符。等价于&nbsp;[^0-9]。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\f</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个换页符。等价于&nbsp;\x0c&nbsp;和&nbsp;\cL。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\n</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个换行符。等价于&nbsp;\x0a&nbsp;和&nbsp;\cJ。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\r</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个回车符。等价于&nbsp;\x0d&nbsp;和&nbsp;\cM。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\s</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配任何空白字符，包括空格、制表符、换页符等等。等价于&nbsp;[&nbsp;\f\n\r\t\v]。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\S</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配任何非空白字符。等价于&nbsp;[^&nbsp;\f\n\r\t\v]。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\t</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个制表符。等价于&nbsp;\x09&nbsp;和&nbsp;\cI。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\v</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配一个垂直制表符。等价于&nbsp;\x0b&nbsp;和&nbsp;\cK。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\w</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\W</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配任何非单词字符。等价于&nbsp;'[^A-Za-z0-9_]'。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\xn</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配&nbsp;n，其中&nbsp;n&nbsp;为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，&nbsp;'\x41'&nbsp;匹配&nbsp;"A"。'\x041'&nbsp;则等价于&nbsp;'\x04'&nbsp;&amp;&nbsp;"1"。正则表达式中可以使用&nbsp;ASCII&nbsp;编码。.</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\num</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配&nbsp;num，其中&nbsp;num&nbsp;是一个正整数。对所获取的匹配的引用。例如，'(.)'&nbsp;匹配两个连续的相同字符。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\n</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">标识一个八进制转义值或一个后向引用。如果&nbsp;\n&nbsp;之前至少&nbsp;n&nbsp;个获取的子表达式，则&nbsp;n&nbsp;为后向引用。否则，如果&nbsp;n&nbsp;为八进制数字&nbsp;(0-7)，则&nbsp;n&nbsp;为一个八进制转义值。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\nm</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">标识一个八进制转义值或一个后向引用。如果&nbsp;\nm&nbsp;之前至少有is&nbsp;preceded&nbsp;by&nbsp;at&nbsp;least&nbsp;nm&nbsp;个获取得子表达式，则&nbsp;nm&nbsp;为后向引用。如果&nbsp;\nm&nbsp;之前至少有&nbsp;n&nbsp;个获取，则&nbsp;n&nbsp;为一个后跟文字&nbsp;m&nbsp;的后向引用。如果前面的条件都不满足，若&nbsp;n&nbsp;和&nbsp;m&nbsp;均为八进制数字&nbsp;(0-7)，则&nbsp;\nm&nbsp;将匹配八进制转义值&nbsp;nm。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\nml</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">如果&nbsp;n&nbsp;为八进制数字&nbsp;(0-3)，且&nbsp;m&nbsp;和&nbsp;l&nbsp;均为八进制数字&nbsp;(0-7)，则匹配八进制转义值&nbsp;nml。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">\un</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配&nbsp;n，其中&nbsp;n&nbsp;是一个用四个十六进制数字表示的&nbsp;Unicode&nbsp;字符。例如，\u00A9&nbsp;匹配版权符号&nbsp;(?)。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<!--endfragment-->
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/241888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-11-21 19:35 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用正则表达式</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241814.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 21 Nov 2008 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241814.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/241814.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241814.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/241814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/241814.html</trackback:ping><description><![CDATA[<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; background: rgb(255,255,255); margin-bottom: 7.5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配中文字符的正则表达式：&nbsp;[u4e00-u9fa5]</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：匹配中文还真是个头疼的事，有了这个表达式就好办了</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配双字节字符(包括汉字在内)：[^x00-xff]</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配空白行的正则表达式：ns*r</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：可以用来删除空白行</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配HTML标记的正则表达式：&lt;(S*?)[^&gt;]*&gt;.*?|&lt;.*?&nbsp;/&gt;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配首尾空白字符的正则表达式：^s*|s*$</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：表单验证时很实用</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配网址URL的正则表达式：[a-zA-z]+://[^s]*</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：网上流传的版本功能很有限，上面这个基本可以满足需求</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：表单验证时很实用</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配国内电话号码：d{3}-d{8}|d{4}-d{7}</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：匹配形式如&nbsp;0511-4405222&nbsp;或&nbsp;021-87888822</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配腾讯QQ号：[1-9][0-9]{4,}</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：腾讯QQ号从10000开始</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配中国邮政编码：[1-9]d{5}(?!d)</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：中国邮政编码为6位数字</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配身份证：d{15}|d{18}</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：中国的身份证为15位或18位</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配ip地址：d+.d+.d+.d+</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：提取ip地址时有用</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配特定数字：</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[1-9]d*$<font face="宋体">　&nbsp;　&nbsp;//匹配正整数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^-[1-9]d*$&nbsp;<font face="宋体">　&nbsp;//匹配负整数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^-?[1-9]d*$<font face="宋体">　　&nbsp;//匹配整数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[1-9]d*|0$<font face="宋体">　&nbsp;//匹配非负整数（正整数&nbsp;+&nbsp;0）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^-[1-9]d*|0$<font face="宋体">　　&nbsp;//匹配非正整数（负整数&nbsp;+&nbsp;0）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[1-9]d*.d*|0.d*[1-9]d*$<font face="宋体">　　&nbsp;//匹配正浮点数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^-([1-9]d*.d*|0.d*[1-9]d*)$<font face="宋体">　&nbsp;//匹配负浮点数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$<font face="宋体">　&nbsp;//匹配浮点数</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$<font face="宋体">　　&nbsp;//匹配非负浮点数（正浮点数&nbsp;+&nbsp;0）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$<font face="宋体">　　//匹配非正浮点数（负浮点数&nbsp;+&nbsp;0）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">评注：处理大量数据时有用，具体应用时注意修正</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配特定字符串：</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[A-Za-z]+$<font face="宋体">　　//匹配由26个英文字母组成的字符串</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[A-Z]+$<font face="宋体">　　//匹配由26个英文字母的大写组成的字符串</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[a-z]+$<font face="宋体">　　//匹配由26个英文字母的小写组成的字符串</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^[A-Za-z0-9]+$<font face="宋体">　　//匹配由数字和26个英文字母组成的字符串</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">^w+$<font face="宋体">　　//匹配由数字、26个英文字母或者下划线组成的字符串</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入数字：&#8220;^[0-9]*$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入n位的数字：&#8220;^d{n}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入至少n位数字：&#8220;^d{n,}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入m-n位的数字：&#8220;^d{m,n}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入零和非零开头的数字：&#8220;^(0|[1-9][0-9]*)$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入有两位小数的正实数：&#8220;^[0-9]+(.[0-9]{2})?$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入有1-3位小数的正实数：&#8220;^[0-9]+(.[0-9]{1,3})?$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入非零的正整数：&#8220;^+?[1-9][0-9]*$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入非零的负整数：&#8220;^-[1-9][0-9]*$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入长度为3的字符：&#8220;^.{3}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入由26个英文字母组成的字符串：&#8220;^[A-Za-z]+$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入由26个大写英文字母组成的字符串：&#8220;^[A-Z]+$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入由26个小写英文字母组成的字符串：&#8220;^[a-z]+$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入由数字和26个英文字母组成的字符串：&#8220;^[A-Za-z0-9]+$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入由数字、26个英文字母或者下划线组成的字符串：&#8220;^w+$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证用户密码:&#8220;^[a-zA-Z]w{5,17}$&#8221;正确格式为：以字母开头，长度在6-18之间，</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能包含字符、数字和下划线。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证是否含有^%&amp;',;=?$"等字符：&#8220;[^%&amp;',;=?$x22]+&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">只能输入汉字：&#8220;^[u4e00-u9fa5],{0,}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证Email地址：&#8220;^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证InternetURL：&#8220;^http://([w-]+.)+[w-]+(/[w-./?%&amp;=]*)?$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证电话号码：&#8220;^((d{3,4})|d{3,4}-)?d{7,8}$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">正确格式为：&#8220;XXXX-XXXXXXX&#8221;，&#8220;XXXX-XXXXXXXX&#8221;，&#8220;XXX-XXXXXXX&#8221;，</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">&#8220;XXX-XXXXXXXX&#8221;<font face="宋体">，&#8220;XXXXXXX&#8221;，&#8220;XXXXXXXX&#8221;。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证身份证号（15位或18位数字）：&#8220;^d{15}|d{}18$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证一年的12个月：&#8220;^(0?[1-9]|1[0-2])$&#8221;正确格式为：&#8220;01&#8221;-&#8220;09&#8221;和&#8220;1&#8221;&#8220;12&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">验证一个月的31天：&#8220;^((0?[1-9])|((1|2)[0-9])|30|31)$&#8221;</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">正确格式为：&#8220;01&#8221;&#8220;09&#8221;和&#8220;1&#8221;&#8220;31&#8221;。</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配中文字符的正则表达式：&nbsp;[u4e00-u9fa5]</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配双字节字符(包括汉字在内)：[^x00-xff]</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配空行的正则表达式：n[s|&nbsp;]*r</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*)&nbsp;/&gt;/</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配首尾空格的正则表达式：(^s*)|(s*$)</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">匹配网址URL的正则表达式：</font></span><span><a href="http://([w-]+.)+[w-]+(/[w"><span style="font-size: 8pt; background: rgb(255,255,255); color: rgb(51,102,153); font-family: 'Verdana'; mso-spacerun: 'yes'">http://([w-]+.)+[w-]+(/[w</span></a></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">-&nbsp;./?%&amp;=]*)?</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(1)<font face="宋体">应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">String.prototype.len=function(){return&nbsp;this.replace([^x00-xff]/g,"aa").length;}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 5pt; background: rgb(255,255,255); margin-bottom: 5pt; line-height: 150%"><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(2)<font face="宋体">应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">String.prototype.trim&nbsp;=&nbsp;function()</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">return&nbsp;this.replace(/(^s*)|(s*$)/g,&nbsp;"");</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(3)<font face="宋体">应用：利用正则表达式分解和转换IP地址</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">function&nbsp;IP2V(ip)&nbsp;//IP<font face="宋体">地址转换成对应数值</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">re=/(d+).(d+).(d+).(d+)/g&nbsp;//<font face="宋体">匹配IP地址的正则表达式</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">if(re.test(ip))</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">return&nbsp;RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">else</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">{</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">throw&nbsp;new&nbsp;Error("Not&nbsp;a&nbsp;valid&nbsp;IP&nbsp;address!")</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">}</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(4)<font face="宋体">应用：从URL地址中提取文件名的javascript程序</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">s="</span><span><a href="http://www.9499.net/page1.htm"><span style="font-size: 8pt; background: rgb(255,255,255); color: rgb(51,102,153); font-family: 'Verdana'; mso-spacerun: 'yes'">http://www.9499.net/page1.htm</span></a></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">";</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")&nbsp;;&nbsp;//Page1.htm</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'">(5)<font face="宋体">应用：利用正则表达式限制网页表单里的文本框输入内容</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')&nbsp;"&nbsp;onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">用正则表达式限制只能输入全角字符：&nbsp;onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')&nbsp;"&nbsp;onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^d]/g,'')&nbsp;"onbeforepaste=&nbsp;"clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><br />
</span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><font face="宋体">用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[W]/g,'')&nbsp;"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''</font></span><span style="font-size: 8pt; background: rgb(255,255,255); font-family: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<!--endfragment-->
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/241814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-11-21 10:58 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/11/21/241814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用SQL Server的存储过程详解[转]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239337.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 07 Nov 2008 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239337.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/239337.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/239337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/239337.html</trackback:ping><description><![CDATA[<strong>[转]自天极网<br />
<br />
1使用不带参数的存储过程</strong>
<p>　　使用 JDBC 驱动程序调用不带参数的存储过程时，必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name}</td>
        </tr>
    </tbody>
</table>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;PROCEDURE&nbsp;GetContactFormalNames <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;SELECT&nbsp;TOP&nbsp;10&nbsp;Title&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;FirstName&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;LastName&nbsp;AS&nbsp;FormalName <br />
            　　&nbsp;FROM&nbsp;Person.Contact <br />
            　　END</td>
        </tr>
    </tbody>
</table>
此存储过程返回单个结果集，其中包含一列数据(由 Person.Contact 表中前十个联系人的称呼、名称和姓氏组成)。
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 executeQuery 方法调用 GetContactFormalNames 存储过程。</p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeSprocNoParams(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;con.createStatement(); <br />
            　　ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery("{call&nbsp;dbo.GetContactFormalNames}"); <br />
            　　 <br />
            　　&nbsp;while&nbsp;(rs.next())&nbsp;...{ <br />
            　System.out.println(rs.getString("FormalName")); <br />
            　　} <br />
            　　rs.close(); <br />
            　　stmt.close(); <br />
            　&nbsp;} <br />
            　　catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　e.printStackTrace(); <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<p>　　<strong>2使用带有输入参数的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用带参数的存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有 IN 参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
<p>　　构造 call 转义序列时，请使用 ?(问号)字符来指定 IN 参数。此字符充当要传递给该存储过程的参数值的占位符。可以使用 SQLServerPreparedStatement 类的 setter 方法之一为参数指定值。可使用的 setter 方法由 IN 参数的数据类型决定。</p>
<p>　　向 setter 方法传递值时，不仅需要指定要在参数中使用的实际值，还必须指定参数在存储过程中的序数位置。例如，如果存储过程包含单个 IN 参数，则其序数值为 1。如果存储过程包含两个参数，则第一个序数值为 1，第二个序数值为 2。</p>
<p>　　作为如何调用包含 IN 参数的存储过程的实例，使用 SQL Server 2005 AdventureWorks 示例数据库中的 uspGetEmployeeManagers 存储过程。此存储过程接受名为 EmployeeID 的单个输入参数(它是一个整数值)，然后基于指定的 EmployeeID 返回雇员及其经理的递归列表。下面是调用此存储过程的 Java 代码：</p>
<p>　　<img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" /></p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeSprocInParams(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;PreparedStatement&nbsp;pstmt&nbsp;=&nbsp;con.prepareStatement("{call&nbsp;dbo.uspGetEmployeeManagers(?)}"); <br />
            　　&nbsp;pstmt.setInt(1,&nbsp;50); <br />
            　　&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;pstmt.executeQuery(); <br />
            　　&nbsp;while&nbsp;(rs.next())&nbsp;...{ <br />
            　　&nbsp;System.out.println("EMPLOYEE:"); <br />
            　　&nbsp;System.out.println(rs.getString("LastName")&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;rs.getString("FirstName")); <br />
            　　&nbsp;System.out.println("MANAGER:"); <br />
            　　&nbsp;System.out.println(rs.getString("ManagerLastName")&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;rs.getString("ManagerFirstName")); <br />
            　　&nbsp;System.out.println(); <br />
            　　&nbsp;} <br />
            　　&nbsp;rs.close(); <br />
            　　&nbsp;pstmt.close(); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<p>　　<strong>3使用带有输出参数的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用此类存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有 OUT 参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
<p>　　构造 call 转义序列时，请使用 ?(问号)字符来指定 OUT 参数。此字符充当要从该存储过程返回的参数值的占位符。要为 OUT 参数指定值，必须在运行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定各参数的数据类型。</p>
<p>　　使用 registerOutParameter 方法为 OUT 参数指定的值必须是 java.sql.Types 所包含的 JDBC 数据类型之一，而它又被映射成本地 SQL Server 数据类型之一。有关 JDBC 和 SQL Server 数据类型的详细信息，请参阅了解 JDBC 驱动程序数据类型。</p>
<p>　　当您对于 OUT 参数向 registerOutParameter 方法传递一个值时，不仅必须指定要用于此参数的数据类型，而且必须在存储过程中指定此参数的序号位置或此参数的名称。例如，如果存储过程包含单个 OUT 参数，则其序数值为 1;如果存储过程包含两个参数，则第一个序数值为 1，第二个序数值为 2。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程： 根据指定的整数 IN 参数 (employeeID)，该存储过程也返回单个整数 OUT 参数 (managerID)。根据 HumanResources.Employee 表中包含的 EmployeeID，OUT 参数中返回的值为 ManagerID。</p>
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 execute 方法调用 GetImmediateManager 存储过程：</p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{call&nbsp;dbo.GetImmediateManager(?,&nbsp;?)}"); <br />
            　　&nbsp;cstmt.setInt(1,&nbsp;5); <br />
            　　&nbsp;cstmt.registerOutParameter(2,&nbsp;java.sql.Types.INTEGER); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;System.out.println("MANAGER&nbsp;ID:&nbsp;"&nbsp;+&nbsp;cstmt.getInt(2)); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}&nbsp;</td>
        </tr>
    </tbody>
</table>
<p>本示例使用序号位置来标识参数。或者，也可以使用参数的名称(而非其序号位置)来标识此参数。下面的代码示例修改了上一个示例，以说明如何在 Java 应用程序中使用命名参数。请注意，这些参数名称对应于存储过程的定义中的参数名称： <img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" />CREATE PROCEDURE GetImmediateManager </p>
　
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            &nbsp;@employeeID&nbsp;INT, <br />
            　　&nbsp;@managerID&nbsp;INT&nbsp;OUTPUT <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;SELECT&nbsp;@managerID&nbsp;=&nbsp;ManagerID <br />
            　　&nbsp;FROM&nbsp;HumanResources.Employee <br />
            　　&nbsp;WHERE&nbsp;EmployeeID&nbsp;=&nbsp;@employeeID <br />
            　　END</td>
        </tr>
    </tbody>
</table>
　　存储过程可能返回更新计数和多个结果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 规范，此规范规定在检索 OUT 参数之前应检索多个结果集和更新计数。也就是说，应用程序应先检索所有 ResultSet 对象和更新计数，然后使用 CallableStatement.getter 方法检索 OUT 参数。否则，当检索 OUT 参数时，尚未检索的 ResultSet 对象和更新计数将丢失。
<p>　<strong>　4 使用带有返回状态的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用这种存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。返回状态参数的 call 转义序列的语法如下所示：</p>
<p>　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　{[?=]call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
　　构造 call 转义序列时，请使用 ?(问号)字符来指定返回状态参数。此字符充当要从该存储过程返回的参数值的占位符。要为返回状态参数指定值，必须在执行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定参数的数据类型。
<p>　　此外，向 registerOutParameter 方法传递返回状态参数值时，不仅需要指定要使用的参数的数据类型，还必须指定参数在存储过程中的序数位置。对于返回状态参数，其序数位置始终为 1，这是因为它始终是调用存储过程时的第一个参数。尽管 SQLServerCallableStatement 类支持使用参数的名称来指示特定参数，但您只能对返回状态参数使用参数的序号位置编号。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;PROCEDURE&nbsp;CheckContactCity <br />
            　　&nbsp;(@cityName&nbsp;CHAR(50)) <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;IF&nbsp;((SELECT&nbsp;COUNT(*) <br />
            　　&nbsp;FROM&nbsp;Person.Address <br />
            　　&nbsp;WHERE&nbsp;City&nbsp;=&nbsp;@cityName)&nbsp;&gt;&nbsp;1) <br />
            　　&nbsp;RETURN&nbsp;1 <br />
            　　ELSE <br />
            　　&nbsp;RETURN&nbsp;0 <br />
            　　END</td>
        </tr>
    </tbody>
</table>
　　该存储过程返回状态值 1 或 0，这取决于是否能在表 Person.Address 中找到 cityName 参数指定的城市。
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 execute 方法调用 CheckContactCity 存储过程：</p>
<p>　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　public&nbsp;static&nbsp;void&nbsp;executeStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{?&nbsp;=&nbsp;call&nbsp;dbo.CheckContactCity(?)}"); <br />
            　　&nbsp;cstmt.registerOutParameter(1,&nbsp;java.sql.Types.INTEGER); <br />
            　　&nbsp;cstmt.setString(2,&nbsp;"Atlanta"); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;System.out.println("RETURN&nbsp;STATUS:&nbsp;"&nbsp;+&nbsp;cstmt.getInt(1)); <br />
            　　&nbsp;} <br />
            　　&nbsp;cstmt.close(); <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<strong>　　5 使用带有更新计数的存储过程</strong>
<p>　　使用 SQLServerCallableStatement 类构建对存储过程的调用之后，可以使用 execute 或 executeUpdate 方法中的任意一个来调用此存储过程。executeUpdate 方法将返回一个 int 值，该值包含受此存储过程影响的行数，但 execute 方法不返回此值。如果使用 execute 方法，并且希望获得受影响的行数计数，则可以在运行存储过程后调用 getUpdateCount 方法。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下表和存储过程：</p>
<p>　　<img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" /> </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;TABLE&nbsp;TestTable <br />
            　　&nbsp;(Col1&nbsp;int&nbsp;IDENTITY, <br />
            　　&nbsp;Col2&nbsp;varchar(50), <br />
            　　&nbsp;Col3&nbsp;int); <br />
            　　 <br />
            　　CREATE&nbsp;PROCEDURE&nbsp;UpdateTestTable <br />
            　　&nbsp;@Col2&nbsp;varchar(50), <br />
            　　&nbsp;@Col3&nbsp;int <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;UPDATE&nbsp;TestTable <br />
            　　&nbsp;SET&nbsp;Col2&nbsp;=&nbsp;@Col2,&nbsp;Col3&nbsp;=&nbsp;@Col3 <br />
            　　END;</td>
        </tr>
    </tbody>
</table>
在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，并使用 execute 方法调用 UpdateTestTable 存储过程，然后使用 getUpdateCount 方法返回受存储过程影响的行计数。
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            public&nbsp;static&nbsp;void&nbsp;executeUpdateStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{call&nbsp;dbo.UpdateTestTable(?,&nbsp;?)}"); <br />
            　　&nbsp;cstmt.setString(1,&nbsp;"A"); <br />
            　　&nbsp;cstmt.setInt(2,&nbsp;100); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;int&nbsp;count&nbsp;=&nbsp;cstmt.getUpdateCount(); <br />
            　　&nbsp;cstmt.close(); <br />
            　　 <br />
            　　&nbsp;System.out.println("ROWS&nbsp;AFFECTED:&nbsp;"&nbsp;+&nbsp;count); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/239337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-11-07 22:21 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用SQL Server的存储过程详解[转]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239335.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 07 Nov 2008 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239335.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/239335.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/239335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/239335.html</trackback:ping><description><![CDATA[<strong>[转]自天极网<br />
<br />
1使用不带参数的存储过程</strong>
<p>　　使用 JDBC 驱动程序调用不带参数的存储过程时，必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name}</td>
        </tr>
    </tbody>
</table>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;PROCEDURE&nbsp;GetContactFormalNames <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;SELECT&nbsp;TOP&nbsp;10&nbsp;Title&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;FirstName&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;LastName&nbsp;AS&nbsp;FormalName <br />
            　　&nbsp;FROM&nbsp;Person.Contact <br />
            　　END</td>
        </tr>
    </tbody>
</table>
此存储过程返回单个结果集，其中包含一列数据(由 Person.Contact 表中前十个联系人的称呼、名称和姓氏组成)。
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 executeQuery 方法调用 GetContactFormalNames 存储过程。</p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeSprocNoParams(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;con.createStatement(); <br />
            　　ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery("{call&nbsp;dbo.GetContactFormalNames}"); <br />
            　　 <br />
            　　&nbsp;while&nbsp;(rs.next())&nbsp;...{ <br />
            　System.out.println(rs.getString("FormalName")); <br />
            　　} <br />
            　　rs.close(); <br />
            　　stmt.close(); <br />
            　&nbsp;} <br />
            　　catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　e.printStackTrace(); <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<p>　　<strong>2使用带有输入参数的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用带参数的存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有 IN 参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
<p>　　构造 call 转义序列时，请使用 ?(问号)字符来指定 IN 参数。此字符充当要传递给该存储过程的参数值的占位符。可以使用 SQLServerPreparedStatement 类的 setter 方法之一为参数指定值。可使用的 setter 方法由 IN 参数的数据类型决定。</p>
<p>　　向 setter 方法传递值时，不仅需要指定要在参数中使用的实际值，还必须指定参数在存储过程中的序数位置。例如，如果存储过程包含单个 IN 参数，则其序数值为 1。如果存储过程包含两个参数，则第一个序数值为 1，第二个序数值为 2。</p>
<p>　　作为如何调用包含 IN 参数的存储过程的实例，使用 SQL Server 2005 AdventureWorks 示例数据库中的 uspGetEmployeeManagers 存储过程。此存储过程接受名为 EmployeeID 的单个输入参数(它是一个整数值)，然后基于指定的 EmployeeID 返回雇员及其经理的递归列表。下面是调用此存储过程的 Java 代码：</p>
<p>　　<img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" /></p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeSprocInParams(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;PreparedStatement&nbsp;pstmt&nbsp;=&nbsp;con.prepareStatement("{call&nbsp;dbo.uspGetEmployeeManagers(?)}"); <br />
            　　&nbsp;pstmt.setInt(1,&nbsp;50); <br />
            　　&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;pstmt.executeQuery(); <br />
            　　&nbsp;while&nbsp;(rs.next())&nbsp;...{ <br />
            　　&nbsp;System.out.println("EMPLOYEE:"); <br />
            　　&nbsp;System.out.println(rs.getString("LastName")&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;rs.getString("FirstName")); <br />
            　　&nbsp;System.out.println("MANAGER:"); <br />
            　　&nbsp;System.out.println(rs.getString("ManagerLastName")&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;rs.getString("ManagerFirstName")); <br />
            　　&nbsp;System.out.println(); <br />
            　　&nbsp;} <br />
            　　&nbsp;rs.close(); <br />
            　　&nbsp;pstmt.close(); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<p>　　<strong>3使用带有输出参数的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用此类存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有 OUT 参数的 call 转义序列的语法如下所示：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            {call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
<p>　　构造 call 转义序列时，请使用 ?(问号)字符来指定 OUT 参数。此字符充当要从该存储过程返回的参数值的占位符。要为 OUT 参数指定值，必须在运行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定各参数的数据类型。</p>
<p>　　使用 registerOutParameter 方法为 OUT 参数指定的值必须是 java.sql.Types 所包含的 JDBC 数据类型之一，而它又被映射成本地 SQL Server 数据类型之一。有关 JDBC 和 SQL Server 数据类型的详细信息，请参阅了解 JDBC 驱动程序数据类型。</p>
<p>　　当您对于 OUT 参数向 registerOutParameter 方法传递一个值时，不仅必须指定要用于此参数的数据类型，而且必须在存储过程中指定此参数的序号位置或此参数的名称。例如，如果存储过程包含单个 OUT 参数，则其序数值为 1;如果存储过程包含两个参数，则第一个序数值为 1，第二个序数值为 2。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程： 根据指定的整数 IN 参数 (employeeID)，该存储过程也返回单个整数 OUT 参数 (managerID)。根据 HumanResources.Employee 表中包含的 EmployeeID，OUT 参数中返回的值为 ManagerID。</p>
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 execute 方法调用 GetImmediateManager 存储过程：</p>
<p>&nbsp;</p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　　public&nbsp;static&nbsp;void&nbsp;executeStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{call&nbsp;dbo.GetImmediateManager(?,&nbsp;?)}"); <br />
            　　&nbsp;cstmt.setInt(1,&nbsp;5); <br />
            　　&nbsp;cstmt.registerOutParameter(2,&nbsp;java.sql.Types.INTEGER); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;System.out.println("MANAGER&nbsp;ID:&nbsp;"&nbsp;+&nbsp;cstmt.getInt(2)); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}&nbsp;</td>
        </tr>
    </tbody>
</table>
<p>本示例使用序号位置来标识参数。或者，也可以使用参数的名称(而非其序号位置)来标识此参数。下面的代码示例修改了上一个示例，以说明如何在 Java 应用程序中使用命名参数。请注意，这些参数名称对应于存储过程的定义中的参数名称： <img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" />CREATE PROCEDURE GetImmediateManager </p>
　
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            &nbsp;@employeeID&nbsp;INT, <br />
            　　&nbsp;@managerID&nbsp;INT&nbsp;OUTPUT <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;SELECT&nbsp;@managerID&nbsp;=&nbsp;ManagerID <br />
            　　&nbsp;FROM&nbsp;HumanResources.Employee <br />
            　　&nbsp;WHERE&nbsp;EmployeeID&nbsp;=&nbsp;@employeeID <br />
            　　END</td>
        </tr>
    </tbody>
</table>
　　存储过程可能返回更新计数和多个结果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 规范，此规范规定在检索 OUT 参数之前应检索多个结果集和更新计数。也就是说，应用程序应先检索所有 ResultSet 对象和更新计数，然后使用 CallableStatement.getter 方法检索 OUT 参数。否则，当检索 OUT 参数时，尚未检索的 ResultSet 对象和更新计数将丢失。
<p>　<strong>　4 使用带有返回状态的存储过程</strong></p>
<p>　　使用 JDBC 驱动程序调用这种存储过程时，必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。返回状态参数的 call 转义序列的语法如下所示：</p>
<p>　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　{[?=]call&nbsp;procedure-name[([parameter][,[parameter]]...)]}</td>
        </tr>
    </tbody>
</table>
　　构造 call 转义序列时，请使用 ?(问号)字符来指定返回状态参数。此字符充当要从该存储过程返回的参数值的占位符。要为返回状态参数指定值，必须在执行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定参数的数据类型。
<p>　　此外，向 registerOutParameter 方法传递返回状态参数值时，不仅需要指定要使用的参数的数据类型，还必须指定参数在存储过程中的序数位置。对于返回状态参数，其序数位置始终为 1，这是因为它始终是调用存储过程时的第一个参数。尽管 SQLServerCallableStatement 类支持使用参数的名称来指示特定参数，但您只能对返回状态参数使用参数的序号位置编号。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程：</p>
<p>　　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;PROCEDURE&nbsp;CheckContactCity <br />
            　　&nbsp;(@cityName&nbsp;CHAR(50)) <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;IF&nbsp;((SELECT&nbsp;COUNT(*) <br />
            　　&nbsp;FROM&nbsp;Person.Address <br />
            　　&nbsp;WHERE&nbsp;City&nbsp;=&nbsp;@cityName)&nbsp;&gt;&nbsp;1) <br />
            　　&nbsp;RETURN&nbsp;1 <br />
            　　ELSE <br />
            　　&nbsp;RETURN&nbsp;0 <br />
            　　END</td>
        </tr>
    </tbody>
</table>
　　该存储过程返回状态值 1 或 0，这取决于是否能在表 Person.Address 中找到 cityName 参数指定的城市。
<p>　　在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，然后使用 execute 方法调用 CheckContactCity 存储过程：</p>
<p>　 </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            　public&nbsp;static&nbsp;void&nbsp;executeStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{?&nbsp;=&nbsp;call&nbsp;dbo.CheckContactCity(?)}"); <br />
            　　&nbsp;cstmt.registerOutParameter(1,&nbsp;java.sql.Types.INTEGER); <br />
            　　&nbsp;cstmt.setString(2,&nbsp;"Atlanta"); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;System.out.println("RETURN&nbsp;STATUS:&nbsp;"&nbsp;+&nbsp;cstmt.getInt(1)); <br />
            　　&nbsp;} <br />
            　　&nbsp;cstmt.close(); <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<strong>　　5 使用带有更新计数的存储过程</strong>
<p>　　使用 SQLServerCallableStatement 类构建对存储过程的调用之后，可以使用 execute 或 executeUpdate 方法中的任意一个来调用此存储过程。executeUpdate 方法将返回一个 int 值，该值包含受此存储过程影响的行数，但 execute 方法不返回此值。如果使用 execute 方法，并且希望获得受影响的行数计数，则可以在运行存储过程后调用 getUpdateCount 方法。</p>
<p>　　作为实例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下表和存储过程：</p>
<p>　　<img height="16" alt="" src="http://www.bccn.net/Article/UploadFDL05/200807/20080730172202137.gif" width="11" align="top" /> </p>
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            CREATE&nbsp;TABLE&nbsp;TestTable <br />
            　　&nbsp;(Col1&nbsp;int&nbsp;IDENTITY, <br />
            　　&nbsp;Col2&nbsp;varchar(50), <br />
            　　&nbsp;Col3&nbsp;int); <br />
            　　 <br />
            　　CREATE&nbsp;PROCEDURE&nbsp;UpdateTestTable <br />
            　　&nbsp;@Col2&nbsp;varchar(50), <br />
            　　&nbsp;@Col3&nbsp;int <br />
            　　AS <br />
            　　BEGIN <br />
            　　&nbsp;UPDATE&nbsp;TestTable <br />
            　　&nbsp;SET&nbsp;Col2&nbsp;=&nbsp;@Col2,&nbsp;Col3&nbsp;=&nbsp;@Col3 <br />
            　　END;</td>
        </tr>
    </tbody>
</table>
在下面的实例中，将向此函数传递 AdventureWorks 示例数据库的打开连接，并使用 execute 方法调用 UpdateTestTable 存储过程，然后使用 getUpdateCount 方法返回受存储过程影响的行计数。
<table style="border-right: rgb(204,204,204) 1px dotted; table-layout: fixed; border-top: rgb(204,204,204) 1px dotted; border-left: rgb(204,204,204) 1px dotted; border-bottom: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><font style="font-weight: bold; color: rgb(153,0,0)">以下是引用片段：</font><br />
            public&nbsp;static&nbsp;void&nbsp;executeUpdateStoredProcedure(Connection&nbsp;con)&nbsp;...{ <br />
            　　&nbsp;try&nbsp;...{ <br />
            　　&nbsp;CallableStatement&nbsp;cstmt&nbsp;=&nbsp;con.prepareCall("{call&nbsp;dbo.UpdateTestTable(?,&nbsp;?)}"); <br />
            　　&nbsp;cstmt.setString(1,&nbsp;"A"); <br />
            　　&nbsp;cstmt.setInt(2,&nbsp;100); <br />
            　　&nbsp;cstmt.execute(); <br />
            　　&nbsp;int&nbsp;count&nbsp;=&nbsp;cstmt.getUpdateCount(); <br />
            　　&nbsp;cstmt.close(); <br />
            　　 <br />
            　　&nbsp;System.out.println("ROWS&nbsp;AFFECTED:&nbsp;"&nbsp;+&nbsp;count); <br />
            　　&nbsp;} <br />
            　　&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;...{ <br />
            　　&nbsp;e.printStackTrace(); <br />
            　　&nbsp;} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/239335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-11-07 22:16 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/11/07/239335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL高级之简易银行系统</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/10/31/237873.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 31 Oct 2008 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/10/31/237873.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/237873.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/10/31/237873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/237873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/237873.html</trackback:ping><description><![CDATA[<p>--创建数据库<br />
use master <br />
go<br />
if exists(select * from sysdatabases where name = 'BankDB')<br />
drop database BankDB<br />
go<br />
exec xp_cmdshell 'md E:\朱矿龙',NO_OUTPUT<br />
create database BankDB<br />
go<br />
use BankDB<br />
--创建帐户信息表AccountInfo<br />
if exists(select * from sysobjects where name = 'AccountInfo')<br />
drop table AccountInfo<br />
go<br />
create table AccountInfo<br />
(<br />
CustID int identity(1,1) primary key,<br />
CustName varchar(20) not null,<br />
IDCard varchar(18) check(len(IDCard) = 15 or len(IDCard) = 18),<br />
TelePhone varchar(13) check(len(TelePhone)=11 or len(TelePhone) like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or len(TelePhone) like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,<br />
Address varchar(50) default '地址不详'<br />
)<br />
go<br />
--创建信用卡信息表CardInfo<br />
if exists(select * from sysobjects where name = 'CardInfo')<br />
drop table CardInfo<br />
go<br />
create table CardInfo<br />
(<br />
CardID varchar(19) check(len(CardID)=19) primary key,<br />
CardPassWord varchar(6) default'888888',<br />
CustID int references AccountInfo(CustID),<br />
SaveType varchar(10) not null check(SaveType in('活期','定期')),<br />
OpenDate datetime not null default(getdate()),<br />
OpenMoney money not null check(OpenMoney &gt;= 1),<br />
LeftMoney money not null check(LeftMoney &gt;= 1),<br />
IsLoss varchar(2) not null check(IsLoss in('是','否')) default '否'<br />
)<br />
go<br />
--创建交易信息表TransInfo<br />
if exists(select * from sysobjects where name = 'TransInfo')<br />
drop table TransInfo<br />
go<br />
create table TransInfo<br />
(<br />
CardID varchar(19) not null,<br />
TransType varchar(4) not null check(TransType in('存入','支取')),<br />
TransMoney money not null check(TransMoney &gt; 0),<br />
TransDate datetime default(getdate())<br />
)<br />
go</p>
<p><br />
-------------------------------插入测试数据-------------------------------------<br />
---为AccountInfo表插入测试数据<br />
insert into AccountInfo values('孙悟空','422322123902140019','027-8888988','花果山')<br />
insert into AccountInfo values('唐僧','422322001902140019','027-8536896','大唐')<br />
insert into AccountInfo values('沙和尚','410334020157144719','13295654665','通天河')<br />
---为CardInfo表插入测试数据<br />
insert into CardInfo values('1027 3726 1536 1135',default,1,'定期',default,500.00,500.00,default)<br />
insert into CardInfo values('1029 3526 1235 1235',default,2,'活期',default,1500.00,1500.00,default)<br />
insert into CardInfo values('1324 7532 1536 1935',default,3,'活期',default,4500.00,4500.00,default)</p>
<p><br />
---表的查看<br />
select * from AccountInfo</p>
<p>select * from CardInfo</p>
<p>select * from TransInfo</p>
<p>-----------------T-SQL----------------------------<br />
--孙悟空修改密码<br />
update CardInfo set CardPassWord = 611234 where CustID = 1</p>
<p>--孙悟空取钱<br />
--事务开始<br />
begin transaction tran_Qu<br />
--定义一个用于记录错误的变量<br />
declare @tran_error int<br />
set @tran_error = 0;<br />
--将孙悟空交易进行记录<br />
insert into TransInfo values('1027 3726 1536 1135','支取',200.00,getdate())<br />
set @tran_error = @tran_error + @@error<br />
--从孙悟空的帐户中减去200.00<br />
update CardInfo set LeftMoney = LeftMoney - 200<br />
where CardID = '1027 3726 1536 1135'<br />
set @tran_error = @tran_error + @@error<br />
if @tran_error &lt;&gt; 0<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --执行错误，回滚事务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollback transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '支取失败，交易已取消'<br />
&nbsp;&nbsp; end<br />
else<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; --没有发现错误，提交事务<br />
&nbsp;&nbsp;&nbsp; commit transaction<br />
&nbsp;&nbsp;&nbsp; print'交易成功，已保存新数据'<br />
&nbsp; end<br />
go<br />
select * from CardInfo where CustID = 1</p>
<p>--沙和尚存钱<br />
begin transaction tran_bring<br />
declare @tran_error int<br />
set @tran_error = 0;<br />
insert into TransInfo values('1324 7532 1536 1935','存入',1200.00,getdate())<br />
set @tran_error = @tran_error + @@error<br />
update CardInfo set LeftMoney = LeftMoney + 1200<br />
where CardID = '1324 7532 1536 1935'<br />
set @tran_error = @tran_error + @@error<br />
if @tran_error &lt;&gt; 0<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollback transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '存入失败，交易已取消'<br />
&nbsp;&nbsp; end<br />
else<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; commit transaction<br />
&nbsp;&nbsp;&nbsp; print'交易成功，已保存新数据'<br />
&nbsp; end<br />
go<br />
select * from CardInfo where CustID = 3</p>
<p>--唐僧卡丢失<br />
update CardInfo set IsLoss='是' where CustID = 2</p>
<p>--查询最近10开户的银行卡信息<br />
select * from CardInfo where datediff(dd,OpenDate,getdate()) &lt;= 10</p>
<p>--查询最大交易的卡信息<br />
declare @maxMoney money<br />
select @maxMoney = max(TransMoney) from TransInfo<br />
select * from CardInfo where CardID in(select CardID from TransInfo where TransMoney = @maxMoney)</p>
<p>--查询交易信息表中总的交易<br />
declare @allMoney money<br />
declare @QuMoney money<br />
declare @CunMoney money<br />
select @allMoney = sum(TransMoney) from TransInfo<br />
select @QuMoney = sum(TransMoney) from TransInfo where TransType = '支取'<br />
select @CunMoney = sum(TransMoney) from TransInfo where TransType = '存入'<br />
print '总交易金额：' + convert(varchar(10),@allMoney)<br />
print '支取交易金额：' + convert(varchar(10),@QuMoney)<br />
print '存入交易金额：' + convert(varchar(10),@CunMoney)</p>
<p>--给交易信息表加上非聚集索引，并利用非聚集索引查询数据<br />
if exists(select * from sysobjects where name = 'IX_CardID')<br />
drop index BankDB.IX_CardID<br />
go<br />
create nonclustered index IX_CardID<br />
on TransInfo(CardID)<br />
with fillfactor = 30<br />
go<br />
select * from TransInfo with(index = IX_CardID) where CardID = '1324 7532 1536 1935'</p>
<p>--查询挂失的账户信息<br />
select * from AccountInfo where CustID in(select CustID from CardInfo where IsLoss = '是')</p>
<p><br />
--账户信息视图<br />
if exists(select * from sysobjects where name = 'view_AccountCardInfo')<br />
drop view view_AccountCardInfo<br />
go<br />
create view view_AccountCardInfo<br />
as<br />
select AccountInfo.CustID '帐户编号',CustName '帐户姓名',IDCard'身份证号码',TelePhone'客户电话',Address'客户地址',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CardID'信用卡编号',SaveType'储蓄类型',OpenDate'开户日期',OpenMoney'开户金额',IsLoss'是否挂失'<br />
from AccountInfo join CardInfo<br />
on AccountInfo.CustID = CardInfo.CustID<br />
go<br />
select * from view_AccountCardInfo</p>
<p>--交易信息视图<br />
if exists(select * from sysobjects where name = 'view_TransInfo')<br />
drop view view_TransInfo<br />
go<br />
create view view_TransInfo<br />
as<br />
select CardID '卡号',TransType '交易类型',TransMoney '交易金额',TransDate '交易时间'<br />
from TransInfo<br />
go<br />
go<br />
select * from view_TransInfo</p>
<p>---------------第三阶段----------------<br />
--------T-SQL-------------<br />
if exists(select name from sysobjects where name = 'Tri_TransInfo_Insert')<br />
drop trigger Tri_TransInfo_Insert<br />
go<br />
create trigger Tri_TransInfo_Insert on TransInfo for insert<br />
as<br />
&nbsp;declare @TempTransType varchar(10)&nbsp;&nbsp;&nbsp;&nbsp; --定义临时的变量存放交易类型<br />
&nbsp;declare @TempTransMoney money&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --定义临时的变量存放交易金额<br />
&nbsp;declare @TempCardID varchar(19)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --定义临时的变量存放卡号<br />
&nbsp;declare @TempLeftMoney money&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --定义临时的变量存放客户的余额<br />
&nbsp;<br />
--从inserted临时表中取出数据赋值<br />
select @TempTransType = TransType,@TempTransMoney = TransMoney,@TempCardID = CardID<br />
from inserted<br />
select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID</p>
<p>if(@TempTransType = '支取')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; if(@TempLeftMoney - @TempTransMoney &gt;=1)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update CardInfo set LeftMoney = @TempLeftMoney - @TempTransMoney where CardID = @TempCardID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '交易成功！'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollback transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '余额不足，交易失败！'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end<br />
else<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; update CardInfo set LeftMoney = @TempLeftMoney + @TempTransMoney where CardID = @TempCardID<br />
&nbsp;&nbsp;&nbsp; print '交易成功！'<br />
&nbsp; end<br />
select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID&nbsp;&nbsp; <br />
print '卡号：' + convert(varchar(19),@TempCardID) + '&nbsp; 余额：' + convert(varchar(10),@TempLeftMoney)<br />
go<br />
set nocount on&nbsp;&nbsp; --不显示语句影响记录行数<br />
--测试触发器,沙和尚支取<br />
insert into TransInfo(CardID,TransType,TransMoney) values('9645 9087 9371 4492','支取',500)<br />
go</p>
<p>select * from TransInfo<br />
select * from accountinfo<br />
select * from CardInfo</p>
<p>--利用存储过程实现备份交易信息的业务<br />
if exists(select *from sysobjects where name = 'Proc_Backup_TransInfo')<br />
&nbsp;&nbsp;&nbsp; drop procedure Proc_Backup_TransInfo<br />
go<br />
create procedure Proc_Backup_TransInfo<br />
@BackupDate datetime<br />
as<br />
declare @MyError int<br />
set @MyError = 0<br />
print '开始备份......'<br />
if exists(select * from sysobjects where name ='Back_TransInfo')<br />
begin<br />
&nbsp;begin tran&nbsp; <br />
&nbsp;insert into Back_TransInfo select * from TransInfo where datediff(dd,TransDate,getdate()) &gt;=0<br />
set @MyError = @MyError + @@error<br />
if @MyError != 0<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollback transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '备份失败'<br />
&nbsp;&nbsp; end<br />
else<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commit transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print'备份成功'<br />
&nbsp;&nbsp; end<br />
&nbsp; end<br />
else <br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; begin tran&nbsp; <br />
&nbsp;&nbsp;&nbsp; select * into Back_TransInfo from TransInfo where datediff(dd,TransDate,getdate()) &gt;=0<br />
&nbsp;&nbsp;&nbsp; set @MyError = @MyError + @@error<br />
if @MyError != 0<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollback transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '备份失败!'<br />
&nbsp;&nbsp; end<br />
else<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commit transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '备份成功!'<br />
&nbsp;&nbsp; end<br />
end<br />
go<br />
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())&nbsp; <br />
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())<br />
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())<br />
declare @BackDate datetime<br />
set @BackDate = getDate()<br />
exec Proc_Backup_TransInfo '2008-10-31'<br />
go<br />
select * from Back_TransInfo</p>
<p>--实现银行卡的存储过程<br />
if exists(select * from sysobjects where name = 'Proc_GetCardID')<br />
&nbsp;&nbsp;&nbsp; drop procedure Proc_GetCardID<br />
go<br />
create procedure Proc_GetCardID<br />
@CardID varchar(19) output<br />
as<br />
declare @TempRand numeric(18,16)<br />
declare @TempStr varchar(18)<br />
set @TempRand = rand(datepart(ms,getdate())*10000)<br />
set @TempStr = convert(varchar(18),@TempRand)<br />
set @CardID = substring(@TempStr,3,4)+' '+substring(@TempStr,7,4)+' '+substring(@TempStr,11,4)+' '+substring(@TempStr,15,4)<br />
go<br />
declare @MyCardID varchar(19)<br />
exec Proc_GetCardID @MyCardID output<br />
print '产生的随即卡号是：' + @MyCardID<br />
go</p>
<p>--实现开户的存储过程<br />
if exists(select * from sysobjects where name = 'Proc_OpenAcount')<br />
&nbsp;&nbsp;&nbsp; drop procedure Proc_OpenAcount<br />
go<br />
create procedure Proc_OpenAcount<br />
@CustName varchar(20),<br />
@IDCard varchar(18),<br />
@Telephone varchar(13),<br />
@OpenMoney money = 1,<br />
@SaveType varchar(10) = '活期',<br />
@Address varchar(50)= '地址不详'<br />
as<br />
&nbsp;declare @MyCardID varchar(19)<br />
&nbsp;declare @MyCustID int<br />
&nbsp;exec Proc_GetCardID @MyCardID output<br />
while(1=1)<br />
&nbsp;begin<br />
&nbsp;if exists(select * from CardInfo where CardID = @MyCardID)<br />
&nbsp;exec Proc_GetCardID @MyCardID output<br />
else<br />
&nbsp;break<br />
&nbsp;end<br />
insert into AccountInfo values(@CustName,@IDCard,@TelePhone,@Address)&nbsp;&nbsp; <br />
select @MyCustID = CustID from AccountInfo where IDCard = @IDCard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
insert into CardInfo values(@MyCardID,default,@MyCustID,@SaveType,default,@OpenMoney,@OpenMoney,default)<br />
print '尊敬的客户：' +@CustName +'开户成功，卡号为：'+@MyCardId</p>
<p>print '产生的随机卡号为：' + @MyCardID<br />
exec Proc_OpenAcount '白骨精','245687556977812345','12478964568'<br />
exec Proc_OpenAcount '嫦娥公主','745687476912812335','14796653141',@Address = '月亮'</p>
<p>----销户<br />
if exists(select * from sysobjects where name = 'Proc_DropAcount')<br />
&nbsp;&nbsp;&nbsp; drop procedure Proc_DropAcount<br />
go<br />
create procedure Proc_DropAcount<br />
&nbsp;--@CardID varchar(19)<br />
@IDCard varchar(18) --身份证号<br />
as<br />
declare @TempCustID int<br />
declare @TempLeftMoney money<br />
--select @TempCustID = CustID from CardInfo where CardID = @CardID&nbsp; <br />
--select @TempLeftMoney = LeftMoney from CardInfo where CardID = @CardID <br />
print '该帐户余额：' +convert(varchar(10),@TempLeftMoney)+'正在取出。。。'<br />
delete from CardInfo where custid in(select custid from accountinfo where IDCard=@IDCard)<br />
delete from&nbsp; AccountInfo where IDCard=@IDCard<br />
go<br />
declare @CardID varchar(19)<br />
select @CardID = CardID from CardInfo where CustID in(select CustID from AccountInfo where CustName = '唐僧')<br />
exec Proc_DropAcount '422322001902140019'--根据身份证号删除<br />
go<br />
---表的查看<br />
select * from AccountInfo<br />
select * from CardInfo</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/237873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-10-31 19:31 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/10/31/237873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 新手学习（03）[连载]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/10/26/236752.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Sun, 26 Oct 2008 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/10/26/236752.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/236752.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/10/26/236752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/236752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/236752.html</trackback:ping><description><![CDATA[<p>类和对象：<br />
&nbsp;类：主观抽象，是对象的模板，可以实例化对象<br />
&nbsp;&nbsp;习惯上类的定义格式：<br />
&nbsp;&nbsp;&nbsp;package xxx;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;import xxx;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public class Xxxx{<br />
&nbsp;&nbsp;&nbsp;&nbsp;属性 &#183;&#183;&#183;&#183;&#183;&#183;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;构造器 &#183;&#183;&#183;&#183;&#183;&#183;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;方法 &#183;&#183;&#183;&#183;&#183;&#183;;<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;定义属性：实例变量<br />
&nbsp;&nbsp;&nbsp;格式：[ 修饰符 ]&nbsp; 类型 变量名&nbsp; [ = ? ]<br />
&nbsp;&nbsp;&nbsp;实例变量定义在类中但在任何方法之外。<br />
&nbsp;&nbsp;&nbsp;实例变量有默认值：各种各样的0。(同数组)<br />
&nbsp;&nbsp;&nbsp;实例变量的作用域至少在本类内部，受访问控制符的限制。<br />
&nbsp;&nbsp;&nbsp;在重合作用域，实例变量和局部变量允许有命名冲突，&#8220;局部优先&#8221;。<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;定义方法：<br />
&nbsp;&nbsp;&nbsp;格式： [ 修饰符 ]&nbsp; 返回类型 方法名( 参数列表 ) [ throws&nbsp; 异常 ] { &#183;&#183;&#183;&#183;&#183;&#183; } <br />
&nbsp;&nbsp;&nbsp;java中所有参数都是值传递。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;当没有值返回时，返回类型必须被定义为void。 <br />
&nbsp;&nbsp;&nbsp;返回类型必须与方法名相邻，其他修饰符可以调换位置。<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;构造器：<br />
&nbsp;&nbsp;&nbsp;在创建对象的过程中调用的方法。<br />
&nbsp;&nbsp;&nbsp;构造器没有返回类型。<br />
&nbsp;&nbsp;&nbsp;构造器的名字与类名相同。<br />
&nbsp;&nbsp;&nbsp;格式为：[ 修饰符 ]&nbsp; 类名( 参数列表 ){&nbsp; }，修饰符可以是private、 protected、 default、private<br />
&nbsp;&nbsp;&nbsp;在一个对象的生成周期中构造器只用一次，由系统自动调用，不允许手工调用。<br />
&nbsp;&nbsp;&nbsp;程序员没有提供一个构造器，系统会自动提供一个无参的构造器。<br />
&nbsp;&nbsp;&nbsp;获得对象的方式：<br />
&nbsp;&nbsp;&nbsp;&nbsp;通过new（在堆空间中申请分配空间），new 类名()，可以通过这种形式或的一个对象，这时的对象是无法使用，必须把他的地址存放进一个对象变量才能够使用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;例如 ：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Car c=new Car();<br />
&nbsp;&nbsp;&nbsp;注意：<br />
&nbsp;&nbsp;&nbsp;&nbsp;最好在写类时提供一个无参的构造器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;this关键字：<br />
&nbsp;&nbsp;&nbsp;this是个隐式参数，代表当前对象;<br />
&nbsp;&nbsp;&nbsp;&nbsp;publie class Student{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private String name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void setName(String name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name=name;&nbsp;&nbsp;//this.name为当前对象的成员变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;如果某个构造方法的第一个语句具有形式this( &#183;&#183;&#183; )，那么这个构造方法将调用同一类中的其他构造方法。<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;注意：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;在构造器中this(...)必须放在该构造器的第一行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;this不能出现在静态方法里面&nbsp;&nbsp;<br />
&nbsp;<br />
&nbsp;类、对象、实例三者的关系：<br />
&nbsp;&nbsp;类：是对象的模板，可以实例化对象<br />
&nbsp;&nbsp;对象：类的个体<br />
&nbsp;&nbsp;实例：实现的对象<br />
&nbsp;&nbsp;student s;&nbsp;<br />
&nbsp;&nbsp;s=new student();<br />
&nbsp;&nbsp;&nbsp;其中 Student为类，s为对象，new Student()为实例，s赋值后也是实例了。</p>
<p>方法重载：<br />
&nbsp;方法名相同，参数表不同，不考虑返回值类型(但最好还是使返回类型一致)。<br />
&nbsp;编译器根据参数，选择一个方法，如果没有完全匹配的，对于参数表采用&#8220;向上就近匹配原则&#8221;，但不允许模棱两可。<br />
&nbsp;方法重载屏蔽了一个对象的同一类方法由于参数不同所造成的差异。<br />
&nbsp;&nbsp;&nbsp;<br />
封装：<br />
&nbsp;类的属性加private修饰符，来限制只能够在类的内部进行访问，有效的保护数据。<br />
&nbsp;对于类中的私有属性，要对其给出一对方法getXxx()，setXxx()访问私有属性，保证对私有属性的操作的安全性。<br />
&nbsp;方法公开的是方法的声明，即只须知道参数和返回值就可以调用该方法，隐藏方法的实现的细节。<br />
&nbsp;一个对象和外界的联系应当通过一个统一的接口，应当公开的公开，应当隐藏的隐藏。<br />
&nbsp;&nbsp;<br />
继承：<br />
&nbsp;父类到子类是从一般到特殊的关系。<br />
&nbsp;&nbsp;泛化：将不同子类中的共性抽象成父类的过程。<br />
&nbsp;&nbsp;特化：在原有父类的基础上加入一些个性的过程。<br />
&nbsp;&nbsp;原则：父类放共性，子类放个性。<br />
&nbsp;继承的关键字：extends<br />
&nbsp;Java只支持单继承：一个类最多只有一个直接的父类。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;方法覆盖：<br />
&nbsp;&nbsp;方法名：相同<br />
&nbsp;&nbsp;参数表：相同<br />
&nbsp;&nbsp;访问限制符：相同或者更宽<br />
&nbsp;&nbsp;返回值类型：相同或者子类返回的类型是父类返回的类型的子类（在JDK5.0以后）<br />
&nbsp;&nbsp;抛出的异常：不能比父类更宽。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;super关键字：<br />
&nbsp;&nbsp;super()表示调用父类的构造器<br />
&nbsp;&nbsp;super()也和this()一样必须放在方法的第一句<br />
&nbsp;&nbsp;super()和this()不能同时出现&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;super可以屏蔽子类属性和父类属性重名时带来的属性遮盖，super. 表示调用父类的方法或属性<br />
&nbsp;&nbsp;在子类的构造器中如果没有指定调用父类的哪一个构造器，那么就会调用父类的无参构造器，即super()<br />
&nbsp;&nbsp;<br />
&nbsp;注意：<br />
&nbsp;&nbsp;父类的构造器不能被子类继承<br />
&nbsp;&nbsp;方法和属性可以被继承，权限不限制能否继承过来，限制的是能否直接访问<br />
&nbsp;&nbsp;先构造父类，后构造子类，先this后super<br />
&nbsp;&nbsp;<br />
多态：<br />
&nbsp;多态分为两种：编译时多态和运行时多态。<br />
&nbsp;&nbsp;编译时类型：主观概念，把它看作什么。<br />
&nbsp;&nbsp;运行时类型：客观概念，实际它是什么。<br />
&nbsp;&nbsp; &nbsp;例：Animal a=new Dog();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;指着狗问，这个动物是什么？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;运行时多态的三原则：<br />
&nbsp;&nbsp;对象类型不变。<br />
&nbsp;&nbsp;只能对对象调用编译时类型中定义的方法。<br />
&nbsp;&nbsp;在程序的运行时，根据对象的运行时类型，找覆盖后的方法来调用。（运行时动态类型绑定）<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;强制类型转换： 一定没有新对象生成。(父类的引用赋值给子类的引用需要进行强制类型转换)<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;关键字：instanceof<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;用法：引用&nbsp; instanceof&nbsp; 类名&nbsp;&nbsp;&nbsp; 判断这个引用所指向的对象是否属于这个类。<br />
&nbsp;&nbsp; &nbsp;用在强制转换之前，避免类型转换异常。<br />
&nbsp;&nbsp;&nbsp;if(a instanceof Dog){<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dog d=(Dog)a;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;多态的作用：把不同的子类对象都当作父类来看，可以屏蔽不同子类对象之间的差异，写出通用的代码，做出通用的编程，以适应需求的不断变化。</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/236752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-10-26 21:04 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/10/26/236752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>变量--新手学习（02）[连载]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/10/20/235555.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Mon, 20 Oct 2008 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/10/20/235555.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/235555.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/10/20/235555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/235555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/235555.html</trackback:ping><description><![CDATA[<p>局部变量：不是声明在类体括号里面的变量<br />
&nbsp;(1)必须要先赋值，后使用，否则通不过编译，局部变量没有默认初始化值<br />
&nbsp;(2)作用范围：定义开始到定义它的代码块结束<br />
&nbsp;(3)同一范围内，不允许2个局部变量命名冲突</p>
<p>&nbsp;参数传递时，简单类型进行值转递&nbsp;(参数进行传递时都会先去栈中生成一个副本的，使用结束后释放)<br />
&nbsp;<br />
自动类型提升：<br />
&nbsp;byte a = 1;<br />
&nbsp;byte b = 2;<br />
&nbsp;a = a+b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //编译出错自动类型提升成int<br />
&nbsp;a += b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //自加没有自动类型提升问题<br />
&nbsp;类型自动提升规则：<br />
&nbsp;&nbsp;a和b作某种运算<br />
&nbsp;&nbsp;a和b中有double，结果就是double<br />
&nbsp;&nbsp;a和b中有float，结果就是float<br />
&nbsp;&nbsp;a和b中有long，结果就是long<br />
&nbsp;&nbsp;除此之外，结果都是int<br />
&nbsp;把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;<br />
&nbsp;<br />
移位运算符：效率最高<br />
&nbsp;&gt;&gt;&nbsp;&nbsp; 有符号右移，补符号位<br />
&nbsp;&nbsp;移负数位，则将该数值加32后再进行移位<br />
&nbsp;&nbsp;数值的2进制是按照补码保存的<br />
&nbsp;&gt;&gt;&gt;&nbsp; 右移后高位都补0<br />
&nbsp;<br />
逻辑运算符：<br />
&nbsp;&amp;/|也可以作为逻辑运算符<br />
&nbsp;&amp;&amp;&nbsp;先判断前面一个条件，如果为假，则不用计算后一个条件<br />
&nbsp;||&nbsp;先判断前面一个条件，如果为真，则不用计算后一个条件<br />
&nbsp;<br />
" + "运算符：<br />
&nbsp;两个操作的对象是数值时，是加法<br />
&nbsp;如果有一个是字符串时，则是字符串的连接<br />
&nbsp;<br />
流程控制语句：<br />
&nbsp;同Core C++<br />
&nbsp;switch中的变量类型只能是byte、 short、int、char四种类型<br />
&nbsp;<br />
数组：<br />
&nbsp;声明数组：&nbsp;&nbsp; <br />
&nbsp;&nbsp;数组能以下列形式声明：<br />
&nbsp;&nbsp;&nbsp;类型[] array;<br />
&nbsp;&nbsp;&nbsp;类型 array[];&nbsp; <br />
&nbsp;&nbsp;注：<br />
&nbsp;&nbsp;&nbsp;JAVA中推荐用：类型[] array;<br />
&nbsp;&nbsp;&nbsp;一个数组是一个对象<br />
&nbsp;&nbsp;&nbsp;声明一个数组没有创建一个对象<br />
&nbsp;&nbsp;&nbsp;声明时不用指定长度<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;创建数组：<br />
&nbsp;&nbsp;创建基本数据类型数组：int[] i = new int[2]; <br />
&nbsp;&nbsp;创建引用数据类型数组：Student[] s = new Student[100]; <br />
&nbsp;&nbsp;数组创建后其中的元素有初始值<br />
&nbsp;&nbsp;&nbsp;类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 黙认值 <br />
&nbsp;&nbsp;&nbsp;byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;0 <br />
&nbsp;&nbsp;&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;0 <br />
&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;0 <br />
&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;0l <br />
&nbsp;&nbsp;&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;0.0f <br />
&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0d <br />
&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;\u0000<br />
&nbsp;&nbsp;&nbsp;boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;false <br />
&nbsp;&nbsp;&nbsp;reference types&nbsp;&nbsp;&nbsp; &nbsp;null<br />
&nbsp;&nbsp;注：<br />
&nbsp;&nbsp;&nbsp;创建时一定要指定长度<br />
&nbsp;&nbsp;&nbsp;int[] i2=new int[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//error<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;初始化数组： <br />
&nbsp;&nbsp;声明、创建、初始化分开： <br />
&nbsp;&nbsp;&nbsp;int[] i;&nbsp;&nbsp; //定义数组<br />
&nbsp;&nbsp;&nbsp;i = new int[2]; &nbsp;//分配空间<br />
&nbsp;&nbsp;&nbsp;i[0] = 0;&nbsp;&nbsp; &nbsp;//初始化<br />
&nbsp;&nbsp;&nbsp;i[1] = 1; <br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;声明、创建、初始化在同一时间 ：<br />
&nbsp;&nbsp;&nbsp;int[] i = {0,1};&nbsp; &nbsp;//显示初始化&nbsp; {}中有几个值,则数组长度为几<br />
&nbsp;&nbsp;&nbsp;Student[] s = {new Student(),new Student()}; <br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;注：&nbsp;int[] i=new int[]{1,2,3};&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//后面[]中不可以写数值<br />
&nbsp;&nbsp;&nbsp;int[] i1=new int[3]{1,2,3};&nbsp;&nbsp; &nbsp;//error<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;二维数组：(其实是一个一维数组，它的每一个元素又是一个一维数组)<br />
&nbsp;&nbsp;int[][] i1 = new int[2][3]; <br />
&nbsp;&nbsp;int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};<br />
&nbsp;&nbsp;int[][] i3 = new int[][3];&nbsp;&nbsp;//不允许高维没分配空间而先给低维分配空间<br />
&nbsp;&nbsp;int[][] i2 = new int[2][]; <br />
&nbsp;&nbsp;i2[0] = new int[2];<br />
&nbsp;&nbsp;i2[1] = new int[3];&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;<br />
&nbsp;数组长度：<br />
&nbsp;&nbsp;数组的属性length<br />
&nbsp;&nbsp;数组长度一旦确定,不可改变&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;int[] i = new int[5]; 则i.length= 5<br />
&nbsp;&nbsp;<br />
&nbsp;数组拷贝：<br />
&nbsp;&nbsp;系统类System提供的<br />
&nbsp;&nbsp;static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) <br />
&nbsp;&nbsp;&nbsp;src： 源数组&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;srcPos： 从源数组哪个位置开始拷贝(位置指的是元素的下标)<br />
&nbsp;&nbsp;&nbsp;dest： 目标数组<br />
&nbsp;&nbsp;&nbsp;destPos： 拷贝的元素放到目标数组的起始位置<br />
&nbsp;&nbsp;&nbsp;length： 拷贝多少个<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;数组排序：<br />
&nbsp;&nbsp;自己实现一个排序方法来进行排序<br />
&nbsp;&nbsp;或者调用java.util.Arrays.sort(Object o)<br />
</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/235555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-10-20 22:43 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/10/20/235555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置java环境变量(新手学习01)</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/10/14/234298.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Tue, 14 Oct 2008 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/10/14/234298.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/234298.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/10/14/234298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/234298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/234298.html</trackback:ping><description><![CDATA[<p>JAVA_HOME：配置JDK的目录<br />
&nbsp;CLASSPATH：指定到哪里去找运行时需要用到的类代码（字节码）<br />
&nbsp;PATH：指定可执行程序的位置<br />
&nbsp;<br />
&nbsp;LINUX系统（在" .bash_profile "下的环境变量设置）<br />
&nbsp;&nbsp;JAVA_HOME=/opt/jdk1.5.0_06<br />
&nbsp;&nbsp;CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar<br />
&nbsp;&nbsp;PATH=$PATH:$JAVA_HOME/bin:.<br />
&nbsp;&nbsp;export JAVA_HOME CLASSPATH PATH&nbsp;&nbsp;&nbsp;&nbsp; (将指定的环境变量声明为全局的)<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;windows系统：<br />
&nbsp;&nbsp;右击我的电脑--&gt;属性--&gt;高级--&gt;环境变量<br />
&nbsp;&nbsp;<br />
Java的运行过程：<br />
&nbsp;编译：生成可执行文件，如C++中利用g++生成a.out，效率高，但不跨平台<br />
&nbsp;解释：解释器把源文件逐行解释，跨平台但效率不高<br />
&nbsp;<br />
&nbsp;在java中：先编译后解释，把.java文件编译成.class字节码文件<br />
&nbsp;&nbsp;Java源代码文件(.java文件)---&gt;<br />
&nbsp;&nbsp;Java编译器(javac)---&gt;<br />
&nbsp;&nbsp;Java字节码文件(.class文件，平台无关的)---&gt;<br />
&nbsp;&nbsp;Java解释器(java)，执行Java字节码</p>
<p>Java的垃圾回收：<br />
&nbsp;由一个后台线程gc进行垃圾回收<br />
&nbsp;虚拟机判定内存不够的时候会中断代码的运行，这时候gc才进行垃圾回收<br />
&nbsp;缺点：不能够精确的去回收内存<br />
&nbsp;java.lang.System.gc();&nbsp;建议回收内存，但系统不一定回应，他会先去看内存是否够用，够用则不予理睬，不够用才会去进行垃圾回收<br />
&nbsp;内存中什么算是垃圾：<br />
&nbsp;&nbsp;不在被引用的对象(局部变量，没有指针指向的)<br />
&nbsp;&nbsp;<br />
java的安全性：<br />
&nbsp;沙箱机制：只能做沙箱允许的操作<br />
&nbsp;通过下面环节，实现安全<br />
&nbsp;&nbsp;加载有用的类文件，不需要的不加载<br />
&nbsp;&nbsp;校验字节码，查看允许的操作<br />
&nbsp;&nbsp;&nbsp;查看代码和虚拟机的特性是否相符<br />
&nbsp;&nbsp;&nbsp;查看代码是否有破坏性<br />
&nbsp;&nbsp;&nbsp;查看是否有违规操作，如越界<br />
&nbsp;&nbsp;&nbsp;查看类型是否匹配，类型转换是否能正确执行<br />
&nbsp;&nbsp;&nbsp;<br />
源程序：<br />
&nbsp;package mypack;&nbsp;&nbsp;//相当于一个目录<br />
&nbsp;<br />
&nbsp;public class HelloWorld{<br />
&nbsp;&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Hello World&#8221;); <br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;注：<br />
&nbsp;&nbsp;1、文件名必须和public修饰的类名一致，以.java作为文件后缀，如果定义的类不是public的，则文件名与类名可以不同。<br />
&nbsp;&nbsp;2、一个.java文件中可以有多个class，但是只有一个public修饰的类。<br />
&nbsp;&nbsp;3、java源代码文件编译后，一个类对应生成一个.class文件<br />
&nbsp;&nbsp;4、一个java应用程序应该包含一个main()方法，而且其签名是固定的，它是应用程序的入口方法，可以定义在任意一个类中，不一定是public修饰的类<br />
&nbsp;&nbsp;编译：javac -d . HelloWorld.java<br />
&nbsp;&nbsp;&nbsp;含有包的类，在编译的时候最好用上面的格式，-d指的是让该类生成的时候按照包结构去生成，" . "指的是在当前路径下生成<br />
&nbsp;&nbsp;&nbsp;如果不用上面的格式，也可以用javac HelloWorld.java，但是需要注意的是包结构就要由自己去建立，然后将生成的.class文件放到该目录下<br />
&nbsp;&nbsp;执行：java mypack.HelloWorld<br />
&nbsp;&nbsp;&nbsp;将字节码文件交给Java虚拟机去解释执行<br />
&nbsp;&nbsp;&nbsp;需要注意的事，必须使用包名.类名去解释执行<br />
&nbsp;&nbsp;&nbsp;<br />
包(package)：把源文件放在目录下<br />
&nbsp;由于工程的需要，将不同的源文件放在不同的目录下，从而引入了包。<br />
&nbsp;包可以看作就是一个存放java源文件的目录。<br />
&nbsp;在源码中声明一个包名：package p;(只能放在第一行，且最多只能是一行)<br />
&nbsp;如果指定多层包，那么在包名之间我们可以用.作为分隔符：package p1.p2.p3.p4;<br />
&nbsp;用&#8220;javac HelloWorld.java &#8211;d 绝对路径&#8221;，编译后生成的字节码文件就会放在指定的包结构下<br />
&nbsp;执行该程序需要用" java 包名.类名 "<br />
&nbsp;引进包中的某个类：import 包名.类名;<br />
&nbsp;引进包中的所有类：import 包名.*;<br />
&nbsp;&nbsp;&nbsp;<br />
注释：<br />
&nbsp;//&nbsp;单行注释， 到本行结束的所有字符会被编译器忽略<br />
&nbsp;/* */&nbsp;多行注释，&nbsp; 在/*&nbsp; */之间的所有字符会被编译器忽略<br />
&nbsp;/**&nbsp; */&nbsp; &nbsp;文档注释， java特有的，在/**&nbsp; */之间的所有字符会被编译器忽略<br />
&nbsp;可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包，类，属性，方法，构造器，引入之前的注释才可以进行抽取)<br />
&nbsp;&nbsp; &nbsp;<br />
标识符：<br />
&nbsp;命名规则：<br />
&nbsp;&nbsp;(1) 由字母、数字、下划线、$组成，不能以数字开头<br />
&nbsp;&nbsp;(2) 大小写敏感<br />
&nbsp;&nbsp;(3) 不得使用java中的关键字和保留字<br />
&nbsp;<br />
&nbsp;关键字：都是小写的，jdk1.2多了strictfp(经准浮点型)，关键字 jdk1.4多了assert(断言)关键字，&nbsp; jdk1.5多了enum(枚举) 关键字<br />
&nbsp;&nbsp;随着学习进度，会慢慢接触到的<br />
&nbsp;&nbsp;true、false、null严格说不应该算关键字，应称其为保留字更合适<br />
&nbsp;<br />
&nbsp;习惯：<br />
&nbsp;&nbsp;(1) 标识符要符合语义信息<br />
&nbsp;&nbsp;(2) 包名所有字母小写<br />
&nbsp;&nbsp;(3) 类名每个单词首字母大写，其它小写 //TarenaStudent<br />
&nbsp;&nbsp;(4) 变量和方法：第一个单词小写，从第二个单词开始首字母大写 //tarenaStudent<br />
&nbsp;&nbsp;(5) 常量：所有字母大写，每个单词之间用" _ "连接<br />
&nbsp;&nbsp;<br />
基本数据类型：8种<br />
&nbsp;1) 整型 <br />
&nbsp;&nbsp;byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1B&nbsp; 8位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -128到127 <br />
&nbsp;&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2B&nbsp; 16位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -2^15到(2^15)-1 <br />
&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4B&nbsp; 32位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -2^31到(2^31)-1 <br />
&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8B&nbsp; 64位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -2^63到(2^63)-1 <br />
&nbsp;2) 浮点类型 <br />
&nbsp;&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4B&nbsp;&nbsp; 32位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp; 8B&nbsp;&nbsp; 64位 <br />
&nbsp;3) 字符类型 <br />
&nbsp;&nbsp; &nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2B&nbsp;16位 &nbsp;<br />
&nbsp;4) 布尔型 &nbsp;1B<br />
&nbsp;&nbsp;boolean&nbsp;&nbsp;&nbsp; false/true<br />
&nbsp;&nbsp;<br />
&nbsp;注：<br />
&nbsp;&nbsp;1、Java中的自动类型提升问题。<br />
&nbsp;&nbsp;&nbsp;1)、正向过程：从低字节到高字节可以自动转换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;byte-&gt;short-&gt;int-&gt;long-&gt;float-&gt;double<br />
&nbsp;&nbsp;&nbsp;2)、逆向过程：从高字节到低字节用强制类型转换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;例：int a = (int)4.562；<br />
&nbsp;&nbsp;&nbsp;&nbsp;注：逆向转换将丢失精度。<br />
&nbsp;&nbsp; 2、boolean：只有true和false。<br />
&nbsp;&nbsp; 3、char：Java中用" \u四位十六进制的数字 (即使在注释中出现\u，后面如果跟的不是4个数字，也会报错)"表示将字符转换成对应的unicode编码，字符类型要用单引号括起来。<br />
&nbsp;&nbsp; 4、黙认浮点类型为double，float数据类型有一个后缀为" f "或" F "。<br />
&nbsp;&nbsp; 5、long类型有一个后缀，为" l " 或者" L "<br />
&nbsp;<br />
引用数据类型：<br />
&nbsp;类、接口、数组<br />
&nbsp;引用类型 变量名 = new 引用类型名(参数);&nbsp;&nbsp;//new后面一般跟的都是类的构造器<br />
&nbsp;成员：写在类体括号里面的<br />
&nbsp;<br />
内存空间的分配：<br />
&nbsp;内存分为：<br />
&nbsp;&nbsp;栈：存放简单数据类型变量(值和变量名都存在栈中)，存放引用数据类型的变量名以及它所指向的实例的首地址<br />
&nbsp;&nbsp;堆：存放引用数据类型的实例</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/234298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-10-14 19:44 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/10/14/234298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国软件商机的“金角银边草肚皮”[转]</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/10/09/233417.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Thu, 09 Oct 2008 11:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/10/09/233417.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/233417.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/10/09/233417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/233417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/233417.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
在中国，做软件是当今最时髦的事情，但做软件早已不仅仅是商业，而已经上升为一门艺术；早已经不是真正搞软件的人独占的地盘，而是融入房地产商、硬件厂商、服务商、各类投机者等三教九流无所不包的社会大棋局。　　显然，这是一次几十年不遇的政策机遇，其最大价值不在于真正的软件产业本身，不在于软件业务本身。因为真正的中国软件市场现在撑死也就200个亿，而且大部分(2／3以上)由国外软件公司所占有。但是，这次以软件为名义的热潮，其调动和转移的财富和资源，是千亿甚至万亿计的，是软件业本身的1～2个数量级以上，甚至也是几年前互联网热潮的2～3个数量级以上。这是所有试图把握软件机遇的人，必须首先判明的方向性问题。 <br />
　　我们借用围棋的术语，可以把商机划分为&#8220;金角银边草肚皮&#8221;，鲜明地分析如下： <br />
　　1、金角：最软的高科技和最土的房地产，鲜花插牛粪也好，天造一双地配一对也好，反正今后今年他们都将如胶似漆！以软件的名义，全国各省市，各区县都将有成千上万亩的土地纷纷成为软件园，这无疑是房地产的大好机遇。因此，各地的软件园和软件学院，以及其他以软件名义腾出的地皮，是这场软件热潮的价值核心。 <br />
　　2、银边：政策效应的最根本特点就是全国上下会争先恐后，一齐跟进。上上下下都会响应号召，出台各种扶持政策。包括税收减免、资金投入以及其他优先政策，都可以形成不菲的政策资源。这些资源利用得当也可以及时转化为真金白银。因此，如果几年之内，全国的硬件公司、IT服务公司甚至其他行业的公司，全部或者大多都转变成软件公司，你也不要大惊小怪。只要真正有利益。软件业全国上下大繁荣，也是可以期待的。当然，这是中国&#8220;特色&#8221;的软件业，是远远超越了国际上一般标准的软件概念。 <br />
　　3、草肚皮：大获其利的很少是真正的软件公司。因为那些一门心思搞软件的人，大多笨手笨脚。热潮之下，供需严重失衡，软件人才几年后很可能沦为青菜萝卜一样。不过，那些真正一头扎进软件，真的做成软件公司，也可能不错的。虽然，随着软件公司迅速繁衍，真的假的都来争夺有限的市场，竞争进一步激化，十分辛苦。但是，现在哪一行不辛苦？如果定位准确，真的能够一不留神做成、做大，然后融资上市，也是一步登天。 <br />
　　由此，所有赶潮软件的人，从高到低，可以分为三类：最上等是&#8220;为地皮而软件&#8221;，中间是&#8220;为政策而软件&#8221;，最下等是&#8220;为软件而软件&#8221;，构成了食物链的金字塔。与国内其他行业的政策造市的基本规律没有本质差异。 <br />
　　面对软件热潮中的一些不和谐现象，我们没有必要只从消极和负面的角度来评判。毕竟，在这股热潮中，假作真时假也真，软件业之外的庞大资源肯定会有一小部分要转化到软件产业。由于资源总量庞大，有百分之一或者百分之几的转化，对于软件业来说，就是&#8220;久旱逢甘雨&#8221;，就是极大的支持。比如以国内软件园圈地最为成功的托普为例，它在全国的几十个软件园都是不错的房地产项目，运作得当，利润十分丰厚。拿出一小部分利润来投入软件，补贴软件，几年以后一不留神也会&#8220;培育&#8221;出真正的软件业务。毕竟，大家打的都是&#8220;软件&#8221;的旗号，完全没有软件，这个美妙的游戏也是难以为继的。这一切总比那些纯粹的房地产商要好一些！ <br />
　　因此，吃着房地产的剩饭，软件也可能一点点长大成人。走出过门，走向世界；挑战微软，打败印度，也不是完全没有可能。市场就是一个追逐利益最大化的棋局，消极的批评作用和意义不大。不如，我们正视现实，承认积极、正面的效应，坦然应对这场势不可当的大热潮。 <br />
　　总之，政策已经为我们布好了巨大的棋盘，至于如何布局和下子，那就是一个各显其能的时候。我们当然真诚希望，那些真正有心推动中国软件业发展的人士，能够认清形势，放开思路。在这场大规模的财富与资源转移中，不要太固守成见，应放开手脚，争取获得尽可能多的利益，使中国软件得到更好的推动。<img id="paperPicArea1" style="display: none; position: relative" src="http://imgcache.qq.com/ac/b.gif"  alt="" />
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/233417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-10-09 19:01 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/10/09/233417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>