<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>最好的方式是将一件事做到极致</title>
    <description>无故寻愁觅恨，有时似傻如狂，纵然生得好皮囊，腹中原来草莽。潦倒不通世务，愚顽怕读文章，行为偏僻性乖张，那管世人诽谤！富贵不知乐业，贫穷难耐凄凉，可怜辜负好韶光，于国于家无望。天下无能第一，古今不肖无双，寄言纨绔与膏粱，莫效此儿形状。</description>
    <link>http://syhan.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>sources.list书写的方法</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/105412" style="color:red;">http://syhan.javaeye.com/blog/105412</a>&nbsp;
          发表时间: 2007年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          （1）地址：找到包含dists和pool这两个目录的地址，比如 <br />
<a href="http://mirrors.geekbone.org/debian/" target="_blank">http://mirrors.geekbone.org/debian/</a>； <br />
（2）目录名：打开dists，里面包含的目录名字，记下来。比如dists/包含sarge、etch、woody、sid。 <br />
（3）名字：打开以上目录，看看里面包含哪些组件名字，比如main、cont <br />
rib、non-free； <br />
（4）书写格式：deb &lt;1记下来的地址&gt; &lt;2记下来的目录名&gt; &lt;3记下来的名字&gt;，如：<br />
deb ftp://ftp.linuxforum.net/debian/ sarge main contrib non-free <br />
发现一个比较快的台湾地址： http://ftp.isu.edu.tw/pub/Linux/Debian/debian/<br />
书写了一下：deb http://ftp.isu.edu.tw/pub/Linux/Debian/debian/ sarge main contrib non-free<br />
<br />
<p>版本说明：<br />
一般有三个版本：stable,testing,unstable<br />
当前的stable是sarge，unstable是sid，testing是etch。</p>
<p>stable <br />
The &ldquo;stable&rdquo; distribution contains the latest officially released distribution of Debian. <br />
This is the production release of Debian, the one which we primarily recommend using. <br />
The current &ldquo;stable&rdquo; distribution of Debian GNU/Linux is version 3.1r0, codenamed sarge. It was released on June 6th, 2005. </p>
<p>testing <br />
The &ldquo;testing&rdquo; distribution contains packages that haven't been accepted into a &ldquo;stable&rdquo; release yet, but they are in the queue for that. The main advantage of using this distribution is that it has more recent versions of software. <br />
The current &ldquo;testing&rdquo; distribution is etch. </p>
<p>unstable <br />
The &ldquo;unstable&rdquo; distribution is where active development of Debian occurs. Generally, this distribution is run by developers and those who like to live on the edge. <br />
The &ldquo;unstable&rdquo; distribution is called sid. </p>
<p>stable &mdash; 最广泛的用于架设产品化服务器，因为它只包含安全更新。 <br />
testing &mdash; 推荐工作站用户使用的发行版，因为它包含有最近发布的桌面软件，这些软件已经接受了少量测试。 <br />
unstable &mdash; 处在悬崖边缘的版本，供 Debian 开发者选用。</p>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/105412#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jul 2007 16:17:30 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/105412</link>
        <guid>http://syhan.javaeye.com/blog/105412</guid>
      </item>
          <item>
        <title>今天被群硕电面了</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/98227" style="color:red;">http://syhan.javaeye.com/blog/98227</a>&nbsp;
          发表时间: 2007年07月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          面了有28分多种，有点紧张，不过感觉还好吧，各种各样的问题都有，和之前网上搜的差不多，应该比前一阵电面IBM的时候要好一些了，但是又是最后面我的那位gg说过一会儿hr会给我打电话，然后我到现在还没有等到，不会又被bs了吧，我祈祷啊，群硕，你快给我通知吧，优质大学生真诚觅求实习岗位<img alt="" src="/javascripts/fckeditor/editor/images/smiley/msn/cry_smile.gif" />~~~
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/98227#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 05 Jul 2007 20:56:00 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/98227</link>
        <guid>http://syhan.javaeye.com/blog/98227</guid>
      </item>
          <item>
        <title>我的豆瓣收藏秀</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/91142" style="color:red;">http://syhan.javaeye.com/blog/91142</a>&nbsp;
          发表时间: 2007年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><embed src="http://www.douban.com/doushow/scowlknight/collection_random__8_2_medium_nologo/doushow.swf" width="266" height="620" type="application/x-shockwave-flash" play="true" loop="true" menu="true"></embed></p>
<p>还不错啊，呵呵~</p>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/91142#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 17 Jun 2007 02:31:19 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/91142</link>
        <guid>http://syhan.javaeye.com/blog/91142</guid>
      </item>
          <item>
        <title>向橘红色天空的叫喊</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/90883" style="color:red;">http://syhan.javaeye.com/blog/90883</a>&nbsp;
          发表时间: 2007年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>突然想到这首歌</p>
<p>永远的在这个时刻，永远的在这个时刻，一起歌唱，一起歌唱，我们永远年轻，我们永远倔强，我们永远纯洁，没有人能消灭我们，没有人能消灭我们，永远的在这个时刻，永远的在这个时刻，一起歌唱，永远歌唱</p>
<p><embed src="http://tv.mofile.com/cn/xplayer.swf?v=VAM6QRT5" width="20" height="20" type="application/x-shockwave-flash" scale="noborder" play="true" loop="true" menu="true"></embed></p>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/90883#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Jun 2007 01:52:00 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/90883</link>
        <guid>http://syhan.javaeye.com/blog/90883</guid>
      </item>
          <item>
        <title>儿童节礼物</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/85903" style="color:red;">http://syhan.javaeye.com/blog/85903</a>&nbsp;
          发表时间: 2007年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天下午我正昏昏沉沉的躺在床上睡觉，突然手机震动了，一看是021开头的，心里就很高兴，赶紧起来接，果然是ibm通知电面的通知，这个儿童节过得真好~
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/85903#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sat, 02 Jun 2007 12:44:44 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/85903</link>
        <guid>http://syhan.javaeye.com/blog/85903</guid>
      </item>
          <item>
        <title>心情比较复杂</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/84774" style="color:red;">http://syhan.javaeye.com/blog/84774</a>&nbsp;
          发表时间: 2007年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天心情有点复杂，做事情也不专注，平均每个小时就要去检查一下邮箱，啊呀呀，这不是真正的我，<strong>什么都可以输，但是信心不能输.</strong>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/84774#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Wed, 30 May 2007 17:26:20 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/84774</link>
        <guid>http://syhan.javaeye.com/blog/84774</guid>
      </item>
          <item>
        <title>IBM笔试归来</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/83598" style="color:red;">http://syhan.javaeye.com/blog/83598</a>&nbsp;
          发表时间: 2007年05月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天我去南大参加了IBM的招聘暑期实习生的笔试，累死了（回来后又看到了前校长顾冠群院士<a href="http://www.seu.edu.cn/~xcb/docfile/sg.htm">去世</a>的消息，默哀）。由于我应聘的是技术类的职位，整个考试分为IPAT和技术加试两个部分。感觉一般，哎<br />
