<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>喝Coffee学Java</title>
    <description>喝coffee学java</description>
    <link>http://javaboy2006.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>linux文本文件查看、显示命令（from Magic Linux 1.2 用户手册）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/202279" style="color:red;">http://javaboy2006.javaeye.com/blog/202279</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.magiclinux.org/node/56" target="_blank">http://www.magiclinux.org/node/56</a><br /><br /><strong>5.3.3 文本文件查看、显示命令</strong><br /><br /><br /><br /><strong>1、cat 显示文件内容命令。</strong><br /><br /><br /><br />命令格式：<strong>#cat [[选项]] &lt;文件列表></strong><br /><br /><br /><br />常用选项:<br /><br /><ul><li>-b,计算所有非空输出行，开始行编号为1。</li><li>-n，计算所有输出行(包括空行)，开始行编号为1。</li><li>-s,将相连的多个空行用一个空行来代替。</li><li>-e,在每行的未尾添加$符号，便于确认每一行，因为有些行内容太长了，在显示时会在显示器上以多行表示。</li></ul><br /><br /><br />命令使用说明：<br /><br /><br /><br />例子：<br /><br /><br />例A： 把 textfile1 的文件内容加上行号后输入 textfile2 这个文件里<br />#cat -n textfile1 > textfile2 <br /> <br />例B： 把 textfile1 和 textfile2 的档案内容加上行号（空白行不加）之后将内容附加到 textfile3 <br />#cat -b textfile1 textfile2 >> textfile3 <br /><br />例C：显示/etc/fstab文件的内容。<br />#cat /etc/fstab<br /><br /><br /><strong>2、head 查看文件头部内容命令。</strong><br /><br /><br /><br />命令格式:<strong># head [[选项]] &lt;文件列表></strong> <br /><br /><br /><br />常用选项：<br /><br /><ul><li>-c,--bytes=SIZE ,打印文件开头的SIZE字节内容。</li><li>-n,--lines=NUMBER，打印文件开头的NUMBER行，默认是输出前面10行。</li><li>-q，表明不显示文件名的首部。</li><li>-v，表明要显示文件名的首部。</li></ul><br /><br /><br />命令使用说明：<br /><br />用这个命令主要是用来显示文件我头部内容。以确认是不是我们想要打开或查找的文件。<br /><br /><br /><br />例子：<br /><br /><br />例A：比如，我的/mnt/D目录下有一个文件名“readme.txt”，我想看它头几行的内容，可用命令：<br /># head  /mnt/D/readme.txt<br />Macromedia<br />Flash Player 6 for Linux<br />Mozilla Plug-in and Standalone players<br />Update Version 6.0r79<br />4 March 2003<br /><br /><br />New in This Version<br />-------------------<br />find for the dir<br /><br /><br /><strong>3、tail 查看文件尾部内容命令。</strong> <br /><br /><br /><br />命令格式：<strong># tail [[选项]] &lt;文件列表></strong> <br /><br /><br /><br />常用选项:<br /><br /><ul><li>-c,--bytes=SIZE ,打印文件最后的SIZE字节内容。</li><li>-n,--lines=NUMBER，打印文件最后的NUMBER行，默认是输出前面10行。</li><li>-q，表明不显示文件名的首部。</li><li>-v，表明要显示文件名的首部。</li></ul><br /><br /><br />命令使用说明:<br /><br />用这个命令主要是用来显示文件我尾部内容。以确认是不是我们想要打开或查找的文件。<br /><br /><br /><br />例子：<br /><br /><br />例A：在上例中，若想看后面10行的内容，可用命令：<br />#tail /mnt/D/readme.txt<br />2) Browser version<br />3) Reproducible steps including a URL to the web site where the <br />   problem was encountered.<br /><br />If we need further information about a bug, you will be contacted.  An<br />automated reply will be sent to assure you that we have received your<br />bug report.  Due to the volume of mail received we are not able to<br />individually respond to each report.<br /><br /><br /><br /><strong>4、grep 查找文件内容命令。</strong><br /><br />命令格式：<strong>#grep [[选项]] &lt;匹配字符> &lt;文件列表></strong> <br /><br /><br /><br />常用选项:<br /><br /><ul><li>-c，对匹配的行进行计数</li><li>-l，只显示包含匹配的文件的文件名。</li><li>-h，不显示包含匹配的文件的文件名。</li><li>-i,产生区分大小写的匹配，默认情况是区分大小写的。</li><li>-v,列出不匹配的行。</li></ul><br /><br /><br />命令使用说明：<br /><br />这个命令主要是用来在终端中显示查找某个特定的字符串，找出与给定模式相匹配的内容。文件列表中，各个文件之间用空格分开。<br /><br /><br /><br />例子:<br /><br />例A：在文件example中搜索匹配字符“text file”。<br />#grep 'text file'  example  <br /><br /><br /><strong>5、more 分页显示文件命令。</strong> <br /><br /><br /><br />命令格式：<strong>more [[选项]] &lt;文件名></strong> <br /><br />常用选项：<br /><br /><ul><li>-c,在文本翻面时从头清除一行，后再最后写下一行。通常，more清除屏幕，然后再写每一行。</li><li>-n,用来建立能显示n行的显示屏窗口。</li><li>-d,显示操作提示符：“Press space to continue,'q' quit",以代替more的默认提示符。</li><li>-s,把连续的空行压缩为一行。</li><li>-p,不滚屏，清屏并显示文本。</li></ul><br /><br /><br />命令使用说明：<br /><br />用这命令在终端分屏显示文件内容。<br /><br /><br />例子：<br /><br /><br />例A:分页显示文件/root/log.txt的内容。<br />#more /root/log.txt<br /><br /><br /><strong>6、less 分页显示文件命令</strong> <br /><br /><br /><br />命令格式：<strong>less [[选项]] &lt;文件名> </strong> <br /><br />常用选项：<br /><br /><ul><li>-?,在屏幕下面显示less的使用帮助。</li><li>-a,在当前屏幕显示的最后一行之后开始查询。</li><li>-c,从顶行向下全屏重写。</li><li>-E，显示到文件尾后自动退出less。默认按Q键退出。</li><li>-n，去掉行号。</li><li>-s，将多个连续空行压缩为一行。</li><li>-x n，指定每次按制表符走n格，n的默认值为8 。</li></ul><br /><br /><br />命令使用说明：<br /><br />这个命令与more功能大致相同，但less可以按 page up 和page down这两个键向前或向后播页。而more没有这个功能。<br /><br /><br />例子：<br /><br /><br />例A：显示/root/log.txt的内容。<br />#less  /root/log.txt
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/202279#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 20:03:37 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/202279</link>
        <guid>http://javaboy2006.javaeye.com/blog/202279</guid>
      </item>
      <item>
        <title>windows xp卸载ie7方法</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/201393" style="color:red;">http://javaboy2006.javaeye.com/blog/201393</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          安装IE7.0需要较高的硬件支持（1G以上CPU 512M内存），否则运行起来～◎＃￥％……※&^*～晕S。如何卸载呢？<br />IE其实是不能完全卸载的，IE已经完全融入到了windows系统中，如果卸载会造成系统崩溃。我们可以按以下步骤利用windows XP中的IE6.0修复方法<br />1、在“运行”输入“regedit”回车，打开注册表。<br />2。在注册表中找到HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ActiveSetup\\ InstalledComponents\\{89820200-ECBD-11cf-8B85-00AA005B4383},在其右窗口中，将 IsInstalled值，由“1”改为“0”。<br />3、在“控制面板”里的“添加或删除程序”中选中“显示更新”，然后卸载IE7。<br />4、重启，系统将自动删除IE，并自动重装IE。OK！
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/201393#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Jun 2008 18:43:34 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/201393</link>
        <guid>http://javaboy2006.javaeye.com/blog/201393</guid>
      </item>
      <item>
        <title>今天看到一个很好的blog：http://www.ixdba.com（from taobaodba）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/200622" style="color:red;">http://javaboy2006.javaeye.com/blog/200622</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我的职业生涯之门外徘徊：我该怎么学习Oracle<br /><a href="http://www.ixdba.com/html/y2007/m01/18-employment-03.html" target="_blank">http://www.ixdba.com/html/y2007/m01/18-employment-03.html</a><br />我的职业生涯之初入门路：我在公安厅的那些日子<br /><a href="http://www.ixdba.com/html/y2007/m01/19-employment-04.html" target="_blank">http://www.ixdba.com/html/y2007/m01/19-employment-04.html</a><br />《我的职业生涯之门外徘徊》系列文章写都不错，朴实生动。<br />高手都不是一步登天，而是一步一步成长起来的。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/200622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 17:50:23 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/200622</link>
        <guid>http://javaboy2006.javaeye.com/blog/200622</guid>
      </item>
      <item>
        <title>&lt;button&gt;和&lt;input type=&quot;submit&quot;&gt;区别（2008.4.8笔试）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/200371" style="color:red;">http://javaboy2006.javaeye.com/blog/200371</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://blog.csdn.net/qianling3439/archive/2007/12/07/1922165.aspx" target="_blank">http://blog.csdn.net/qianling3439/archive/2007/12/07/1922165.aspx</a><br /><a href="http://topic.csdn.net/t/20060729/17/4914018.html" target="_blank">http://topic.csdn.net/t/20060729/17/4914018.html</a><br /><a href="http://www.memoon.cn/news_view.asp?id=7429" target="_blank">http://www.memoon.cn/news_view.asp?id=7429</a>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/200371#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 09:51:38 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/200371</link>
        <guid>http://javaboy2006.javaeye.com/blog/200371</guid>
      </item>
      <item>
        <title>database link使用</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/187765" style="color:red;">http://javaboy2006.javaeye.com/blog/187765</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="sql">