整个考场大概有100多人，大概有30+是自己学校的，可惜一个都不认识。<br />
IPAT和google到的信息一致，矩阵变换，数列与应用题，考察的就如名字Information Processing Aptitude Test一样，主要考察的就是信息处理、逻辑判断以及快速阅读等等的能力，这个考试是和IBM签订了保密协议的，但是也可以google到一些真题，没什么好说的，时间是不够用的，答题卡有点混乱，也许也是考察范围吧，做下来很累感觉，哎，我已经没什么感觉了。<br />
技术类加试分ABC三个部分，A是java的，B是C++的，C部分是综合测试。我选择的是A+C，java的整体难度类似SCJP，也包含一些J2EE（EJB啊XML啊什么的）的和有点偏的东西（例如package java.nio.*），还好吧。C部分就很广了，相对来说几天前Business Object的笔试就不算什么了，包括Design Pattern, UML, SQL, OO, C甚至还有一道关于raid卷的题目。总体来说还不算太差吧。<br />
考完试后我就去山西路买书了，最后买了GoF的《Design Pattern》<design pattern="">, MIT Press的《Introduction to Algorism》<introduction algorism="" to="">。然后混在人山人海的安铜线上回到了学校。<br />
<br />
<strong>顺者，不妄喜，自知顺逆相随；<br />
逆者，不惶馁，自知逆过即顺；<br />
安者，不奢逸，自知奢逸丧志；<br />
危者，不惊惧，自知惟静制危；<br />
胸有激雷而面如平湖者，可拜上将军！<br />
<br />
<br />
</strong>我师兄写的比我好多了<strong>，</strong>需要的可以<a href="http://www.cnblogs.com/maxwolf/archive/2006/12/09/586880.html">参考</a><strong></strong></introduction></design>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/83598#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 27 May 2007 19:40:48 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/83598</link>
        <guid>http://syhan.javaeye.com/blog/83598</guid>
      </item>
          <item>
        <title>HashMap,Hashtable,HashSet等等Hash Collection之间的区别</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/82980" style="color:red;">http://syhan.javaeye.com/blog/82980</a>&nbsp;
          发表时间: 2007年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天博奥杰面试的时候，pm问了我一个问题，HashMap与Hashtable之间有什么区别？我虽然以前看过java doc，里面的确提到过二者的区别，但是我当时实在想不起来了，只好老老实实和pm说我以前看过java api里面说二者的区别只有一点点，但是我记不得了，然后又balabala的说了一点以前看effective java的关于hash的，还有什么对象的hashcode云云。<br />
<br />
回来后赶紧查java api：<br />
HashMap:<br />
<pre>public class <strong>HashMap&lt;K,V&gt;</strong><dt>extends <a title="java.util 中的类" href="file:///opt/doc/html/zh_CN/api/java/util/AbstractMap.html">AbstractMap</a>&lt;K,V&gt;</dt><dt>implements <a title="java.util 中的接口" href="file:///opt/doc/html/zh_CN/api/java/util/Map.html">Map</a>&lt;K,V&gt;, <a title="java.lang 中的接口" href="file:///opt/doc/html/zh_CN/api/java/lang/Cloneable.html">Cloneable</a>, <a title="java.io 中的接口" href="file:///opt/doc/html/zh_CN/api/java/io/Serializable.html">Serializable</a><br /></dt></pre>
<em> 基于哈希表的 <tt>Map</tt> 接口的实现。此实现提供所有可选的映射操作，并允许使用 <tt>null</tt> 值和 <tt>null</tt> 键。<strong>（除了不同步和允许使用 null 之外，<tt>HashMap</tt> 类与 <tt>Hashtable</tt> 大致相同。）</strong>此类不保证映射的顺序，特别是它不保证该顺序恒久不变。<br />
<br />
</em><strong><u>其实Hashtable的迭代是Enumberation，而HashMap则是Iterator</u></strong><em><br />
</em><br />
HashSet:<br />
<dl><dt>
<pre>public class <strong>HashSet&lt;E&gt;</strong></pre>
<dt>extends <a title="java.util 中的类" href="file:///opt/doc/html/zh_CN/api/java/util/AbstractSet.html">AbstractSet</a>&lt;E&gt;</dt><dt>implements <a title="java.util 中的接口" href="file:///opt/doc/html/zh_CN/api/java/util/Set.html">Set</a>&lt;E&gt;, <a title="java.lang 中的接口" href="file:///opt/doc/html/zh_CN/api/java/lang/Cloneable.html">Cloneable</a>, <a title="java.io 中的接口" href="file:///opt/doc/html/zh_CN/api/java/io/Serializable.html">Serializable</a></dt> </dt></dl>
<p><em> 此类实现 <tt>Set</tt> 接口，由哈希表（实际上是一个 <tt>HashMap</tt> 实例）支持。它不保证集合的迭代顺序；特别是它不保证该顺序恒久不变。此类允许使用 <tt>null</tt> 元素。<strong>&hellip;&hellip;注意，此实现不是同步的。</strong></em> </p>
此外，java.util包里还提供了其他有关Hash的Collection，但是不常用<br />
IdentityHashMap:<br />
<dl><dt>
<pre>public class <strong>IdentityHashMap&lt;K,V&gt;</strong></pre>
<dt>extends <a title="java.util 中的类" href="file:///opt/doc/html/zh_CN/api/java/util/AbstractMap.html">AbstractMap</a>&lt;K,V&gt;</dt><dt>implements <a title="java.util 中的接口" href="file:///opt/doc/html/zh_CN/api/java/util/Map.html">Map</a>&lt;K,V&gt;, <a title="java.io 中的接口" href="file:///opt/doc/html/zh_CN/api/java/io/Serializable.html">Serializable</a>, <a title="java.lang 中的接口" href="file:///opt/doc/html/zh_CN/api/java/lang/Cloneable.html">Cloneable</a></dt> </dt></dl>
<p><em> 此类利用哈希表实现 <tt>Map</tt> 接口，比较键（和值）时使用引用相等性代替对象相等性。换句话说，在 <tt>IdentityHashMap</tt> 中，当且仅当 <tt>(k1==k2)</tt> 时，才认为两个键 <tt>k1</tt> 和 <tt>k2</tt> 相等（在正常 <tt>Map</tt> 实现（如 <tt>HashMap</tt>）中，当且仅当满足下列条件时才认为两个键 <tt>k1</tt> 和 <tt>k2</tt> 相等：<tt>(k1==null ? k2==null : e1.equals(e2))</tt>）。  </em></p>
<p><em><strong>此类不是 通用 <tt>Map</tt> 实现！此类实现 <tt>Map</tt> 接口时，它有意违反 <tt>Map</tt> 的常规协定，该协定在比较对象时强制使用 <tt>equals</tt> 方法。此类设计仅用于其中需要引用相等性语义的罕见情况。</strong></em>  </p>
<p><em>此类的典型用法是</em><em>拓扑保留对象图形转换，如序列化或深层复制。要执行这样的转换，程序必须维护用于跟踪所有已处理对象引用的&ldquo;节点表&rdquo;。节点表一定不等于不同对象，即使它们偶然相等也如此。此类的另一种典型用法是维护</em><em>代理对象。例如，调试设施可能希望为正在调试程序中的每个对象维护代理对象。</em></p>
<p>LinkedHashMap:<br />
</p>
<pre>public class <strong>LinkedHashMap&lt;K,V&gt;</strong><dt>extends <a title="java.util 中的类" href="file:///opt/doc/html/zh_CN/api/java/util/HashMap.html">HashMap</a>&lt;K,V&gt;</dt><dt>implements <a title="java.util 中的接口" href="file:///opt/doc/html/zh_CN/api/java/util/Map.html">Map</a>&lt;K,V&gt;</dt></pre>
<p> </p>
<p><em><tt>Map</tt> 接口的哈希表和链接列表实现，具有可预知的迭代顺序。<strong>此实现与 <tt>HashMap</tt> 的不同之处在于，后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序，该迭代顺序通常就是将键插入到映射中的顺序（</strong></em><em><strong>插入顺序）。</strong>注意，如果在映射中</em><em>重新插入 键，则插入顺序不受影响。（如果在调用 <tt>m.put(k, v)</tt> 前 <tt>m.containsKey(k)</tt> 返回了 <tt>true</tt>，则调用时会将键 <tt>k</tt> 重新插入到映射 <tt>m</tt> 中。）</em></p>
<p>LinkedHashSet:<em><br />
</em></p>
<dl><dt>
<pre>public class <strong>LinkedHashSet&lt;E&gt;</strong></pre>
<dt>extends <a title="java.util 中的类" href="file:///opt/doc/html/zh_CN/api/java/util/HashSet.html">HashSet</a>&lt;E&gt;</dt><dt>implements <a title="java.util 中的接口" href="file:///opt/doc/html/zh_CN/api/java/util/Set.html">Set</a>&lt;E&gt;, <a title="java.lang 中的接口" href="file:///opt/doc/html/zh_CN/api/java/lang/Cloneable.html">Cloneable</a>, <a title="java.io 中的接口" href="file:///opt/doc/html/zh_CN/api/java/io/Serializable.html">Serializable</a></dt> </dt></dl>
<p> </p>
<p><em>具有可预知迭代顺序的 <tt>Set</tt> 接口的哈希表和链接列表实现。<strong>此实现与 <tt>HashSet</tt> 的不同之外在于，后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序，即按照将元素插入到集合中的顺序（</strong></em><em><strong>插入顺序）进行迭代。</strong>注意，插入顺序</em><em>不 受在集合中</em><em>重新插入的 元素的影响。（如果在 <tt>s.contains(e)</tt> 返回 <tt>true</tt> 后立即调用 <tt>s.add(e)</tt>，则元素 <tt>e</tt> 会被重新插入到集合 <tt>s</tt> 中。）</em>  </p>
<br />
顺带再复习下Set、List、Map之间的区别：<br />
Set集合是不包含重复元素的，List则可以包含重复元素，Map是键-值的映射关系
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/82980#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 May 2007 13:00:24 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/82980</link>
        <guid>http://syhan.javaeye.com/blog/82980</guid>
      </item>
          <item>
        <title>java到底是传值还是传引用</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/82309" style="color:red;">http://syhan.javaeye.com/blog/82309</a>&nbsp;
          发表时间: 2007年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这个很基础很基础的问题今天才搞明白。<br />
今天和同学讨论C++的一个函数的参数是指针的时候我无意说了一句，要是java的话就不用这么复杂了，一律传引用，于是就引起了java到底是传值还是传引用的讨论。<br />
我之前的认识是这样的：在处理简单数据类型的时候毫无疑问是传值的，而当对象作为函数的参数的时候则是传的是引用。<br />
但是事实证明我的认识还是错的，现在我当然明白了java的传参究竟是传什么，下面简单说一下：<br />
可以说java不存在传递引用的情况，java只有一种传递方法就是传值，但是这个传值还是有一点小小的不同，例如在函数<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testRef(SomeClass&nbsp;sc)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//stub</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>sc.someMethod();&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//&nbsp;sc&nbsp;=&nbsp;new&nbsp;SomeClass();</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp; <br />
    </span></li>