drop public database link mylink;

create public database link mylink connect to username identified by pwd using 'ua89';

select * from global_name@mylink;

select * from tb_ua_user_info@mylink;
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/187765#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 20:56:47 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/187765</link>
        <guid>http://javaboy2006.javaeye.com/blog/187765</guid>
      </item>
      <item>
        <title>复合主键外连接（2008.4.25笔试）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/186934" style="color:red;">http://javaboy2006.javaeye.com/blog/186934</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="sql">
--测试数据
if exists(select [id] from sysobjects where name='student')
	drop table student
go

create table student
(
	sname varchar(20) not null,
	sclass varchar(20) not null
)
go

alter table student add constraint pk_student primary key(sname,sclass);
go

if exists(select [id] from sysobjects where name='score')
	drop table score
go

create table score
(
	scoreid int not null primary key identity(1,1),
	sname varchar(20) not null,
	sclass varchar(20) not null,
	score float
)
go

alter table score add constraint fk_score foreign key(sname,sclass) references student(sname,sclass);
go

insert into student values('aaa','1');
insert into student values('ccc','2');
insert into student values('bbb','2');
insert into student values('ddd','2');
insert into student values('ccc','3');
insert into student values('ddd','4');

insert into score(sname,sclass,score) values('aaa',1,66);
insert into score(sname,sclass,score) values('bbb',2,77);
insert into score(sname,sclass,score) values('ccc',2,88);
insert into score(sname,sclass,score) values('ddd',4,99);

/*
--外键插入null值
insert into score(score) values(66);
insert into score(score) values(77);
insert into score(score) values(77);
*/

select * from student;
select * from score;

--复合主键内连接
select * from student t inner join score s on t.sname = s.sname and t.sclass = s.sclass;