</ol>
</div>
<br />
中，其中当调用此函数时<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span>SomeClass&nbsp;someClass&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SomeClass();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>testRef(someClass);&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
作为形参的sc会生成实参someClass的一个拷贝，但是这个拷贝是someClass在栈空间指向堆空间的地址的拷贝，我们知道，当使用诸如A a = new A();的时候，实际上A a是在栈空间中获得了一个A对象的&ldquo;引用&rdquo;，当使用new A();初始化这个对象是，则是在堆空间中申请了空间同时将a指向堆空间中的地址。有了这些知识就不难理解，在方法testRef中通过<strong>.</strong>的<strong>操作</strong>其实就是对传进来的实参someClass进行操作，因为此时sc是someClass地址，而若执行了sc = new SomeClass();sc的<strong>.</strong>的<strong>操作</strong>变不会再对someClass产生影响，究其原因，是因为此时sc已经指向了堆空间中另一块SomeClass类大小的地址。<br />
简单一点就是说，java在传递参数过程中若参数是对象传递的是对象地址的拷贝，也就是说传递的是地址的值。<br />
<br />
这个故事告诉我：凡事不可想当然<img src="/javascripts/fckeditor/editor/images/smiley/msn/confused_smile.gif" alt="" /><br />
<br />
补充，今天看sun出的SCJP指南，上面的解释比较科学<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能会问你是否理解传递值到方法中时会发生什么结果。如果方法中的代码改变了变量,对外部的方法是否可见?直接引用 Peter van der Lindens 的 Java 程序员解答的一段话(在 http://www.afu.com)<br />
//引用<br />
所有的变量(基本类型值和对象的引用值)都是值传递。但是这不是全部情况,对象是经常通过 Java 的引用变量来操作的。所以也可以说对象是通过引用传递的(<strong>引用变量通过值传递</strong>) 。这是变量不使用对象的值而是像前一个问题那样描述的使用对象引用的值的结果。最后一行:调用者对基本类型参数(int,char 等)的拷贝在相应参数变化时不会改变。但是,在被调用方法改变相应作为参数传递的对象(引用)字段时,调用者的对象也改变其字段。<br />
//引用结束<br />
&nbsp;&nbsp; 如果你来自 C++背景,你可能对值传递参数和用&amp;符号传递引用参数熟悉。在 Java 中没有这样的选择,所有的都是值传递。但是看起来并不总是这样。如果你传递的对象是对象的引用,你不能直接对对象的引用进行操作。 所以如果你操作一个传递到方法的对象的字段, 结果就好像你按引用传递(任何改变结果都会返回到调用函数) 将对象引用作为方法变量<br />
请看下面的例子<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;ValHold{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">10</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ObParm{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String&nbsp;argv[]){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObParm&nbsp;o&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ObParm();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.amethod();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;amethod(){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ValHold&nbsp;v&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ValHold();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.i=<span class="number">10</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">&quot;Before&nbsp;another&nbsp;=&nbsp;&quot;</span><span>+&nbsp;v.i);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;another(v);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">&quot;After&nbsp;another&nbsp;=&nbsp;&quot;</span><span>+&nbsp;v.i);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span class="comment">//End&nbsp;of&nbsp;amethod</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;another(ValHold&nbsp;v){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.i&nbsp;=&nbsp;<span class="number">20</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">&quot;In&nbsp;another&nbsp;=&nbsp;&quot;</span><span>+&nbsp;v.i);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span class="comment">//End&nbsp;of&nbsp;another</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
程序的输出结果是<br />
Before another = 10<br />
In another = 20<br />
After another = 20<br />
&nbsp;&nbsp;&nbsp;&nbsp; 看变量 i 是怎么被修改的。如果 Java 总是值传递(也就是对变量的拷贝)&nbsp; ,它是怎么被修改的呢?过程是这样的方法收到了句柄的拷贝或者对象的引用, 但是这个引用的作用类似于指向真实的指针。对这个字段的改变会反映到它所指的值。这有些像是在 C/C++中指针的自动间接应用的的作用。
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/82309#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 May 2007 22:42:17 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/82309</link>
        <guid>http://syhan.javaeye.com/blog/82309</guid>
      </item>
          <item>
        <title>如何ie6下utf8的页面传递中文参数</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/79909" style="color:red;">http://syhan.javaeye.com/blog/79909</a>&nbsp;
          发表时间: 2007年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天遇到了一个问题，就是明明在ff和opera下都很正常的链接在ie6下就是不能工作，甚至ie7是可以的。google了一下，好像这是ie6的一个bug<img src="/javascripts/fckeditor/editor/images/smiley/msn/angry_smile.gif" alt="" />，我的页面是utf8的，页面链接是含有中文参数的，ie6传过来的参数通过转码后好像会被截去半个字节，而其他的浏览器却不会。例如 http://url?name=中文 转码后 name 的值就会变成 中 和一个菱形乱码。现在的解决方法是将页面链接用jstl拼一下。<br />
例如：原来是
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;url?name=中文&quot;</span><span class="tag">&gt;</span><span>链接</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
现在使用jstl改写成<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">c:url</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;url&quot;</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;testurl&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&nbsp;&nbsp;&nbsp; &lt;</span><span class="tag-name">c:param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;中文&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">c:param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">c:url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;${testurl}&quot;</span><span class="tag">&gt;</span><span>链接</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
jstl会将中文字符自动的转为ascii码的格式，类似%E4%B8%AD%E6%96%87，这样在ie6下就没问题了，乱码解决了，生活真美好！<img src="/javascripts/fckeditor/editor/images/smiley/msn/teeth_smile.gif" alt="" />
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/79909#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 May 2007 22:51:48 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/79909</link>
        <guid>http://syhan.javaeye.com/blog/79909</guid>
      </item>
          <item>
        <title>子查询转连接的一点</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/78506" style="color:red;">http://syhan.javaeye.com/blog/78506</a>&nbsp;
          发表时间: 2007年05月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          因为万网使用的MySQL是4.0.24不支持子查询（MySQL从4.1开始支持），不得已要将现有的SQL语句涉及子查询的转化为连接：<br />
以下是我google到的一些资料：<br />
将 WHERE 子句中的子查询转换为连接<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Adaptive Server Anywhere 查询优化程序会对一些多层查询进行转换,以<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用连接。执行这一转换不需要任何用户操作。本节将介绍哪些子查询<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可转换为连接,以便您可以了解数据库中的查询的性能。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题 [Clarke 女士和 Suresh 女士何时下的订单,并且是向哪些销售代表示例<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下的订单? ] 可表示为两层查询:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-sql" start="1">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;order_date,&nbsp;sales_rep&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">FROM</span><span>&nbsp;sales_order&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;cust_id&nbsp;</span><span class="op">IN</span><span>&nbsp;(&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">SELECT</span><span>&nbsp;id&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">FROM</span><span>&nbsp;customer&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;lname&nbsp;=&nbsp;'Clarke'&nbsp;</span><span class="op">OR</span><span>&nbsp;fname&nbsp;=&nbsp;'Suresh')&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者,可以采用同样正确的方法来表示为使用连接的查询:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-sql" start="1">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;fname,&nbsp;lname,&nbsp;order_date,&nbsp;sales_rep&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">FROM</span><span>&nbsp;sales_order,&nbsp;customer&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;cust_id=customer.id&nbsp;</span><span class="op">AND</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lname&nbsp;=&nbsp;'Clarke'&nbsp;<span class="op">OR</span><span>&nbsp;fname&nbsp;=&nbsp;'Suresh')&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要将多层查询改写为连接必须满足一定的条件,运算符的类型不同,这<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 些条件也将有所不同。请回忆一下子查询出现在查询的 WHERE 子句中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的情况,其形式如下<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-sql" start="1">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;</span><span class="keyword">select</span><span>-list&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">FROM</span><span>&nbsp;</span><span class="keyword">table</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<span class="op">NOT</span><span>]&nbsp;expression&nbsp;comparison-operator&nbsp;(&nbsp;subquery&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;[<span class="op">NOT</span><span>]&nbsp;expression&nbsp;comparison-operator&nbsp;{&nbsp;</span><span class="op">ANY</span><span>&nbsp;|&nbsp;</span><span class="op">SOME</span><span>&nbsp;}&nbsp;(&nbsp;subquery&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;[<span class="op">NOT</span><span>]&nbsp;expression&nbsp;comparison-operator&nbsp;</span><span class="op">ALL</span><span>&nbsp;(&nbsp;subquery&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;[<span class="op">NOT</span><span>]&nbsp;expression&nbsp;</span><span class="op">IN</span><span>&nbsp;(&nbsp;subquery&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;[<span class="op">NOT</span><span>]&nbsp;EXISTS&nbsp;(&nbsp;subquery&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">GROUP</span><span>&nbsp;</span><span class="keyword">BY</span><span>&nbsp;</span><span class="keyword">group</span><span>-</span><span class="keyword">by</span><span>-expression&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">HAVING</span><span>&nbsp;search-condition&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 子查询是否可转换为连接取决于多种因素,例如运算符的类型、查询的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结构和子查询的结构等。<br />
<br />
<br />
下面是我的通用的解决方案：<br />
<br />
查询： &nbsp;  &nbsp;  &nbsp; <br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span class="keyword">SELECT</span><span> *&nbsp; </span><span class="keyword">FROM</span><span> table1&nbsp; </span><span class="keyword">WHERE</span><span>&nbsp; id&nbsp; </span><span class="op">IN</span><span>&nbsp; (</span><span class="keyword">SELECT</span><span>&nbsp; id&nbsp; </span><span class="keyword">FROM</span><span> table2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp; 可以被写成： &nbsp;  &nbsp;  &nbsp; <br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;table1.*&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;table1,table2&nbsp;&nbsp;</span><span class="keyword">WHERE</span><span>&nbsp;&nbsp;table1.id=table2.id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
或者使用一个内连接：<br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;table1.*&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;table2&nbsp;</span><span class="keyword">INNER</span><span>&nbsp;</span><span class="op">JOIN</span><span>&nbsp;table1&nbsp;</span><span class="keyword">ON</span><span>&nbsp;table1.id=table2.id;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp;  &nbsp;  &nbsp; <br />
&nbsp; 查询： &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; <br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;*&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;&nbsp;table1&nbsp;&nbsp;</span><span class="keyword">WHERE</span><span>&nbsp;&nbsp;id&nbsp;&nbsp;</span><span class="op">NOT</span><span>&nbsp;&nbsp;</span><span class="op">IN</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;id&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;table2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;*&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;&nbsp;table1&nbsp;&nbsp;</span><span class="keyword">WHERE</span><span>&nbsp;&nbsp;</span><span class="op">NOT</span><span>&nbsp;&nbsp;EXISTS&nbsp;&nbsp;(</span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;id&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;table2&nbsp;</span><span class="keyword">WHERE</span><span>&nbsp;&nbsp;table1.id=table2.id);&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
&nbsp; &nbsp; <br />
&nbsp; 可以被写成： &nbsp;  &nbsp;  &nbsp; <br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;&nbsp;table1.*&nbsp;&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;&nbsp;table1&nbsp;&nbsp;</span><span class="func">LEFT</span><span>&nbsp;</span><span class="op">JOIN</span><span>&nbsp;&nbsp;table2&nbsp;&nbsp;</span><span class="keyword">ON</span><span>&nbsp;&nbsp;table1.id=table2.id&nbsp;&nbsp;</span><span class="keyword">WHERE</span><span>&nbsp;table2.id&nbsp;</span><span class="keyword">IS</span><span>&nbsp;</span><span class="op">NULL</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
参考资料：<br />
<a href="http://corp.avantgo.com/developer/product_manuals/sqlanywhere/0902/zh/html/dbfgzh9/00000172.htm" target="_blank">http://corp.avantgo.com/developer/product_manuals/sqlanywhere/0902/zh/html/dbfgzh9/00000172.htm</a><br />
Adaptive Server&reg; Anywhere<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL 用户指南<br />
<br />
<a href="http://topic.csdn.net/t/20020813/09/935770.html" target="_blank">http://topic.csdn.net/t/20020813/09/935770.html</a><br />
将一个子查询转换成外部连接
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/78506#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 10 May 2007 15:00:00 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/78506</link>
        <guid>http://syhan.javaeye.com/blog/78506</guid>
      </item>
          <item>
        <title>破解了下ViPlugin</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/77408" style="color:red;">http://syhan.javaeye.com/blog/77408</a>&nbsp;
          发表时间: 2007年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          是eclipse的一个插件，等于在eclipse下模拟vi的操作，我本以为是免费的，没想到要n欧元，google了一下，发现这个文章<a href="http://geniil.spaces.live.com/blog/cns!81B15F02616BA25C!238.entry#comment">geniil.spaces.live.com/blog/cns!81B15F02616BA25C!238.entry#comment</a><br />
于是我就自己尝试破解了一下，的确很简单，只是将源码改成类似如下就可以了，很简单，整个文件就不发上来了，确实需要和我联系吧
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;checkLicenseFile(String&nbsp;fileName)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">throws</span><span>&nbsp;Exception&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
还发现jad很酷，速度也不错：）
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/77408#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 May 2007 22:48:24 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/77408</link>
        <guid>http://syhan.javaeye.com/blog/77408</guid>
      </item>
          <item>
        <title>最近在玩wordpress</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/55574" style="color:red;">http://syhan.javaeye.com/blog/55574</a>&nbsp;
          发表时间: 2007年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这个东西很好玩，很自由，可定制性非常强，插件体系我很喜欢<br />
<a href="http://www.prophp.org">www.prophp.org</a>上的空间也很酷<br />
<br />
我的wordpress地址是<a href="http://syhan.prophp.org">http://syhan.prophp.org</a>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/55574#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 29 Apr 2007 02:44:00 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/55574</link>
        <guid>http://syhan.javaeye.com/blog/55574</guid>
      </item>
          <item>
        <title>如何使用jstl只获取数组中的某些项</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/76015" style="color:red;">http://syhan.javaeye.com/blog/76015</a>&nbsp;
          发表时间: 2007年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我原以为可以直接修改<c:foreach>中的步长的，像这样<br />
<br />
</c:foreach><c:set var="step" value="1">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">c:set</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;step&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">&quot;${district}&quot;</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;d&quot;</span><span>&nbsp;</span><span class="attribute">begin</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span>&nbsp;</span><span class="attribute">step</span><span>=</span><span class="attribute-value">&quot;${step}&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&hellip;&hellip;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">c:set</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;step&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${expression}&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">c:forEach</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
结果发现<c:set var="step" value="${expression}"></c:set>这一行<c:set var="step" value="${expression}"></c:set>根本不改变整个的循环，没办法只好想了个笨办法，就是增加零时变量来比较，像这样<br />
<br />
</c:set><c:set var="step" value="1"><c:foreach var="d" begin="1" items="${district}">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">&quot;${district}&quot;</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;d&quot;</span><span>&nbsp;</span><span class="attribute">begin</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">c:if</span><span>&nbsp;</span><span class="attribute">test</span><span>=</span><span class="attribute-value">&quot;${index&nbsp;==&nbsp;temp}&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&hellip;&hellip;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">c:set</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">&quot;temp&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${temp+(d.right-d.left-1)/2&nbsp;+&nbsp;1}&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">c:if</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">c:forEach</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
</c:foreach><br />
<br />
整个写法很繁琐，也许都怪我有对jsp页面中的java代码的偏执感，用java很容易就解决了，但是我就是不想让我的jsp页面出现java代码<img alt="" src="/javascripts/fckeditor/editor/images/smiley/msn/tounge_smile.gif" /></c:set>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/76015#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 29 Apr 2007 02:38:29 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/76015</link>
        <guid>http://syhan.javaeye.com/blog/76015</guid>
      </item>
          <item>
        <title>有关读数据库的无刷新的三级联动以及层次数据(树形结构)在关系数据库的存储</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/70002" style="color:red;">http://syhan.javaeye.com/blog/70002</a>&nbsp;
          发表时间: 2007年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">
<p><font face="Arial">我的标题真冗长：P</font></p>
<p><font face="Arial">最近一直在考虑这个问题，如何在现在常用的关系型数据库（如mysql，mssql）中存储含有层次结构（例如xml或者树型结构）的数据，我最终要实现的结果是一个比较好的页面三级联动菜单。比较了一下现有的三级联动，无非有两种解决方案，1、将所有数据写成静态的，这样的缺点在于对更新封闭;2、每改变一次去数据库中获取数据，填充到下一级菜单，这个缺点是对数据库的开销比较大，查询一次数据要对数据库做三次操作，而且数据库设计的比较丑陋。上述两种方法都让我比较不能接受。</font></p>
<p><font face="Arial">我想的是一种比较优雅的解决方案：在数据库中存储的数据不要冗余，便于查询，不要产生递归，对数据库的开销要尽可能的小，尽量做到一次将所有数据都读出来，用户也要有比较好的体验。我最初的解决方案就是用xml来存储联动的数据，但是对于数据库操作来说，最后还是要落实到对文件的I/O操作，从这方面来讲，使用xml和数据库并没有什么本质的不同。另外一种解决方案就是在关系数据库中存类xml的数据了。google了半天，最后发现了一片自己学院一位学长翻译的文章<a target="_parent" href="http://www.nirvanastudio.org/category/database">www.nirvanastudio.org/category/database</a>，讲得就是如何在关系型数据库存储这种层次数据的。文中提出了两种解决方案，一是&ldquo;邻接列表模型&rdquo;或称为&ldquo;递归方法&rdquo;，这种存在着数据冗余，而且递归出于众所周知的原因，效率不高。第二种方法，也就是我现在采用的方法是&quot;前序优先遍历&quot;，表结构也很简单，没有冗余</font></p>
<p>
<table width="200" cellspacing="1" cellpadding="1" border="1" align="" summary="">
    <tbody>
        <tr>
            <td><font face="Arial">id</font></td>
            <td><font face="Arial">name</font></td>
            <td><font face="Arial">left</font></td>
            <td><font face="Arial">right</font></td>
        </tr>
    </tbody>
</table>
<font face="Arial"><br />
</font> </p>
<p><font face="Arial">我觉得应该属于一种深度优先。通过每个节点的左右两个属性获得其子女的属性，好处就在于获得一个或几个节点只需要一次查询，而在更新的时候速度会比较慢，因为要更新多个后继节点，不过话说回来，更新相对于获取来说次数要少的多，可以忽略。</font></p>
<p><font face="Arial">下面是我的解决方案：</font></p>
<p><br />
java 代码 </p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.sql.Connection;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.sql.ResultSet;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.sql.Statement;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.ArrayList;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.netkc.struts.datasource.DataSource;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.netkc.struts.mapping.District;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;SONG&nbsp;Yihan</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;1.0</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@date:&nbsp;Monday,&nbsp;April&nbsp;09&nbsp;2007</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;DistrictTree&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;ArrayList<district>&nbsp;tree;&nbsp;&nbsp;</district></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Statement&nbsp;stmt1&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Statement&nbsp;stmt2&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;DistrictTree()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DataSource.getConnection();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(ClassNotFoundException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(InstantiationException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(IllegalAccessException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;DistrictTree(Connection&nbsp;conn)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.conn&nbsp;=&nbsp;conn;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;addNode(String&nbsp;parentId,&nbsp;String&nbsp;districtId,&nbsp;String&nbsp;districtName)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;district&nbsp;WHERE&nbsp;districtId='&quot;</span><span>&nbsp;+&nbsp;parentId&nbsp;+&nbsp;</span><span class="string">&quot;';&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setAutoCommit(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt1&nbsp;=&nbsp;conn.createStatement();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;stmt1.executeQuery(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(rs.next())&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;right&nbsp;=&nbsp;rs.getInt(</span><span class="string">&quot;rgt&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;UPDATE&nbsp;district&nbsp;SET&nbsp;lft=lft+2&nbsp;WHERE&nbsp;lft&gt;=&quot;</span><span>&nbsp;+&nbsp;right;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;UPDATE&nbsp;district&nbsp;SET&nbsp;rgt=rgt+2&nbsp;WHERE&nbsp;rgt&gt;=&quot;</span><span>&nbsp;+&nbsp;right;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;INSERT&nbsp;INTO&nbsp;district&nbsp;(districtId,&nbsp;districtName,&nbsp;lft,&nbsp;rgt)&nbsp;VALUES&nbsp;('&quot;</span><span>+districtId&nbsp;+&nbsp;</span><span class="string">&quot;',&nbsp;'&quot;</span><span>&nbsp;+&nbsp;districtName&nbsp;+&nbsp;</span><span class="string">&quot;',&nbsp;&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(right)&nbsp;+&nbsp;<span class="string">&quot;,&nbsp;&quot;</span><span>&nbsp;+&nbsp;(right+</span><span class="number">1</span><span>)&nbsp;+</span><span class="string">&quot;);&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>[]&nbsp;flag&nbsp;=&nbsp;stmt2.executeBatch();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(flag[flag.length&nbsp;-&nbsp;</span><span class="number">1</span><span>]&nbsp;==&nbsp;</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;deleteNode(String&nbsp;districtId)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;district&nbsp;WHERE&nbsp;districtId='&quot;</span><span>&nbsp;+&nbsp;districtId&nbsp;+&nbsp;</span><span class="string">&quot;';&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setAutoCommit(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;stmt1.executeQuery(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(rs.next())&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;left&nbsp;=&nbsp;rs.getInt(</span><span class="string">&quot;lft&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;right&nbsp;=&nbsp;rs.getInt(</span><span class="string">&quot;rgt&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;(right&nbsp;-&nbsp;left&nbsp;-&nbsp;</span><span class="number">1</span><span>)&nbsp;/&nbsp;</span><span class="number">2</span><span>&nbsp;+&nbsp;</span><span class="number">1</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;minus&nbsp;=&nbsp;count&nbsp;*&nbsp;</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;DELETE&nbsp;FROM&nbsp;district&nbsp;WHERE&nbsp;lft&nbsp;BETWEEN&nbsp;&quot;</span><span>&nbsp;+&nbsp;left&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;AND&nbsp;&quot;</span><span>&nbsp;+&nbsp;right&nbsp;+&nbsp;</span><span class="string">&quot;;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;UPDATE&nbsp;district&nbsp;SET&nbsp;lft=lft-&quot;</span><span>&nbsp;+&nbsp;minus&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;WHERE&nbsp;lft&gt;&quot;</span><span>+right;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;UPDATE&nbsp;district&nbsp;SET&nbsp;rgt=rgt-&quot;</span><span>&nbsp;+&nbsp;minus&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;WHERE&nbsp;rgt&gt;&quot;</span><span>+right;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.addBatch(sql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;flag&nbsp;=&nbsp;stmt2.executeBatch()[</span><span class="number">0</span><span>];&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(flag&nbsp;==&nbsp;</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;displayTree(String&nbsp;parentId)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;ArrayList<district>&nbsp;getTree(String&nbsp;parentId)&nbsp;{&nbsp;&nbsp;</district></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;district&nbsp;WHERE&nbsp;districtId='&quot;</span><span>&nbsp;+&nbsp;parentId&nbsp;+&nbsp;</span><span class="string">&quot;';&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt1&nbsp;=&nbsp;conn.createStatement();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;stmt1.executeQuery(sql);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(rs.next())&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;left&nbsp;=&nbsp;rs.getInt(</span><span class="string">&quot;lft&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;right&nbsp;=&nbsp;rs.getInt(</span><span class="string">&quot;rgt&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2&nbsp;=&nbsp;conn.createStatement();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;district&nbsp;WHERE&nbsp;lft&nbsp;BETWEEN&nbsp;&quot;</span><span>&nbsp;+&nbsp;left&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;AND&nbsp;&quot;</span><span>&nbsp;+&nbsp;right&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;ORDER&nbsp;BY&nbsp;lft&nbsp;ASC&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;stmt2.executeQuery(sql);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ArrayList<district>();&nbsp;&nbsp;</district></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;District&nbsp;district&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>(rs.next())&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;District();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district.setDistrictId(rs.getString(<span class="string">&quot;districtId&quot;</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district.setDistrictName(rs.getString(<span class="string">&quot;districtName&quot;</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district.setLeft(rs.getInt(<span class="string">&quot;lft&quot;</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district.setRight(rs.getInt(<span class="string">&quot;rgt&quot;</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.add(district);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;tree;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(rs&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt1.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt2.close();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;ArrayList<district>&nbsp;getChildren(String&nbsp;parentId)&nbsp;{&nbsp;&nbsp;</district></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(tree&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree&nbsp;=&nbsp;getTree(parentId);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<district>&nbsp;children&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ArrayList<district>();&nbsp;&nbsp;</district></span></district></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;index&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.indexof(parentId);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(index&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;District&nbsp;d&nbsp;=&nbsp;tree.get(index);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;(d.getRight()&nbsp;-&nbsp;d.getLeft()&nbsp;-&nbsp;</span><span class="number">1</span><span>)&nbsp;/&nbsp;</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;index&nbsp;+&nbsp;</span><span class="number">1</span><span>;&nbsp;i&nbsp;&lt;=&nbsp;index&nbsp;+&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;tree.get(i);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.add(d);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;(d.getRight()&nbsp;-&nbsp;d.getLeft()&nbsp;-&nbsp;<span class="number">1</span><span>)&nbsp;/&nbsp;</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;children;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;indexof(String&nbsp;districtId)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;index&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;index&nbsp;&lt;&nbsp;tree.size();&nbsp;index++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(districtId.equals(tree.get(index).getDistrictId()))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;index;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;-</span><span class="number">1</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;updateNode(String&nbsp;districtId,&nbsp;String&nbsp;districtName)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;UPDATE&nbsp;district&nbsp;SET&nbsp;districtName='&quot;</span><span>&nbsp;+&nbsp;districtName&nbsp;+&nbsp;</span><span class="string">&quot;'&nbsp;WHERE&nbsp;districtId='&quot;</span><span>&nbsp;+&nbsp;districtId&nbsp;+&nbsp;</span><span class="string">&quot;';&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setAutoCommit(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt1&nbsp;=&nbsp;conn.createStatement();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;flag&nbsp;=&nbsp;stmt1.executeUpdate(sql);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(flag&nbsp;==&nbsp;</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(SQLException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>这个最遗憾的地方就是在其中混杂了java代码，这让我及其不爽，但是我没有找到向js传值的好办法：（<br />
</p>
<br />
<p> </p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;District(id,&nbsp;name,&nbsp;left,&nbsp;right)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.id=id;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.name=name;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.left=left;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.right=right;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;tree&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Array();&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(District&nbsp;d&nbsp;:&nbsp;tree)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&gt;&nbsp;&nbsp;tree.push(<span class="keyword">new</span><span>&nbsp;District('&lt;%=d.getDistrictId()%&gt;',&nbsp;'&lt;%=d.getDistrictName()%&gt;',&nbsp;'&lt;%=d.getLeft()%&gt;',&nbsp;'&lt;%=d.getRight()%&gt;'));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%}%&gt;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.prototype.indexof&nbsp;=&nbsp;<span class="keyword">function</span><span>(id)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;index&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;tree.length;&nbsp;index++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(id&nbsp;==&nbsp;tree[index].id)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;index;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;-1;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><span>&nbsp;citychanged(id){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('district').length&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('area').length&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;districts&nbsp;=&nbsp;getChildren(id);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;districts.length;&nbsp;i++){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('district').options[i]&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Option(districts[i].name,&nbsp;districts[i].id);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><span>&nbsp;districtchanged(id)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('area').length&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;area&nbsp;=&nbsp;getChildren(id);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;area.length;&nbsp;i++){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('area').options[i]&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Option(area[i].name,&nbsp;area[i].id);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><span>&nbsp;getChildren(id)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(tree.length&nbsp;==&nbsp;0)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;children&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Array();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;index&nbsp;=&nbsp;tree.indexof(id);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(index&nbsp;!=&nbsp;-1)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;d&nbsp;=&nbsp;tree[index];&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;count&nbsp;=&nbsp;(d.right&nbsp;-&nbsp;d.left&nbsp;-&nbsp;1)&nbsp;/&nbsp;2;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;index&nbsp;+&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;index&nbsp;+&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;tree[i];&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.push(d);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;(d.right&nbsp;-&nbsp;d.left&nbsp;-&nbsp;1)&nbsp;/&nbsp;2;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;children;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<br />
<p> </p>
<div class="code_title">jsp 页面 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;/fastfoodAct?method=query&quot;</span><span>&nbsp;styleId=</span><span class="string">&quot;queryFoodForm&quot;</span><span>&gt;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchType&nbsp;:&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;city&nbsp;:&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;district&nbsp;:&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area&nbsp;:&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;restaurantName&nbsp;:&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchType&nbsp;:&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foodName&nbsp;:&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <html:submit>
    <html:cancel>
    &nbsp;&nbsp;
    </html:cancel>
    </html:submit>
    </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<p>&nbsp;</p>
<p>以上就是我解决三级联动和层次结构的一点想法：）<br />
</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/70002#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 11 Apr 2007 11:26:55 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/70002</link>
        <guid>http://syhan.javaeye.com/blog/70002</guid>
      </item>
          <item>
        <title>有一天有许多话要说出的人</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/65616" style="color:red;">http://syhan.javaeye.com/blog/65616</a>&nbsp;
          发表时间: 2007年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p align="center"><a name="n5">有一天有许多话要说出的人， <br />
常默然把许多话藏在内心： <br />
有一天要点燃闪电火花的人， <br />
必须长时期做天上的云。 <br />
</a></p>
<p align="center"><a name="n5"></a></p>
<p align="center"><a name="n5"></a></p>
<p align="center"><a name="n5" href="http://goldnets.myrice.com/golden_eye/nicai/nicaipoetry4.htm" target="_blank"><br />
</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://syhan.javaeye.com/blog/65616#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Mon, 26 Mar 2007 18:48:19 +0800</pubDate>
        <link>http://syhan.javaeye.com/blog/65616</link>
        <guid>http://syhan.javaeye.com/blog/65616</guid>
      </item>
          <item>
        <title>Linux下MySQL，jsp的中文问题解决</title>
        <author>syhan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://syhan.javaeye.com">syhan</a>&nbsp;
                    链接：<a href="http://syhan.javaeye.com/blog/59113" style="color:red;">http://syhan.javaeye.com/blog/59113</a>&nbsp;
          发表时间: 2007年03月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="MARGIN-BOTTOM: 0cm">我的环境为<font face="Times New Roman, serif">Ubuntu 6.10, MySQL 5.0.24a-Debian_9ubuntu1(直接apt-get而来), tomcat 5.5.20</font></p>
<p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif">这个也算是一个经典问题了，写在这里以后方便查阅<br />
</font></p>
<p style="MARGIN-BOTTOM: 0cm">没什么原创，结合前人的经验，我的步骤如下</p>
<p style="MARGIN-BOTTOM: 0cm"><br />
<font face="Times New Roman, serif"></font></p>
<p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font face="Times New Roman, serif">1</font>、修改<font face="Times New Roman, serif">/etc/mysql/my.cnf</font>，在</font></p>
<p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font face="Times New Roman, serif">[mysqld]</font>下添加一行</font></p>
<div class="code_title">java 代码</div>
<font face="Times New Roman, serif">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>[mysqld] &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">default</span><span>-character-set=utf8&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>保存退出后，重新启动<font face="Times New Roman, serif">mysql</font>的服务 <br />
</p>
<font face="Times New Roman, serif"></font>
<p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"></font></p>
<div class="code_title"><font face="Times New Roman, serif">java 代码</font></div>
<font face="Times New Roman, serif"></font>
<div class="dp-highlighter"><font face="Times New Roman, serif"></font>
<ol class="dp-j"><font face="Times New Roman, serif">
    <li class="alt"><span><span>sudo&nbsp;/etc/init.d/mysql&nbsp;restart&nbsp;&nbsp;</span></span> </li>
    </font></ol>
    <font face="Times New Roman, serif"></font></div>
    <p><font face="Times New Roman, serif"><font face="Times New Roman, serif"><font face="Times New Roman, serif">2</font>、将所有需要输入中文的<font face="Times New Roman, serif">jsp</font>页面的<font face="Times New Roman, serif">pageEncoding</font>都设为<font face="Times New Roman, serif">UTF-8</font>，即在开始加上</font></font></p>
    <div class="code_title">java 代码</div>
    <font face="Times New Roman, serif"><font face="Times New Roman, serif"><font face="Monospace"></font></font></font><font face="Times New Roman, serif"><font face="Times New Roman, serif"><font face="Monospace"><font face="Times New Roman, serif">
    <div class="dp-highlighter">
    <div class="bar"></div>
    <ol class="dp-j">
        <li class="alt"><span><span>&lt;%@&nbsp;page&nbsp;language=</span><span class="string">&quot;java&quot;</span><span>&nbsp;pageEncoding=</span><span class="string">&quot;UTF-8&quot;</span><span>%&gt;&nbsp;&nbsp;</span></span></li>