--复合主键左外连接
select t.sname,t.sclass from student t left outer join score s on t.sname = s.sname and t.sclass = s.sclass where s.scoreid is null;
</pre><br /><br />测试过程中发现= null和is null的区别，特引用下面一篇文章加以说明：<br />SQL Server Null的比较运算（转）<br /><br />今天我在写sql的时候发现用<br /><br />UPDATE dbo.tblInvTransaction<br />SET Area_Type = 'Gross'，<br />WHERE (Area_Type  = null)<br /><br />结果为零。<br /><br /><br />然后查到下面这个文章<br />改成<br /><br />UPDATE dbo.tblInvTransaction<br />SET Area_Type = 'Gross'<br />WHERE (Area_Type is NULL )<br />就ok了<br /><br /><br /><br />前几天写一个数据库查询程序，碰到的一个问题，是关于SQL Server的Null值的比较运算的。一般情况下我们查询空值或者非空值的时候，用的是is null/is not null，而很少用=/&lt;>。但是在我的这个程序中，没有用is这样的关键字，而是用=/&lt;>这样的比较元算符号，这就碰到了一些问题。<br />问题起源于一个Web查询页面，因为问题比较复杂的，所以简化一下来说明。<br />在页面上用户可以自由选择数据表的某些字段，填写该字段的查询条件，先是选择比较运算符号（=，&lt;>等），然后填写值。提交之后，就需要创建一个SQL语句，查询条件的各部分由不同的程序模块创建。这里涉及两个程序模块，一个模块根据提交创建比较运算符号，一个模块负责创建比较值模块。在创建值模块中有这样一个规则，“如果提交的值是空的，把该值设为Null”。<br />但是我发现，如果比价值为Null的时候，同样一个SQL查询语句放在存储过程里边查询和通过应用程序直接查询的结果是不一样的。<br />查了查SQL Server文档，发现Null值的比较运算，存在两种规则：<br />在SQL2000中Null值的比较运算有两种规则。一种是ANSI SQL（SQL-92）规定的Null值的比较取值结果都为False，既Null=Null取值也是False。另一种不准循ANSI SQL标准，即Null=Null为True。<br />以一张表T的查询为例。 <br /><br />表T存在下面的数据： <br />RowId Data<br />--------------<br />1 'test'<br />2 Null<br />3 'test1' <br /><br />按照ANSI SQL标准，下面的两个查询都不返回任何行：<br />Query1: select * from T where Data=null<br />Query2: select * from T where Data&lt;>null<br />而按照非ANSI SQL标准，查询1将返回第二行，查询2返回1、3行。<br />ANSI SQL标准中取得Null值的行需要用下面的查询：<br />select * from T where Data is null<br />反之则用is not null。由此可见非ANSI SQL标准中Data=Null等同于Data Is Null，Data&lt;>Null等同于Data Is Not Null。 <br /><br />而控制采用那一种规则，需要使用命令SET ANSI_NULLS [ON/OFF]。ON值采用ANSI SQL标准，OFF值采用非标准模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换，只是这个命令控制的是一组符合SQL-92标准的设置，其中就包括Null值的标准。 <br /><br />默认情况下，数据库管理程序（DB-Library）是SET ANSI_NULLS为OFF的。但是我们的大多数应用程序，都是通过ODBC或者OLEDB来访问数据库的，作为一种开放兼容的数据库访问程序，或许是兼容性的考虑，SET ANSI_NULLS值设置为ON。这样一来带来的一些问题是需要注意的。像存储过程或者自定义函数这样的应用程序都是基于DB-Library的，默认情况下，SET ANSI_NULLS为OFF，并且在这样的程序中，不能使用SET ANSI_NULLS在一个环境中修改规则，只能修改数据库配置参数。 <br /><br />考虑下面这种情况。<br />你的应用程序使用ADODB来访问数据库，采用OleDb或者ODBC数据提供程序。对于前面的查询1：<br />select * from T where Data=null<br />你可以直接发送命令取得结果集，也可以把它放到存储过程当中。但是他们的查询结果是不一样的。如果直接使用查询命令，什么结果也没有，而如果访问存储过程，你获得第2行的数据。 <br /><br />我写了一个.Net程序来验证这一点。同时也为了验证.Net SqlClient的SET ANSI_NULLS的设置，由于SqlClient不是通过OleDb或者ODBC这些数据提供程序来访问SQL Server，而是直接对SQL Server进行访问，本来我以为它会采用SQL Server默认的设置，但是结果恰恰相反，它的默认设置和OleDb、ODBC一样。 <br /><br />using System;<br />using System.Data;<br />using System.Data.SqlClient;<br />using System.Data.OleDb;<br />using System.Data.Odbc;<br />public class AnsiNullsTest{<br />public static void Main(String[] args){<br />   IDbConnection conn;<br />   String connType = "SqlClient";<br />  if(args.Length>0)connType = args[0];<br />  if(connType.ToUpper()=="OLEDB"){<br />    Console.WriteLine("Connection Type:OLEDB");<br />    conn = new OleDbConnection("Provider=SQLOLEDB.1;User ID=sa;PWD=test;Initial Catalog=TEST;Data Source=TEST");<br />   }else if(connType.ToUpper()=="ODBC"){<br />    Console.WriteLine("Connection Type:ODBC");<br />    conn = new OdbcConnection("Driver={SQL Server};UID=sa;PWD=test;Database=TEST;Server=TEST");<br />   }else{<br />    Console.WriteLine("Connection Type:SQLClient");<br />    conn = new SqlConnection("Server=TEST;Database=TEST;User ID=sa;PWD=test");<br />   }<br />   Test(conn);<br />}<br />public static void Test(IDbConnection conn){<br />   String query1 = "select 'Test' where null=null";<br />   String query2 = "exec p_Test"; //存储过程中是一样的SQL语句<br />   IDbCommand cmd;<br />   IDataReader reader;<br />   Console.WriteLine("print 'Test' set ansi_nulls off");<br />  try{<br />    cmd = conn.CreateCommand();<br />    conn.Open();<br />    cmd.CommandText = query1;<br />    reader = cmd.ExecuteReader();<br />    Console.WriteLine("command:" + query1);<br />   while(reader.Read()){<br />     Console.WriteLine("result:" + reader[0].ToString());<br />    }<br />    reader.Close();<br />    cmd.CommandText = query2;<br />    reader = cmd.ExecuteReader();<br />    Console.WriteLine("command:" + query2);<br />   while(reader.Read()){<br />     Console.WriteLine("result:" + reader[0].ToString());<br />    }<br />    reader.Close();<br />   }<br />  catch(Exception ex){<br />    Console.WriteLine(ex.Message);<br />   }<br />  finally{<br />    conn.Close();<br />   }<br />  <br />}<br />} <br /><br />它有一个参数，根据参数采用不同的参数值采用不同的数据库访问程序。命令对象作了两次查询，一次是SQL查询命令，一次是调用存储过程。语句都是一样，但是结果不一样。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/186934#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 21:27:19 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/186934</link>
        <guid>http://javaboy2006.javaeye.com/blog/186934</guid>
      </item>
      <item>
        <title>java获取系统时间两种方法</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/184590" style="color:red;">http://javaboy2006.javaeye.com/blog/184590</a>&nbsp;
          发表时间: 2008年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
		// 1、java.util.Date + java.text.SimpleDateFormat
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss EEE");
		System.out.println(format.format(new java.util.Date()));

		// 2、java.util.Date + java.util.Calendar
		java.util.Calendar calendar = java.util.Calendar.getInstance();
		calendar.setTime(new java.util.Date());
		System.out.println(calendar.get(calendar.YEAR) + "-"
				+ (calendar.get(calendar.MONTH) + 1) + "-"
				+ calendar.get(calendar.DAY_OF_MONTH) + " "
				+ calendar.get(calendar.HOUR_OF_DAY) + ":"
				+ calendar.get(calendar.MINUTE) + ":"
				+ calendar.get(calendar.SECOND) + " 星期"
				+ (calendar.get(calendar.DAY_OF_WEEK) - 1));

		// 年份+1
		calendar.add(calendar.YEAR, +1);
		// 月份+1
		calendar.add(calendar.MONTH, +1);
		// 天数-1
		calendar.add(calendar.DAY_OF_MONTH, -1);
		// 1：星期日，2：星期一，3：星期二，4：星期三，5：星期四，6：星期五，7：星期六
		// 星期-1
		calendar.add(calendar.DAY_OF_WEEK, -1);
输出：
2008-04-20 16:43:19 星期日
2008-4-20 16:43:19 星期0
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/184590#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Apr 2008 15:32:18 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/184590</link>
        <guid>http://javaboy2006.javaeye.com/blog/184590</guid>
      </item>
      <item>
        <title>模糊查询使用对索引的影响（2008.4.11面试）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/182029" style="color:red;">http://javaboy2006.javaeye.com/blog/182029</a>&nbsp;
          发表时间: 2008年04月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          like使用了前%，这种会造成全表scan，即使你在where条件后设置了索引列的查询条件。所以建议在like时只使用后%。<br />----------------------<br />如果想 like '1234%' 则直接用index，<br />like '%1234' 则用反向索引，<br />like '%123%' 则没什么办法，只能是全表扫描。<br />----------------------<br />由于数据库索引不是为全文索引设计的，因此，使用like "%keyword%"时，数据库索引是不起作用的，在使用like查询时，搜索过程又变成类似于一页页翻书的遍历过程了，所以对于含有模糊查询的数据库服务来说，LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配：like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/182029#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Apr 2008 11:06:56 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/182029</link>
        <guid>http://javaboy2006.javaeye.com/blog/182029</guid>
      </item>
      <item>
        <title>SQL：根据第二张表字段值更新第一张表字段值（2008.4.11笔试）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/181968" style="color:red;">http://javaboy2006.javaeye.com/blog/181968</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="sql">
truncate table tab1

create table tab1
(
  a int primary key not null identity(1,1),
  b varchar(10),
  c varchar(10),
  d float,
  e float,
  f float
)
go

insert into tab1(b,c,d,e,f) values('a','aa',1,2,3);
insert into tab1(b,c,d,e,f) values('b','bb',2,3,4);
insert into tab1(b,c,d,e,f) values('c','cc',3,4,5);
insert into tab1(b,c,d,e,f) values('d','dd',4,5,6);
insert into tab1(b,c,d,e,f) values('e','ee',5,6,7);
go

select * from tab1;

--查询总分比平均分大的记录并按总分降序排列
select a,b,c,d,e,f,d+e+f as sumScore,(d+e+f)/3 as avgScore from tab1 where d+e+f>(d+e+f)/3 order by b,d+e+f desc;

--根据第二张表字段值更新第一张表字段值
--update 表一 set 表一.A = 表二.B from 表一,表二 where 表一.C = 表二.D
update tab1 set tab1.a=tab2.b from tab1,tab2 where tab1.c=tab2.d;
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/181968#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 23:06:33 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/181968</link>
        <guid>http://javaboy2006.javaeye.com/blog/181968</guid>
      </item>
      <item>
        <title>单向链表倒置</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/181303" style="color:red;">http://javaboy2006.javaeye.com/blog/181303</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="c">
	typedef struct node   
	{   
	        int data;   
	        struct node *link;   
	}NODE;
	
	void reverse(NODE head)   
	{   
	        NODE temp = null;    
	        NODE p = head->link;   
	        head->link = null;// 头结点变为尾结点
	  
	        while(p!=null)   
	        {   
	           temp = p->link;   
	           p->link = head;// 当前结点指针倒置
	           head = p;   
	           p = temp;   
	        }   
	}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/181303#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 15:29:08 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/181303</link>
        <guid>http://javaboy2006.javaeye.com/blog/181303</guid>
      </item>
      <item>
        <title>删除数组重复元素</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/181277" style="color:red;">http://javaboy2006.javaeye.com/blog/181277</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
	public static void main(String[] args) {
		getDistinct(new int[] { 6, 7, 3, 6, 5, 2, 7, 8 });
	}

	static void getDistinct(int array[]) {
		java.util.List list = new java.util.ArrayList();
		for (int i = 0; i &lt; array.length; i++) {
			if (!list.contains(array[i])) {
				list.add(array[i]);
				System.out.print(array[i] + " ");
			}
		}
	}
输出：6 7 3 5 2 8
</pre><br />看了一下ArrayList的contains()方法源码：<br /><pre name="code" class="java">
    public boolean contains(Object elem) {
	return indexOf(elem) >= 0;
    }

    public int indexOf(Object elem) {
	if (elem == null) {
	    for (int i = 0; i &lt; size; i++)
		if (elementData[i]==null)
		    return i;
	} else {
	    for (int i = 0; i &lt; size; i++)
		if (elem.equals(elementData[i]))
		    return i;
	}
	return -1;
    }
</pre><br />其实还是嵌套循环，效率不高。先记下，后面仔细想想。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/181277#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 14:28:02 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/181277</link>
        <guid>http://javaboy2006.javaeye.com/blog/181277</guid>
      </item>
      <item>
        <title>进程和线程的区别（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/181051" style="color:red;">http://javaboy2006.javaeye.com/blog/181051</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          进程和线程都是由操作系统所体会的程序运行的基本单元，系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于：<br /><br />简而言之,一个程序至少有一个进程,一个进程至少有一个线程。<br /><br />线程的划分尺度小于进程，使得多线程程序的并发性高。<br /><br />另外，进程在执行过程中拥有独立的内存单元，而多个线程共享内存，从而极大地提高了程序的运行效率。<br /><br />线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。<br /><br />从逻辑角度来看，多线程的意义在于一个应用程序中，有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用，来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/181051#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 23:13:58 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/181051</link>
        <guid>http://javaboy2006.javaeye.com/blog/181051</guid>
      </item>
      <item>
        <title>分页实现方法</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/180831" style="color:red;">http://javaboy2006.javaeye.com/blog/180831</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、分页公式： <br />所需总页数=(总记录数+每页显示记录数-1)/每页显示记录数<br />游标定位于结果集中的行号＝(当前页号-1)*每页显示记录数<br /><br />二、SQL Server：<br /><pre name="code" class="sql">
create procedure proc_page
@curpage int,		--当前页号
@pagesize int,		--每页显示记录数
@count int output	--总记录数（输出参数）
as
declare @temp int
set @temp=(@curpage-1)*@pagesize	--游标定位于结果集中的行号
select @count=count(*) from categories
declare @sql varchar(200)
set @sql='select top '+convert(varchar(30),@pagesize)+' * from categories where categoryid not in (select top '+convert(varchar(30),@temp)+' categoryid from categories)'
exec(@sql)
print @sql
go

select * from categories
exec proc_page 1,5,2
exec proc_page 2,5,2
</pre><br /><br />三、Oracle：<br /><pre name="code" class="sql">
select * from (select rownum r,col1,col2 from tab) where r>=2 and r&lt;=9;
</pre><br /><br />返回有条件且经过排序的某段记录（三层结构）<br /><pre name="code" class="sql">
select *
  from (select *
          from (select u.*, rownum num
                  from userinfo u
                 where siteid = 73
                 order by regtime desc)
         where num &lt; 5)
 where num > 11;
</pre><br /><br />返回最后1行记录<br /><pre name="code" class="sql">
select *
  from (select u.*, rownum num from userinfo u)
 where num = (select count(*) from userinfo);
</pre><br /><br />返回倒数第10行记录<br /><pre name="code" class="sql">
select *
  from (select u.*, rownum num from user_info u)
 where num = (select count(*) - 10 from userinfo);
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/180831#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 14:46:11 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/180831</link>
        <guid>http://javaboy2006.javaeye.com/blog/180831</guid>
      </item>
      <item>
        <title>根据输入日期值输出所在季度起始日期（2008.4.8笔试）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/180587" style="color:red;">http://javaboy2006.javaeye.com/blog/180587</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
/**
 * 根据输入日期值输出所在季度起始日期
 */
public class Test {

	public static void main(String[] args) {
		// TODO 自动生成方法存根
		String[] a = getQuarterDate("20070818");
		for (String s : a) {
			System.out.println(s);
		}
	}

	public static String[] getQuarterDate(String tradeDate) {
		String[] array = new String[2];

		try {
			java.util.Date date = new java.text.SimpleDateFormat("yyyyMMdd")
					.parse(tradeDate);
			java.util.Calendar cal = java.util.Calendar.getInstance();
			cal.setTime(date);
			if ((cal.get(cal.MONTH) + 1) % 3 == 0)// 季度结束月
			{
				array[1] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMinimum(cal.DATE);// 结束日期
				cal.add(cal.MONTH, -2);
				array[0] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMaximum(cal.DATE);// 开始日期
			} else if ((cal.get(cal.MONTH) + 2) % 3 == 0)// 季度中间月
			{
				cal.add(cal.MONTH, -1);
				array[0] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMinimum(cal.DATE);// 开始日期
				cal.add(cal.MONTH, +2);
				array[1] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMaximum(cal.DATE);// 结束日期
			} else if ((cal.get(cal.MONTH) + 3) % 3 == 0)// 季度起始月
			{
				array[0] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMinimum(cal.DATE);// 开始日期
				cal.add(cal.MONTH, +2);
				array[1] = cal.get(cal.YEAR) + " " + (cal.get(cal.MONTH) + 1)
						+ " " + cal.getActualMaximum(cal.DATE);// 结束日期
			}
		} catch (java.text.ParseException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		return array;
	}
}
输出：
2007 7 1
2007 9 30
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/180587#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 19:21:36 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/180587</link>
        <guid>http://javaboy2006.javaeye.com/blog/180587</guid>
      </item>
      <item>
        <title>FTP两种工作模式：主动模式（Active FTP）和被动模式（Passive FTP）（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/179295" style="color:red;">http://javaboy2006.javaeye.com/blog/179295</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在主动模式下，FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接，然后开放N+1号端口进行监听，并向服务器发出PORT N+1命令。服务器接收到命令后，会用其本地的FTP数据端口（通常是20）来连接客户端指定的端口N+1，进行数据传输。 <br />    在被动模式下，FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接，同时会开启N+1号端口。然后向服务器发送PASV命令，通知服务器自己处于被动模式。服务器收到命令后，会开放一个大于1024的端口P进行监听，然后用PORT P命令通知客户端，自己的数据端口是P。客户端收到命令后，会通过N+1号端口连接服务器的端口P，然后在两个端口之间进行数据传输。 <br />    总的来说，主动模式的FTP是指服务器主动连接客户端的数据端口，被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。 <br />    被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况，因为在这种情况下，防火墙通常配置为不允许外界访问防火墙之后主机，而只允许由防火墙之后的主机发起的连接请求通过。因此，在这种情况下不能使用主动模式的FTP传输，而被动模式的FTP可以良好的工作。<br /><br />=========================================<br /><br />FTP是仅基于TCP的服务，不支持UDP。与众不同的是FTP使用2个端口，一个数据端口和一个命令端口（也可叫做控制端口）。通常来说这两个端口是21（命令端口）和20（数据端口）。但FTP 工作方式的不同，数据端口并不总是20。这就是主动与被动FTP的最大不同之处。<br /><br />（一）主动FTP<br />主动方式的FTP是这样的：客户端从一个任意的非特权端口N（N>1024）连接到FTP服务器的命令端口，也就是21端口。然后客户端开始监听端口N+1，并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口（20）连接到客户端指定的数据端口（N+1）。<br />针对FTP服务器前面的防火墙来说，必须允许以下通讯才能支持主动方式FTP：<br /><br />1. 任何大于1024的端口到FTP服务器的21端口。（客户端初始化的连接）<br />2. FTP服务器的21端口到大于1024的端口。 （服务器响应客户端的控制端口）<br />3. FTP服务器的20端口到大于1024的端口。（服务器端初始化数据连接到客户端的数据端口）<br />4. 大于1024端口到FTP服务器的20端口（客户端发送ACK响应到服务器的数据端口）<br /><br />（二）被动FTP<br /><br />为了解决服务器发起到客户的连接的问题，人们开发了一种不同的FTP连接方式。这就是所谓的被动方式，或者叫做PASV，当客户端通知服务器它处于被动模式时才启用。<br /><br />在被动方式FTP中，命令连接和数据连接都由客户端发起，这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。<br /><br />当开启一个 FTP连接时，客户端打开两个任意的非特权本地端口（N > 1024和N+1）。第一个端口连接服务器的21端口，但与主动方式的FTP不同，客户端不会提交PORT命令并允许服务器来回连它的数据端口，而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口（P > 1024），并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。<br />对于服务器端的防火墙来说，必须允许下面的通讯才能支持被动方式的FTP:<br /><br />1. 从任何大于1024的端口到服务器的21端口 （客户端初始化的连接）<br />2. 服务器的21端口到任何大于1024的端口 （服务器响应到客户端的控制端口的连接）<br />3. 从任何大于1024端口到服务器的大于1024端口 （客户端初始化数据连接到服务器指定的任意端口）<br /><br />4. 服务器的大于1024端口到远程的大于1024的端口（服务器发送ACK响应和数据到客户端的数据端口）<br /><br /><br />以上关于主动和被动FTP的解释，可以简单概括为以下两点：<br /><br />1、主动FTP：<br /><br />命令连接：客户端 >1024端口 -> 服务器 21端口<br />数据连接：客户端 >1024端口 1024端口 -> 服务器 21端口<br />数据连接：客户端 >1024端口 -> 服务器 >1024端口<br /><br />（三） 主动与被动FTP优缺点：<br /><br />主动FTP对FTP服务器的管理有利，但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接，而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利，但对服务器端的管理不利。因为客户端要与服务器端建立两个连接，其中一个连到一个高位随机端口，而这个端口很有可能被服务器端的防火墙阻塞掉。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/179295#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Apr 2008 15:54:24 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/179295</link>
        <guid>http://javaboy2006.javaeye.com/blog/179295</guid>
      </item>
      <item>
        <title>创业论坛：最后悔但是却最宝贵的经历（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/178203" style="color:red;">http://javaboy2006.javaeye.com/blog/178203</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          周立功：人才是创业之本<br /><br />当年我创业过程中，我手下有一个人才在山东一个化工厂做流量计仪表。他在法国做了三年，他在山东干了十年，后来到我公司来，跟我一起做一个IC卡水表。看起来很简单，其实做好很难，他白天黑夜都在那里干，我只想这个人很不错，我给他的薪水也不错，自己感觉也挺好，因为总是拿自己的感觉看待别人。当有一天他突然要离开时候我才意识到我做的不好，当时我到他家跟他说希望他能够留下来。其实他当时也想留，后来还是离开的。<br /><br />因为这个优秀人才的离开改变了我对人才的开发。他离开的时候我什么话没说给了他十万元，我说表示一点心意。他两口子当面流下了热泪，同时也感动了我，这是我一生最遗憾的一件事情。因为这件事情触动了我，我感觉企业里最重要的就是人，很多人都会讲科技以人才为本，但是没有几个人能做好。中国人不缺成功的道理。我招人才并不是很难，我们怎么招人呢？第一每个员工我都亲自面试，因为根据我从事人力资源的经历，在3-5分钟之间可以测试你，知道你是什么性格，知道你是哪一类人才。你讲话速度快不快，然后我就有一个大概印象，然后提出很多问题，面试前要演讲，三千人演讲完了请一个人力资源公司做拓展训练，筛选完了考试，只考作业题目，考例题。考完以后把这些人招到公司训练，招聘一个人才的费用平均是4000元，在演讲过程中该给的钱要给够，各种小恩小惠都是要给的，不仅培训他们技术，连衣服怎么穿都教他们，这都是教育范围之内的。利用暑假搞夏令营，我们4月份开始在全国选拔学生参加夏令营，刚才讲到创业要成功，我认为最重要的是全球化，全国1635所大学，每个大学都有创业中心，联盟起来就很简单。这样招人的方式都是非常简单的，还有大学竞赛，要投入很多。<br /><br />我觉得不能乱花钱，要花在刀刃上。<br /><br />吴锡桑：身体是革命的本钱<br /><br />如果说最后悔的事情，我觉得我这个人非常喜欢工作，在创业过程中也好，在读书时候也好，我都是每天工作12小时以上，慢慢的，特别在开发软件时候写程序，很多在座同仁跟我一样喜欢黑白颠倒，晚上干活，白天睡觉，我连续干几个月之后，人的生物钟乱了，再也睡不着了，那时候头开始痛，非常辛苦，那时候真的很后悔，我觉得人不是铁打的，我们只能够合理的使用我们的身体，从那以后我慢慢的意识到我们不能整天坐在办公室里，不能整天对着电脑，一定要运动，有空时候适当的要转移注意力，能够放松和娱乐一下。原来我觉得如果不在工作状态中的我好象犯罪一样，觉得今天又没干活，觉得这样下去可能会沉沦了。我知道你们在座各位确实是双手握拳，跃跃欲试，相信三、五年后你们会坐在这里，我们在下面给你们鼓掌。完成你们心中伟大梦想时候，我希望你们要注意自己的身体，希望你们也能够合理的安排自己的生活。<br /><br />梁公军：坚定想法，目无旁物<br /><br />2004年开始做这家公司以后一直做企业外包那块，做大概一年多时间开始做个人产品，最初目标定的非常大，团队大概有十几个人，他们做了大半年时间，后来痛定思痛，决定放弃掉，为什么呢？就是想的太多，这种东西不是一个小的公司、不是一个创业公司能够简单的做起来的，时机各方面也不到位，如果各位真的要创业的话，要找好切入点。这也是我在刚开始创业时候我的前辈跟我说的一句话，找准切入点，小一些不怕，别想那么大，否则最后会浪费掉大量时间，要找好切入点。<br /><br />王兴：注意别人的感受<br /><br />我最大感受就是之前太不理解别人的感受，我创业时候一天工作14小时，一周工作七天，我觉得其他人也应该这样做，但并不是每个人都能这么干，那时候没有观察别人的感触，犯了很大错误，要认识到人是不同的。第二点，不要试图改变一个程序员，我觉得改变一个程序员几乎是不可能的事情，这个风险太大。<br /><br />苏德宙：减轻压力<br /><br />我的经验跟王兴先生的经验非常类似，这几年来我对自己的要求很多，压力很大，其实每个人的惰性都非常坚强，很多人不愿意做他不愿意做的事情，但是这些事情必须要做，有些人不想做，或者乱做，那就造成很大困扰，一而再、再而三就发现自己脾气变差了，因为自己脾气造成一些困扰，这是创业过程中满难过的一件事情，这是我过去的经验。<br /><br />人物介绍<br /><br />刘韧，千橡集团副总裁，DoNews制作人，CSDN顾问，蓝狮子成员，贝塔斯曼签约财经作家。曾服务于多家媒体，长期致力信息产业报道。<br /><br />周立功，广州周立功单片机发展有限公司与广州致远电子有限公司董事长。江西理工大学教授，硕士生导师，中国嵌入式学会理事。<br /><br />梁军生，鲜果创始人，原新浪研发部技术经理、电子商务部部门经理，微软咨询部顾问。<br /><br />王兴，hainei.net创始人兼CEO。创建校内网后，于2006年开始二次创业，推出服务上班族的SNS海内网。<br /><br />吴锡桑，火石软件创造人。中国网络游戏先行者，影响中国互联网的一百人之一。<br /><br />苏德届，来自台湾，台湾清华大学资讯工程博士。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/178203#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 21:57:53 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/178203</link>
        <guid>http://javaboy2006.javaeye.com/blog/178203</guid>
      </item>
      <item>
        <title>JSR（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/178008" style="color:red;">http://javaboy2006.javaeye.com/blog/178008</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JSR是Java Specification Requests的缩写，意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR，以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/178008#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 13:14:12 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/178008</link>
        <guid>http://javaboy2006.javaeye.com/blog/178008</guid>
      </item>
      <item>
        <title>Java编译器对于String常量表达式的优化（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/178007" style="color:red;">http://javaboy2006.javaeye.com/blog/178007</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先把问题摆出来，先看这个代码 <br /><br /><br />String a = "ab"; <br />String b = "a" + "b"; <br />System.out.println((a == b));<br /> <br /><br /><br />打印结果会是什么？类似这样的问题，有人考过我，我也拿来考过别人(蛮好玩的，大家也可以拿来问人玩)，一般答案会是以下几种： <br /><br /><br />1.true <br /><br />"a" + "b" 的结果就是"ab"，这样a,b都是"ab"了，内容一样所以"相等"，结果true <br /><br />一般java新人如是答。 <br /><br />2.false <br /><br />"a" + "a"会生成新的对象"aa"，但是这个对象和String a = "ab";不同，(a == b)是比较对象引用，因此不相等，结果false <br /><br />对java的String有一定了解的通常这样回答。 <br /><br />3.true <br /><br />String a = "ab";创建了新的对象"ab"； 再执行String b = "a" + "b";结果b="ab",这里没有创建新的对象，而是从JVM字符串常量池中获取之前已经存在的"ab"对象。因此a,b具有对同一个string对象的引用，两个引用相等，结果true. <br /><br />能回答出这个答案的，基本已经是高手了，对java中的string机制比较了解。 <br /><br />很遗憾,这个答案,是不够准确的。或者说，根本没有运行时计算b = "a" + "b";这个操作.实际上运行时只有String b = "ab"; <br /><br />3的观点适合解释以下情况： <br /><br /><br />String a = "ab"; <br />String b = "ab"; <br />System.out.println((a == b));<br /> <br /><br />如果String b = "a" + "b";是在运行期执行，则3的观点是无法解释的。运行期的两个string相加，会产生新的对象的。(本文后面对此有解释) <br /><br /><br />4.true <br /><br />下面是我的回答：编译优化+ 3的处理方式 = 最后的true <br /><br />String b = "a" + "b";编译器将这个"a" + "b"作为常量表达式，在编译时进行优化，直接取结果"ab"，这样这个问题退化 <br /><br /><br />String a = "ab"; <br />String b = "ab"; <br />System.out.println((a == b));<br /> <br /><br /><br />然后根据3的解释，得到结果true <br /><br /><br />这里有一个疑问就是String不是基本类型，像 <br /><br />int secondsOfDay = 24 * 60 * 60; <br /><br />这样的表达式是常量表达式,编译器在编译时直接计算容易理解，而"a" + "b" 这样的表达式,string是对象不是基本类型,编译器会把它当成常量表达式来优化吗? <br /><br />下面简单证明我的推断，首先编译这个类: <br /><br /><br />public class Test { <br />private String a = "aa"; <br />}<br /> <br /><br />复制class文件备用,然后修改为 <br /><br /><br />public class Test { <br />private String a = "a" + "a"; <br />}<br /> <br /><br />再次编译,用ue之类的文本编辑器打开,察看二进制内容,可以发现,两个class文件完全一致,连一个字节都不差. <br /><br />ok,真相大白了.根本不存在运行期的处理String b = "a" + "b";这样的代码的问题,编译时就直接优化掉了。 <br /><br /><br />下面进一步探讨，什么样的string + 表达式会被编译器当成常量表达式？ <br /><br />String b = "a" + "b"; <br /><br />这个String + String被正式是ok的,那么string + 基本类型呢？ <br /><br /><br />String a = "a1"; <br />String b = "a" + 1; <br />System.out.println((a == b)); //result = true<br /><br />String a = "atrue"; <br />String b = "a" + true; <br />System.out.println((a == b)); //result = true<br /><br />String a = "a3.4"; <br />String b = "a" + 3.4; <br />System.out.println((a == b)); //result = true<br /> <br /><br /><br />可见编译器对string + 基本类型是当成常量表达式直接求值来优化的。 <br /><br /><br />再注意看这里的string都是"**"这样的，我们换成变量来试试： <br /><br /><br />String a = "ab"; <br />String bb = "b"; <br />String b = "a" + bb; <br />System.out.println((a == b)); //result = false<br /> <br /><br /><br />这个好理解，"a" + bb中的bb是变量，不能进行优化。这里很很好的解释了为什么3的观点不正确，如果String+String的操作是在运行时进行的，则会产生新的对象，而不是直接从jvm的string池中获取。 <br /><br /><br />再修改一下,把bb作为常量变量： <br /><br /><br />String a = "ab"; <br />final String bb = "b"; <br />String b = "a" + bb; <br />System.out.println((a == b)); //result = true<br /> <br /><br />竟然又是true，编译器的优化好厉害啊，呵呵，考虑下面这种情况： <br /><br /><br />String a = "ab"; <br />final String bb = getBB(); <br />String b = "a" + bb; <br />System.out.println((a == b)); //result = false <br />private static String getBB() { <br />return "b"; <br />}<br /> <br /><br />看来java(包括编译器和jvm)对string的优化，真的是到了极点了，string这个所谓的"对象"，完全不可以看成一般的对象，java对string的处理近乎于基本类型，最大限度的优化了几乎能优化的地方。 <br /><br /><br />另外感叹一下,string的+号处理，算是java语言里面唯一的一个"运算符重载"(接触过c++的人对这个不会陌生)吧？
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/178007#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 13:11:12 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/178007</link>
        <guid>http://javaboy2006.javaeye.com/blog/178007</guid>
      </item>
      <item>
        <title>数据库索引应用（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/178006" style="color:red;">http://javaboy2006.javaeye.com/blog/178006</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、索引的概念<br />        索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中，索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中，索引也允许数据库程序迅速地找到表中的数据，而不必扫描整个数据库。<br /><br />二、索引的特点<br />    1.索引可以加快数据库的检索速度 <br />    2.索引降低了数据库插入、修改、删除等维护任务的速度 <br />    3.索引创建在表上，不能创建在视图上 <br />    4.索引既可以直接创建，也可以间接创建 <br />    5.可以在优化隐藏中，使用索引 <br />    6.使用查询处理器执行SQL语句，在一个表上，一次只能使用一个索引 <br />    7.其他<br /><br />三、索引的优点<br />    1.创建唯一性索引，保证数据库表中每一行数据的唯一性<br />    2.大大加快数据的检索速度，这也是创建索引的最主要的原因<br />    3.加速表和表之间的连接，特别是在实现数据的参考完整性方面特别有意义。<br />    4.在使用分组和排序子句进行数据检索时，同样可以显著减少查询中分组和排序的时间。<br />    5.通过使用索引，可以在查询的过程中使用优化隐藏器，提高系统的性能。<br /><br />四、索引的缺点<br />    1.创建索引和维护索引要耗费时间，这种时间随着数据量的增加而增加<br />    2.索引需要占物理空间，除了数据表占数据空间之外，每一个索引还要占一定的物理空间，如果要建立聚簇索引，那么需要的空间就会更大<br />    3.当对表中的数据进行增加、删除和修改的时候，索引也要动态的维护，降低了数据的维护速度<br /><br />五、索引分类<br />    1.直接创建索引和间接创建索引<br />    直接创建索引： CREATE INDEX mycolumn_index ON mytable (myclumn)<br />    间接创建索引：定义主键约束或者唯一性键约束，可以间接创建索引<br />    2.普通索引和唯一性索引<br />    普通索引：CREATE INDEX mycolumn_index ON mytable (myclumn)<br />    唯一性索引：保证在索引列中的全部数据是唯一的，对聚簇索引和非聚簇索引都可以使用<br />    CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)<br />    3.单个索引和复合索引<br />    单个索引：即非复合索引<br />    复合索引：又叫组合索引，在索引建立语句中同时包含多个字段名，最多16个字段<br />    CREATE INDEX name_index ON username(firstname,lastname)<br />    4.聚簇索引和非聚簇索引(聚集索引，群集索引)<br />   聚簇索引：物理索引，与基表的物理顺序相同，数据值的顺序总是按照顺序排列<br />    CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH<br />    ALLOW_DUP_ROW(允许有重复记录的聚簇索引)<br />   非聚簇索引：CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)<br /><br />六、索引的使用<br />   1.当字段数据更新频率较低，查询使用频率较高并且存在大量重复值是建议使用聚簇索引<br />    2.经常同时存取多列，且每列都含有重复值可考虑建立组合索引<br />    3.复合索引的前导列一定好控制好，否则无法起到索引的效果。如果查询时前导列不在查询条件中则该复合索引不会被使用。前导列一定是使用最频繁的列<br />    4.多表操作在被实际执行前，查询优化器会根据连接条件，列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表；内外表的选择可由公式：外层表中的匹配行数*内层表中每一次查找的次数确定，乘积最小为最佳方案<br />    5.where子句中对列的任何操作结果都是在sql运行时逐列计算得到的，因此它不得不进行表搜索，而没有使用该列上面的索引；如果这些结果在查询编译时就能得到，那么就可以被sql优化器优化，使用索引，避免表搜索(例：select * from record where substring(card_no,1,4)=’5378’ <br />&& select * from record where card_no like ’5378%’)任何对列的操作都将导致表扫描，它包括数据库函数、计算表达式等等，查询时要尽可能将操作移至等号右边<br />    6.where条件中的’in’在逻辑上相当于’or’，所以语法分析器会将in ('0','1')转化为column='0' or column='1'来执行。我们期望它会根据每个or子句分别查找，再将结果相加，这样可以利用column上的索引；但实际上它却采用了"or策略"，即先取出满足每个or子句的行，存入临时数据库的工作表中，再建立唯一索引以去掉重复行，最后从这个临时表中计算结果。因此，实际过程没有利用column上索引，并且完成时间还要受tempdb数据库性能的影响。in、or子句常会使用工作表，使索引失效；如果不产生大量重复值，可以考虑把子句拆开；拆开的子句中应该包含索引<br />    7.要善于使用存储过程，它使sql变得更加灵活和高效
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/178006#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 13:08:07 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/178006</link>
        <guid>http://javaboy2006.javaeye.com/blog/178006</guid>
      </item>
      <item>
        <title>select into from和insert into select from两种表复制语句区别</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/176147" style="color:red;">http://javaboy2006.javaeye.com/blog/176147</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="sql">
select * into target_table from source_table;
insert into target_table(column1,column2) select column1,5 from source_table;
</pre><br />以上两句都是将源表source_table的记录插入到目标表target_table，但两句又有区别。<br />第一句（select into from）要求目标表target_table不存在，因为在插入时会自动创建。<br />第二句（insert into select from）要求目标表target_table存在，由于目标表已经存在，所以我们除了插入源表source_table的字段外，还可以插入常量，如例中的：5。
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/176147#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 10:27:57 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/176147</link>
        <guid>http://javaboy2006.javaeye.com/blog/176147</guid>
      </item>
      <item>
        <title>IIS创建虚拟目录时发生&quot;LM/w3svc/1/root /***&quot;别名已存在错误解决方法</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/176127" style="color:red;">http://javaboy2006.javaeye.com/blog/176127</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          开始->运行->cmd：<br />regsvr32 jscript.dll（修复java脚本相关的动态链接库）<br />regsvr32 vbscript.dll（修复vb脚本相关的动态链接库）<br />cscript adsutil.vbs delete "W3SVC/1/Root/***"<br /><br />Microsoft (R) Windows Script Host Version 5.6<br />版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。<br /><br />deleted path "W3SVC/1/Root/***"
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/176127#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 10:01:57 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/176127</link>
        <guid>http://javaboy2006.javaeye.com/blog/176127</guid>
      </item>
      <item>
        <title>Speak2Me英语口语学习系统</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/175596" style="color:red;">http://javaboy2006.javaeye.com/blog/175596</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          偶然发现，有空也去试一下：<br /><img src="http://www.speak2me.cn/images/home/cn/img200802/logo.gif" /><br /><a href="http://www.speak2me.cn" target="_blank">http://www.speak2me.cn</a>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/175596#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 22:30:51 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/175596</link>
        <guid>http://javaboy2006.javaeye.com/blog/175596</guid>
      </item>
      <item>
        <title>上海的国家重点软件企业27家（转载）</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/175211" style="color:red;">http://javaboy2006.javaeye.com/blog/175211</a>&nbsp;
          发表时间: 2008年03月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          全国共152家重点软件企业，上海的企业如下：有些是专外包的。<br /><br />上海宝信软件股份有限公司<br /><br />希姆通信息技术(上海)有限公司<br /><br />上海会通信息有限公司<br /><br />上海理想信息产业(集团)有限公司<br /><br />卜海第日光华信．鼠科枯股份有限公司<br /><br />上海微创软件有限公司<br /><br />上海亚太计算机信息系统有限公司<br /><br />万达信息股份有限公司<br /><br />上海新华控制技术(集团)有限公司<br /><br />神州数码管理系统有限公司<br /><br />上海中和软件有限公司<br /><br />汉略(上海)信息技术有限公司<br /><br />上海启明软件股份有限公司<br /><br />上海交大海隆软件股份有限公司<br /><br />商泰软件(上海)有限公司<br /><br />上海新致软件有限公司<br /><br />毕博信息技术(上海)有限公司<br /><br />太文信息技术(上海)有限公司<br /><br />上海畅星智能系统有限公司<br /><br />上海思策软件有限公司<br /><br />易保网络技术(上海)有限公司<br /><br />上海上大鼎正软件有限公司<br /><br />PFU上海计算机有限公司<br /><br />泰雷兹软件系统(上海)有限公司<br /><br />上海中标软件有限公司<br /><br />维豪信息技术有限公司
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/175211#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 23 Mar 2008 22:30:25 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/175211</link>
        <guid>http://javaboy2006.javaeye.com/blog/175211</guid>
      </item>
      <item>
        <title>二叉树</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/172802" style="color:red;">http://javaboy2006.javaeye.com/blog/172802</a>&nbsp;
          发表时间: 2008年03月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
public class Tree {

	private int data;// 数据节点
	private Tree left;// 左子树
	private Tree right;// 右子树

	public Tree(int data) {
		this.data = data;
		this.left = null;
		this.right = null;
	}

	/**
	 * 创建二叉树，返回根结点
	 * 
	 * @param input
	 * @return
	 */
	public static Tree createTree(int[] input) {
		Tree root = null;
		Tree temp = null;
		for (int i = 0; i &lt; input.length; i++) {
			// 创建根节点
			if (root == null) {
				root = temp = new Tree(input[i]);
			} else {
				// 定位到根节点
				temp = root;
				// 添加子节点
				while (input[i] != temp.data) {
					if (input[i] &lt;= temp.data) {
						if (temp.left != null) {
							temp = temp.left;
						} else {
							temp.left = new Tree(input[i]);
						}
					} else {
						if (temp.right != null) {
							temp = temp.right;
						} else {
							temp.right = new Tree(input[i]);
						}
					}
				}
			}
		}
		return root;
	}

	/**
	 * 前序遍历
	 * 
	 * @param tree
	 */
	public static void preOrder(Tree tree) {
		if (tree != null) {
			System.out.print(tree.data + " ");
			preOrder(tree.left);
			preOrder(tree.right);
		}
	}

	/**
	 * 中序遍历
	 * 
	 * @param tree
	 */
	public static void midOrder(Tree tree) {
		if (tree != null) {
			midOrder(tree.left);
			System.out.print(tree.data + " ");
			midOrder(tree.right);
		}
	}

	/**
	 * 后序遍历
	 * 
	 * @param tree
	 */
	public static void posOrder(Tree tree) {
		if (tree != null) {
			posOrder(tree.left);
			posOrder(tree.right);
			System.out.print(tree.data + " ");
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] input = { 4, 2, 6, 1, 3, 5, 7 };
		Tree tree = createTree(input);
		System.out.print("前序遍历：");
		preOrder(tree);
		System.out.print("\n中序遍历：");
		midOrder(tree);
		System.out.print("\n后序遍历：");
		posOrder(tree);
	}
}

前序遍历：4 2 1 3 6 5 7 
中序遍历：1 2 3 4 5 6 7 
后序遍历：1 3 2 5 7 6 4 
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/172802#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Mar 2008 23:38:30 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/172802</link>
        <guid>http://javaboy2006.javaeye.com/blog/172802</guid>
      </item>
      <item>
        <title>查找算法</title>
        <author>javaboy2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javaboy2006.javaeye.com">javaboy2006</a>&nbsp;
          链接：<a href="http://javaboy2006.javaeye.com/blog/171254" style="color:red;">http://javaboy2006.javaeye.com/blog/171254</a>&nbsp;
          发表时间: 2008年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
	/**
	 * 二分法查找 
	 * 查找线性表必须是有序列表
	 * 
	 * @param e
	 * @param key
	 * @return
	 */
	public int binarySearch(int[] e, int key) {
		int low = 0, high = e.length - 1, mid;
		while (low &lt;= high) {
			mid = (low + high) / 2;
			if (key == e[mid]) {
				return mid;
			} else if (key &lt; e[mid]) {
				high = mid - 1;
			} else {
				low = mid + 1;
			}
		}
		return -1;
	}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://javaboy2006.javaeye.com/blog/171254#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 14 Mar 2008 10:47:27 +0800</pubDate>
        <link>http://javaboy2006.javaeye.com/blog/171254</link>
        <guid>http://javaboy2006.javaeye.com/blog/171254</guid>
      </item>
  </channel>
</rss>