<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>我在Java岛的日子</title>
    <description>别混日子了，小心被日子给混了！</description>
    <link>http://kanghao126.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>ORACLE PL/SQL 字符串函数、数学函数、日期函数</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/181772" style="color:red;">http://kanghao126.javaeye.com/blog/181772</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          --【字符串函数】<br />--字符串截取substr(字段名，起始点,个数)<br />select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1;<br /><br />--字符串从前面取三个(0开始)<br />select Name,substr(Name,0,3) from t1;<br />--字符串从后面取三个<br />select Name,substr(Name,-3,3),length(Name) 串长度 from t1;<br /><br /><br />SELECT ASCII('A'),ASCII('B') from dual;<br /><br />select CHR(100),CHR(80) from dual;<br /><br />select CONCAT(CHR(65),CONCAT(CHR(67),CHR(98))) from dual;<br /><br />select CHR(65)||CHR(66)||CHR(76) from dual;<br /><br />--将每个单词的第一个字母大写其它字母小写返回。<br />select INITCAP('substr,abc,substring') from dual;<br />--返回i在MISSISSIPPI中第3次出现的位置，<br />select INSTR('Mississippi','i',5,3) from dual;<br />select INSTR('Mississippi','i',-2,3) from dual;<br />--返回的是字节<br />select INSTRB('Mississippi','i',5,3) from dual;<br />select INSTRB('Mississippi','i',-2,3) from dual;<br />--长度<br />select length('WHO ARE YOU') from dual;<br />select nvl(null,'空') from dual;<br />--小写<br />select lower('WHo are You') from dual;<br />--LPAD左侧用字符串补足到一定长度<br />select LPAD('DFSDf................',9,'WHO') from dual;<br />select LPAD('DFSD',9,'WHO') from dual;<br />select LPAD('DFSD',9,'') from dual;<br />select LPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual;<br />--把最左边的字符去掉，使其第一个字符不在其中<br />select ltrim('Mississippi','Mis') from dual;<br />select ltrim('Mississippi','miD') from dual;<br />--RPAD右侧用字符串补足到一定长度<br />select RPAD('DFSDf................',9,'WHO') from dual;<br />select RPAD('DFSD',9,'WHO') from dual;<br />select RPAD('DFSD',9,'') from dual;<br />select RPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual;<br />--把最右边的字符去掉，使其第一个字符不在其中<br />select Rtrim('Mississippi','Mis') from dual;<br />select Rtrim('Mississippi','miD') from dual;<br />--替换<br />select REPLACE('uptown','up','down') from dual;<br />--substr和substrb<br />select SUBSTR('Message',1,4) from dual;<br />select SUBSTR('ABCDEFG',5) from dual;<br />select substrb('国际劳动节国营农场',5) from dual;<br />select substrb('国际劳动节国营农场',2) from dual;<br />select substrb('国际劳动节国营农场',4,8) from dual;<br />select substrb('国际劳动节国营农场',3,8) from dual;<br />--发音<br />select SOUNDEX('dawes') Dawes,SOUNDEX('daws') Daws, SOUNDEX('dawson') from dual;<br />--translate<br />select TRANSLATE('ABCDefghijklmn','eg','替代') test from dual;<br /><br />select TRIM(' Space padded   0..o0..  ') trim from dual;<br /><br />select UPPER('abDCCfasdfsdafasdf') from dual;<br /><br />--【数学函数】所有函数都有数字参数并返回数字值。所有三角函数的操作数和值都是弧度而不是角度，<br />--oracle没有提供内建的弧度和角度的转换函数。<br />select abs(-10.234) from dual;<br />select acos(-1),acos(1) from dual;<br />select asin(1),asin(0) from dual;<br />select atan(1),atan(-1) from dual;<br />select ceil(-2),ceil(5.1) from dual;<br />select cos(-1) from dual;<br />select cosh(1) from dual;<br />select exp(3),exp(2),exp(1) from dual;<br />select Floor(-3.2),floor(5.91) from dual;<br />select LN(2) from dual;<br />select Log(10,2),log(2,10),log(10,1000) from dual;<br />select MOD(19,3),MOD(20,3),MOD(21,3) from dual;<br />select POWER(3,4),POWER(4,2) from dual;<br />select ROUND(12345,-2),ROUND(12345.54321,2),ROUND(-234234.9800234) FROM dual;<br />select SIGN(-10),SIGN(0),SIGN(1000) from dual;<br />select sin(1.57) from dual;<br />select sinh(2.34) from dual;<br />select SQRT(2),sqrt(3) from dual;<br />select TAN(1.2) from dual;<br />select TANH(2.32) from dual;<br />select trunc(2.2342342,5),trunc(2.3234234) from dual;<br /><br />--【日期函数】操作DATE数据类型，绝大多数都有DATE数据类型的参数<br />--增加月<br />select sysdate,Add_MONTHS(sysdate,1),<br />Add_MONTHS(TO_Date('2008-05-31 18:18:18','yyyy-MM-dd HH24:MI:SS'),1),<br />Add_MONTHS(TO_Date('2008-05-31 18:18:18','yyyy-MM-dd HH24:MI:SS'),2)<br /> from dual;<br />--每月最后一天 只区别了日期, 时间没有区别<br />select Last_day(sysdate) from dual;<br />--如果d1和d2的日的日期都相同，或者都使该月的最后一天，那么将返回一个整数，否则会返回的结果将<br /><br />包含一个分数。<br />select MONTHS_BETWEEN(sysdate,To_Date('2008-05-31 14:40:00','yyyy-MM-dd HH24:MI:SS')) from <br /><br />dual;<br /><br />select NEW_TIME(sysdate,'GMT','PST') from dual;<br /><br />select NEXT_DAY(To_Date('2007-06-04','yyyy-MM-dd'),'Monday') "1st Monday"<br /> from dual;<br /> <br /> select ROUND(sysDate,'yyyy'),ROUND(sysDate,'mm'),ROUND(sysdate,'dd'),<br />        ROUND(sysdate,'HH24'),ROUND(sysDate,'MI')<br /> from dual;<br /> select sysdate from dual;<br /> <br /> select trunc(sysdate),trunc(sysdate,'HH24'),trunc(sysdate,'MI') from dual;
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/181772#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 14:31:39 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/181772</link>
        <guid>http://kanghao126.javaeye.com/blog/181772</guid>
      </item>
      <item>
        <title>[转]Spring中idref和ref的不同</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/162437" style="color:red;">http://kanghao126.javaeye.com/blog/162437</a>&nbsp;
          发表时间: 2008年02月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一直以为ref和idref没有大的区别，它们两个可以替换。 <br /><br />网上也有很多人认为这两个没区别。 <br /><br />最近做Spring和Hibernate的集成的时候发现配置sessionFactory的dataSource的时候用idref不行，用ref就行。 <br /><br />配置文件beans.xml为： <br /><br />&lt;?xml version="1.0" encoding="UTF-8"?> <br /><br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <br /><br /><br /><br />&lt;beans> <br /><br />    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <br /><br />        &lt;property name="mappingDirectoryLocations"> <br /><br />            &lt;list> <br /><br />                &lt;value>org/li/hibernate/spring/entity&lt;/value> <br /><br />            &lt;/list> <br /><br />        &lt;/property> <br /><br />        &lt;property name="dataSource"> <br /><br />            &lt;ref bean="dataSource"/> <br /><br />        &lt;/property> <br /><br />        &lt;property name="hibernateProperties"> <br /><br />            &lt;props> <br /><br />                &lt;prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect&lt;/prop> <br /><br />                &lt;prop key="show_sql">true&lt;/prop> <br /><br />            &lt;/props> <br /><br />        &lt;/property> <br /><br />    &lt;/bean> <br /><br />    &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <br /><br />        &lt;property name="url"> <br /><br />            &lt;value>jdbc:mysql://localhost:3306/spring&lt;/value> <br /><br />        &lt;/property> <br /><br />        &lt;property name="driverClassName"> <br /><br />            &lt;value>com.mysql.jdbc.Driver&lt;/value> <br /><br />        &lt;/property> <br /><br />        &lt;property name="username"> <br /><br />            &lt;value>root&lt;/value> <br /><br />        &lt;/property> <br /><br />        &lt;property name="password"> <br /><br />            &lt;value>java&lt;/value> <br /><br />        &lt;/property> <br /><br />    &lt;/bean> <br /><br />    &lt;bean id="ArticleDAO" class="org.li.spring.hibernate.dao.implement.ArticleDAO"> <br /><br />        &lt;property name="hibernateTemplate"> <br /><br />            &lt;ref local="hibernateTemplate"/> <br /><br />        &lt;/property> <br /><br />    &lt;/bean> <br /><br />     <br /><br />    &lt;bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <br /><br />        &lt;property name="sessionFactory"> <br /><br />            &lt;ref bean="sessionFactory"/> <br /><br />        &lt;/property> <br /><br />    &lt;/bean> <br /><br />&lt;/beans> <br /><br />如果将上面的 <br /><br />&lt;property name="dataSource"> <br /><br /><br />            &lt;ref local="dataSource"/> <br /><br />&lt;/property> <br /><br />换成 <br /><br />&lt;property name="dataSource"> <br /><br /><br />      &lt;idref local="dataSource"/> <br /><br />&lt;/property> <br /><br />就出错了 <br /><br />这是我的测试类： <br /><br />Resource res=new ClassPathResource("beans.xml"); <br /><br />BeanFactory bf=new XmlBeanFactory(res); <br /><br />ArticleDAO articleDao = (ArticleDAO) bf.getBean("ArticleDAO"); <br /><br />Article article = new Article(); <br /><br />article.setTitle("学习Spring"); <br /><br />article.setContent("Spring和Hibernate的如何集成的呢~"); <br /><br />article.setAuthor("javafish"); <br /><br />articleDao.save(article); <br /><br /><br /><br />异常发生在org.springframework.beans.TypeConverterDelegate这个类中的 <br /><br />convertIfNecessary函数里的 <br /><br />if (!ClassUtils.isAssignableValue(requiredType, convertedValue)) { <br /><br />                // Definitely doesn't match: throw IllegalArgumentException. <br /><br />                throw new IllegalArgumentException("No matching editors or conversion strategy found"); <br /><br />两句代码上： <br /><br />分别用ref和idref配置beans.xml调试了程序 <br /><br />发现如果是用idref配置的话，当解析到dataSource的时候requiredType的值为"java.sql.dataSource, <br />cov,ertedValue的值为"dataSource"&lt;----这只是个在配置文件里标识类的字符串不是我们想要的类 <br /><br />如果是用ref配置的话，当解析到dataSource的时候requiredType的值为"java.sql.dataSource,cov,ertedValue的值为"DriverManagerDataSource"&lt;-----这正是我们想要的类 <br /><br /><br /><br />所以idref有两个作用，1.方便xml检查，2.它和&lt;value>差不多，只一个字符串。 <br />ref呢：是spring提供的用于引用bean的元素。
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/162437#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Feb 2008 12:18:30 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/162437</link>
        <guid>http://kanghao126.javaeye.com/blog/162437</guid>
      </item>
      <item>
        <title>2008第一天</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/152167" style="color:red;">http://kanghao126.javaeye.com/blog/152167</a>&nbsp;
          发表时间: 2008年01月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          希望在2008年里能财色双收.<img src="/images/smiles/icon_biggrin.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/152167#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jan 2008 17:22:41 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/152167</link>
        <guid>http://kanghao126.javaeye.com/blog/152167</guid>
      </item>
      <item>
        <title>微软出品桌面壁纸自动换</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/145715" style="color:red;">http://kanghao126.javaeye.com/blog/145715</a>&nbsp;
          发表时间: 2007年12月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          微软出品“桌面壁纸自动换”<br /><br />壁纸自动换(Slide Show) V5.1.3570<br /><br />适用平台：Windows XP/Windows 2003<br /><br />使用技巧：<br />安装本软件后在桌面空白处单击鼠标右键选取属性并切换到壁纸自动换项，<br />然后依自己的喜好任意设置吧。设置完毕后别忘了按下“确定”按钮哟。
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/145715#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Dec 2007 23:03:17 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/145715</link>
        <guid>http://kanghao126.javaeye.com/blog/145715</guid>
      </item>
      <item>
        <title>远程桌面无法连接的解决办法</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/141104" style="color:red;">http://kanghao126.javaeye.com/blog/141104</a>&nbsp;
          发表时间: 2007年11月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">操作系统是 windows xp + sp2, 已经开启了远程桌面功能.<br />
无法通过远程桌面连接, 远程桌面窗口黑屏闪一下就中断了, 多连 2 次就会提示&rdquo; 远程计算机已结束连接&rdquo;.</font></p>
<p><font size="3">发现往往是GHOST的系统容易出现该问题<br />
</font></p>
<p><font size="3">该问题可能是由于Terminal Services的设备重定向器有问题，导致连接失败。解决方法：<br />
1. 到以下链接下载Devcom.exe工具http://download.microsoft.com/download/1/1/f/11f7dd10-272d-4cd2-896f-9ce67f3e0240/devcon.exe<br />
2. 解压到一个目录，启动命令行模式，切换到该目录的i386目录。<br />
3. 运行devcon -r install %windir%\inf\machine.inf root\rdpdr命令重新安装Terminal services重定向器。<br />
4. 然后重启系统，测试是否修复错误。</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/141104#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 16 Nov 2007 10:33:00 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/141104</link>
        <guid>http://kanghao126.javaeye.com/blog/141104</guid>
      </item>
      <item>
        <title>Md5加密</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/137065" style="color:red;">http://kanghao126.javaeye.com/blog/137065</a>&nbsp;
          发表时间: 2007年10月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title" align="left">
<div class="code_title"></div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/137065#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 31 Oct 2007 17:18:13 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/137065</link>
        <guid>http://kanghao126.javaeye.com/blog/137065</guid>
      </item>
      <item>
        <title>分页处理类</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/137064" style="color:red;">http://kanghao126.javaeye.com/blog/137064</a>&nbsp;
          发表时间: 2007年10月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.dz.tools; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.sql.Connection; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.sql.ResultSet; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.sql.SQLException; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.sql.Statement; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.ArrayList; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;用于WEB的分页类(基于ORACLE).&nbsp;注意:当字段中有&quot;,&quot;号时,请用&quot;#&quot;号代替&nbsp;例如:_columnList&nbsp;= </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&quot;id,to_char('2007-08-05','yyyy-mm-dd')&quot;中 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;to_char('2007-08-05','yyyy-mm-dd')中的&quot;,&quot;号改为&quot;#&quot;,应写为:&nbsp;_columnList&nbsp;= </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&quot;id,to_char('2007-08-05'#'yyyy-mm-dd')&quot;&nbsp;&lt;br&gt; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&lt;br&gt; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;dz </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;版本号&nbsp;1.00 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Page&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;ArrayList&nbsp;list&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList();</span><span class="comment">//&nbsp;返回数据集. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;tCount&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;总记录数. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;tPages&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;总页数. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;cPage&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;当前页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;cMinPage&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;当前最小页,用于&lt;&lt;. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;cMaxPage&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;当前最大页,用于&gt;&gt;. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;offset&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;本页最小记录号. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;below&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;本页最大记录号. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;first&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;第一页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;prev&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;上一页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;next&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;下一页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;last&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;最后一页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;specify&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;指定显示页. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;ArrayList&nbsp;pageList&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList();</span><span class="comment">//&nbsp;页列表 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageListCount&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;所列页总页 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;maxLine&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span><span class="comment">//&nbsp;每页最大显示数. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;dataSourceName&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;数据源名. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;tableName&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;表名. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;columnList&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;字段列表. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;findCondition&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;查询条件. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;pageQuery&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>;</span><span class="comment">//&nbsp;页面参数. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;该类的构造函数，无参数. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Page()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置数据源名. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;dataSourceName </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库名 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setDataSourceName(String&nbsp;dataSourceName)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.dataSourceName&nbsp;=&nbsp;dataSourceName; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置表名. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;tableName </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表名 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setTableName(String&nbsp;tableName)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.tableName&nbsp;=&nbsp;tableName; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置字段列表. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;columnList </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段列表 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setColumnList(String&nbsp;columnList)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.columnList&nbsp;=&nbsp;columnList; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置字段列表. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;columnList[] </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段列表 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setColumnList(String[]&nbsp;columnList)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;columnList.length;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(i&nbsp;==&nbsp;columnList.length&nbsp;-&nbsp;</span><span class="number">1</span><span>) &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><span class="keyword">this</span><span>.columnList&nbsp;+=&nbsp;columnList[i]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&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><span class="keyword">this</span><span>.columnList&nbsp;+=&nbsp;columnList[i]&nbsp;+&nbsp;</span><span class="string">&quot;,&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置查询条件 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;findCondition </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查询条件 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setFindCondition(String&nbsp;findCondition)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.findCondition&nbsp;=&nbsp;findCondition; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置页面传递参数，如有多个参数要传递，可多次调用. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;key </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数名 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;value </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数值 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPageQuery(String&nbsp;key,&nbsp;String&nbsp;value)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageQuery&nbsp;+=&nbsp;key&nbsp;+&nbsp;</span><span class="string">&quot;=&quot;</span><span>&nbsp;+&nbsp;value&nbsp;+&nbsp;</span><span class="string">&quot;&amp;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取页面参数. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;页面参数 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPageQuery()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageQuery; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;设置每页最大显示数 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;maxLine </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每页最大显示数 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setMaxLine(</span><span class="keyword">int</span><span>&nbsp;maxLine)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.maxLine&nbsp;=&nbsp;maxLine; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取总页数. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;总页数 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTPages()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;tPages; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取当前页. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;当前页 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getCPage()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cPage; &nbsp;&nbsp;</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><span class="keyword">public</span><span>&nbsp;String&nbsp;getcPage()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cPage&nbsp;+&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取第一页. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;第一页 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getFirst()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;first; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取上一页. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;上一页 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPrev()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;prev; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取下一页. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;下一页 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getNext()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;next; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取最后一页. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;最后一页 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getLast()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;last; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取总记录数. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;总记录数 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTCount()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;tCount; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setSpecify(</span><span class="keyword">int</span><span>&nbsp;specify)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.specify&nbsp;=&nbsp;specify; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getSpecify()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;specify; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;生成页列表.&nbsp;changeCatalog()之后调用 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;current </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;csum </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPageList()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;start&nbsp;=&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(cPage&nbsp;&gt;&nbsp;pageListCount) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(cPage&nbsp;%&nbsp;pageListCount&nbsp;==&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;pageListCount &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;&nbsp;&nbsp;&nbsp;*&nbsp;((</span><span class="keyword">int</span><span>)&nbsp;Math.ceil(cPage&nbsp;/&nbsp;pageListCount)&nbsp;-&nbsp;</span><span class="number">1</span><span>)&nbsp;+&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;pageListCount&nbsp;*&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;Math.ceil(cPage&nbsp;/&nbsp;pageListCount) &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;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cMinPage&nbsp;=&nbsp;start&nbsp;-&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;end&nbsp;=&nbsp;start&nbsp;+&nbsp;pageListCount; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cMaxPage&nbsp;=&nbsp;end; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(end&nbsp;&gt;&nbsp;tPages)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;=&nbsp;tPages; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cMaxPage&nbsp;=&nbsp;</span><span class="number">0</span><span>; &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;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;pageListCount;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(start&nbsp;&lt;=&nbsp;tPages)&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;pageList.add(</span><span class="keyword">new</span><span>&nbsp;Integer(start)); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start++; &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;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;ArrayList&nbsp;getPageList()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageList; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPageListCount(</span><span class="keyword">int</span><span>&nbsp;pageListCount)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageListCount&nbsp;=&nbsp;pageListCount; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getCMaxPage()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cMaxPage; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getCMinPage()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;cMinPage; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取记录集. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;记录集 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;ArrayList&nbsp;getList()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;list; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;生成本页参数.&nbsp;在query()中获取总记录数后，执行SQL之前调用. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;changeCatalog()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;总页数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tPages&nbsp;=&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;Math.ceil((</span><span class="keyword">double</span><span>)&nbsp;tCount&nbsp;/&nbsp;maxLine); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;当前页 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(specify&nbsp;==&nbsp;</span><span class="number">0</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specify&nbsp;=&nbsp;</span><span class="number">1</span><span>; &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><span class="keyword">if</span><span>&nbsp;(specify&nbsp;&gt;&nbsp;tPages)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specify&nbsp;=&nbsp;tPages; &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;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;本页最小记录号 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;=&nbsp;(specify&nbsp;-&nbsp;</span><span class="number">1</span><span>)&nbsp;*&nbsp;maxLine&nbsp;+&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;本页最大记录号 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;below&nbsp;=&nbsp;specify&nbsp;*&nbsp;maxLine; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;当前页 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cPage&nbsp;=&nbsp;specify; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;首页参数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(specify&nbsp;&gt;&nbsp;</span><span class="number">1</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;=&nbsp;</span><span class="string">&quot;?page=1&amp;&quot;</span><span>&nbsp;+&nbsp;pageQuery; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;上页参数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(specify&nbsp;&gt;&nbsp;</span><span class="number">1</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prev&nbsp;=&nbsp;</span><span class="string">&quot;?page=&quot;</span><span>&nbsp;+&nbsp;(specify&nbsp;-&nbsp;</span><span class="number">1</span><span>)&nbsp;+&nbsp;</span><span class="string">&quot;&amp;&quot;</span><span>&nbsp;+&nbsp;pageQuery; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prev&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;下页参数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(specify&nbsp;&lt;&nbsp;tPages) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;=&nbsp;</span><span class="string">&quot;?page=&quot;</span><span>&nbsp;+&nbsp;(specify&nbsp;+&nbsp;</span><span class="number">1</span><span>)&nbsp;+&nbsp;</span><span class="string">&quot;&amp;&quot;</span><span>&nbsp;+&nbsp;pageQuery; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;未页参数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(specify&nbsp;&lt;&nbsp;tPages) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;</span><span class="string">&quot;?page=&quot;</span><span>&nbsp;+&nbsp;tPages&nbsp;+&nbsp;</span><span class="string">&quot;&amp;&quot;</span><span>&nbsp;+&nbsp;pageQuery; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</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><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;主操作类(使用page).&nbsp;请在setXXX()之后，getXXX()方法之前调用 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;SQLException </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;query()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;SQLException&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;取数据库连接 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;Database.getConnection(dataSourceName); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(conn&nbsp;==&nbsp;</span><span class="keyword">null</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;SQLException(</span><span class="string">&quot;获取数据库连接错误&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;</span><span class="string">&quot;SELECT&nbsp;count(*)&nbsp;FROM&nbsp;&quot;</span><span>&nbsp;+&nbsp;tableName&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;&quot;</span><span>&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;+&nbsp;findCondition; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt&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;stmt.executeQuery(sql); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(rs.next()) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tCount&nbsp;=&nbsp;rs.getInt(</span><span class="number">1</span><span>);</span><span class="comment">//&nbsp;总记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeCatalog(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//System.out.println(tCount); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPageList(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;设置查询语句 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;</span><span class="string">&quot;SELECT&nbsp;&quot;</span><span>&nbsp;+&nbsp;columnList.replaceAll(</span><span class="string">&quot;#&quot;</span><span>,&nbsp;</span><span class="string">&quot;,&quot;</span><span>)&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;FROM&nbsp;&quot;</span><span>&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;+&nbsp;tableName&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;&quot;</span><span>&nbsp;+&nbsp;findCondition; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;</span><span class="string">&quot;SELECT&nbsp;rownum&nbsp;r1,t.*&nbsp;FROM&nbsp;(&quot;</span><span>&nbsp;+&nbsp;sql&nbsp;+&nbsp;</span><span class="string">&quot;)&nbsp;t&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;</span><span class="string">&quot;SELECT&nbsp;r.*&nbsp;FROM&nbsp;(&quot;</span><span>&nbsp;+&nbsp;sql&nbsp;+&nbsp;</span><span class="string">&quot;)&nbsp;r&nbsp;WHERE&nbsp;r1&nbsp;BETWEEN&nbsp;&quot;</span><span>&nbsp;+&nbsp;offset &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><span class="string">&quot;&nbsp;AND&nbsp;&quot;</span><span>&nbsp;+&nbsp;below; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;System.out.println(specify); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//System.out.println(sql); </span><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;&nbsp;&nbsp;</span><span class="comment">//&nbsp;取记录 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;_row&nbsp;=&nbsp;columnList.split(</span><span class="string">&quot;,&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;_rownum&nbsp;=&nbsp;_row.length; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery(sql); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(rs.next())&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;String[]&nbsp;_temp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String[_rownum]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;_rownum;&nbsp;i++)&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;_temp[i]&nbsp;=&nbsp;rs.getString(i&nbsp;+&nbsp;</span><span class="number">2</span><span>); &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><span class="comment">//&nbsp;System.out.println(_temp[i]); </span><span>&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;list.add(_temp); &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><span class="keyword">finally</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(rs&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&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;</span><span class="keyword">if</span><span>&nbsp;(stmt&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.close(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(conn&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>) &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;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/137064#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 31 Oct 2007 17:15:07 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/137064</link>
        <guid>http://kanghao126.javaeye.com/blog/137064</guid>
      </item>
      <item>
        <title>有多少人看了《奋斗》？</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/136667" style="color:red;">http://kanghao126.javaeye.com/blog/136667</a>&nbsp;
          发表时间: 2007年10月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">最近继《士兵突击》后有发现的一部不错的电视剧《奋斗》，正在看ing</font></p>
<p><font size="3">给我感觉这部戏是中国式《六人行》，80后的《血色浪漫》。</font></p>
<p><font size="3">台词很经典的所。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<strong>1.</strong> 跟你在一起就是好日子。---夏琳 </p>
<p>　　<strong>2.</strong> 如果我一辈子穷困，你还会爱我吗？ -----陆涛 </p>
<p>　　如果你一辈子努力，即使穷困我也还爱你。----夏琳 </p>
<p>　　<strong>3.</strong> 我只知道我在被你骗得团团转的时候心里是最满足的。---米莱 </p>
<p>　　<strong>4.</strong> 一个人呢一生中他可能做过很多好事他都会忘记，但等他到老的时候他真正记起来的是他做过的坏事。 --------徐志森 </p>
<p>　　<strong>5.</strong> 坏事就是你怎么忘也忘不了的事。------徐志森 </p>
<p>　　<strong>6.</strong> 每个人都只能年轻一次，这是人生最邪恶的地方。 -----忘了谁说的 </p>
<p>　　<strong>7.</strong> 无论什么时候，当你听到一件事情对自己太有利了，那你就绝对不要相信。----忘了是米莱他爸还是徐志森了 </p>
<p>　　<strong>8.</strong> 有的时候人会摔一跤，趁这个机会应该回头看一看，看看自己曾经走过的路，用不着匆匆忙忙往前走，也许你想明白了以后你就会发现，前面的东西根本就不重要，该有的我们都有了。 --------米莱他爸 </p>
<p>　　<strong>9.</strong> 你喜欢他，他不当回事儿，这就是欺负你。 --------米莱 </p>
<p>　　<strong>10.</strong> 陆涛在大家给他庆祝生日的聚会上： </p>
<p>　　上学的时候老师教育我们说，我们来到这个世界上，也不是为了拿走什么，而是要努力为这个世界增添光彩。那时候我同意，现在我也同意。可是怎样才能做到呢？我相信这一点他们也不清楚，就是清楚他们也不一定能做到，他们告诉我们的只是他们的梦想。好吧，我们听他们的。把他们的梦想当成我们的，我们向他们一样，为了梦想去奋斗，可是梦想是艰难的。因为那梦想就是我们所有人的人生，就是我们的爱情、我们的事业、我们的幸福。 </p>
<p>　　可是，当我们把那抽象的梦想变成一件件具体的事情的时候，我发觉我们离那梦想很遥远，特别遥远。但是我们不会放弃！我们会努力做好每一件事！ </p>
<p>　　在这个世界上，我们会碰到很多好事儿，也会碰到很多坏事而，今天以前，他们都过去了。明天，他们还会跟我们迎头相撞。我们的态度是，我们谁也不怵坏事儿！ </p>
<p>　　<strong>11.</strong> 向南：</p>
<p>&nbsp;&nbsp;&nbsp; 杨晓芸，你知道夏琳可爱，所有人都喜欢她，所以你什么都愿意跟她攀比，什么都学她。可你不知道是夏琳可爱，不是你杨晓芸可爱，因为你没学到夏琳身上最重要的东西&mdash;&mdash;真诚。夏琳始终在为陆涛付出，直到自己没什么可以付出的时候，她才离开陆涛。 </p>
<p>　　而你呢？你一直在我面前表演你多可爱。是，我承认，我承认哦被你的可爱弄得团团转，你叫我一直在付出，我离开你，你很不开心，因为你还没有找到一个更好的观众去欣赏你的可爱。夏琳离开陆涛是因为她对自己不满意，然而你杨晓芸对自己很满意，对我不满意，你这样弄得哦自己对自己也很不满意，我对生活失去了信心，对自己失去了信心，我时常感到屈辱和沮丧，尤其是这两年。 </p>
<p>　　我跟你呆在一起越来越不开心，越来越不快乐。离开你我很失落，但我为你做的一切都做完了，我承认，我做的不够好，可是我尽力了。我跟你离婚以后，我对你也就没有责任了，我现在特别想为自己多想一点，我运气好，遇到了真爱我的人，我有了新生活。我喜欢这种新的生活，你以后不用在我的面前表演可爱了，没用了。杨晓芸，这些话我早就想对你说了，不过我还有一句更重要的话对你说， 杨晓芸，我必须离开你，我已经不爱你了。再见。 </p>
<p>　　<strong>12.</strong> 陆涛在高强的丧礼上感慨发言： </p>
<p>　　&ldquo;我现在脑子有点乱。以前从没想过自己的一生有何价值，要如何度过。只是追时髦、玩酷，以为是有性格。但是谁也没有你酷，你说死就死了&hellip;&hellip;谁也没有你有性格，谁也没有你酷。你的死突然提醒我，生命原来是这样的脆弱，死亡和我们如此的接近。我要回去好好想想，什么是生命中最重要的。我要想，如何度过我的一生。我还要想，我要成为什么样的一个人。以前，我觉得自己知道这些问题的答案，但高强你一死，我觉得原来的一切全都失去了意义&hellip;&hellip;&rdquo; </p>
<p>　　<strong>13.</strong>陆涛想明白了，来夏琳家里找她， 夏琳说： </p>
<p>　　在我们俩的关系里我要告诉你的是：我所做的一切，都是我心甘情愿的，我从来没有强迫自己去做过什么，因为我爱你，这是我的意愿，也是我的快乐。你总是能带回一些与你有关的新鲜事，叫我也手心痒痒，特别想试一试。我从心底里羡慕你的机会，嫉妒你的徐志森，恨你的设计图，而我只能自己去创造机会。我的机会不在你身上，而在我自己手上。你叫我明白了，别人再大的事儿也是别人的，自己再小的事儿也是自己的。请不要难过，陆涛，我必须把你当作别人之后我才会长大。我现在对自己不满意，我必须像你一样去努力，去奋斗过之后，我才会长大，我才会对自己满意，希望你能理解我，陆涛。 </p>
<p>　　<strong>14.</strong> 猪头说：事业，爱情，友情我都要。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、向南：&ldquo;我们家有院子你们家有吗？&rdquo;（老北京老 同里的四合院）</p>
<p>　　华子：&ldquo;我们家有私人专职理发师，洗头护发师，你们家有吗&rdquo;(刚买下一间二手发廊) </p>
<p>　　向南：&ldquo;我们家有结婚没喝完的好几十箱私酒存在丈母娘家，你们家有吗&quot;&rdquo;</p>
<p>　　华子：&ldquo;我们家有老式越野车，我们没事儿开出去兜风，这么浪漫你们家成吗&rdquo;(600块钱都捣不出的N手北京吉普) </p>
<p>　　向南：&ldquo;我们家有彩电冰箱洗衣机，那叫一方便你们家有吗&rdquo;(四合院公用) </p>
<p>　　华子：&ldquo;我们家有私企，我们不用出门上班，我们就跟家SOHO，哎哟喂这么后现代的生活你们家什么年月能赶上。&rdquo; </p>
<p>　　向南：&ldquo;我们家有成套没开封的现代厨房用品，用都没用就堆在床底下，小俩口天天跟外面下馆子吃饭，吃香的喝辣的大鱼大肉花钱如流水，你们家敢这么奢吗？&rdquo; </p>
<p>　　晓云：&ldquo;我真服了他们了，真是名牌大学的大学生啊，破锅破碗的还比呢比什么比呀，快气死我了，向南我跟了你真的是倒了八辈子血霉，赶紧奋斗啊，咸鱼翻了身再吹。&rdquo;</p>
<p>　　向南：&ldquo;杨晓云你行不行，就你长那咸鱼样儿，还跟我提咸鱼，人咸鱼要腌半年早死菜了，能翻身吗，你翻给我看你翻翻你翻。&rdquo;</p>
<p>　　<strong>2、</strong>杨晓芸：&ldquo;我们俩在一起完全就是一本书，书名叫《钢铁是怎样被腐蚀的》。&rdquo; </p>
<p>　　<strong>3、</strong>夏琳：&ldquo;我只能自己去创造机会，我的机会不在你身上，而在我自己手上。你叫我明白了，别人再大的事儿也是别人的，自己再小的事儿也是自己的。请不要难过陆涛，我必须把你当作别人之后我才能长大，我现在对自己不满意，我必须像你一样去努力去奋斗之后我才会努力我才会对自己满意。&rdquo;</p>
<p>　　陆涛：&ldquo;我一搞建筑的都不出国，你一做衣服的出去干什么呀！&rdquo;</p>
<p>　　<strong>4、</strong>夏琳：&ldquo;吃橘子吗？吃，我把皮剥了不吃我把你的皮剥了&rdquo; </p>
<p>　　如果你还在这个世界上存在着，那么这个世界无论怎么样，对我都是有意义的;但是如果你不在了，无论这个世界多美好，他在我眼里也只是一片荒漠，而我就像一个孤魂野鬼。 </p>
<p>　　<strong>5、</strong>晓芸：你是谁？ </p>
<p>　　向南：我是你的丈夫向南，我就是你的钱包，我就是你的生活舒适的工具，为了你的幸福，我时刻准备着！为杨晓芸服务！</p>
<p>　<strong>　6、</strong>陆涛：喝点什么？</p>
<p>　　米莱：我喝可乐。 </p>
<p>　　陆涛：冰箱里有过期的，你喝不喝呀？ </p>
<p>　　米莱：喝。作为你过期的女友我也就配喝过期的可乐。 </p>
<p>　　<strong>7、</strong>向南：你给我们倒壶茶来。 </p>
<p>　　服务员：先生，我们这的茶是论杯卖的？</p>
<p>　　向南：那就来三杯。 </p>
<p>　　服务员：先生，请问要什么茶？</p>
<p>　　向南：随便什么茶。 </p>
<p>　　服务员：我们这有菊花、龙井、乌龙、红茶。 </p>
<p>　　向南：红茶。 </p>
<p>　　服务员：先生，我们这的红茶是一个人一壶。 </p>
<p>　　向南：你刚才不是不论壶卖吗？</p>
<p>　　服务员：先生，我是说我们这的红茶是装在壶里卖的。 </p>
<p>　　向南：那你就泡一壶得了。 </p>
<p>　　服务员：请问都要红茶吗。 </p>
<p>　　向南：对。 </p>
<p>　　服务员：那先生您就是要三壶了。 </p>
<p>　　向南：等会，你把我弄的有点乱，怎么又变成三壶。 </p>
<p>　　服务员：先生，我们这的红茶不可以三个人一壶的。 </p>
<p>　　向：那你就给我来三杯冰水。 </p>
<p>　　服务员：先生对不起，我们的冰箱暂时坏了，没有冰水。 </p>
<p>　　向南：我要三杯龙井一人一杯。 </p>
<p>　　向南：这哪来消遣，完全是添堵。 </p>
<p>　　<strong>8、</strong>你不吹牛，你会死呀你~~(向南) </p>
<p>　　<strong>9、</strong>米莱：&ldquo;我就等你我就等你你没结婚我等你结婚我还等你我现在等你我以后等你我永远等你我等你我等你我等死你。&quot; </p>
<p>　　<strong>10、</strong>赢了你嫁给我，输了我娶你。 </p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11、</strong>杨晓芸：想不花钱白作噩梦啊，找向南就行&hellip;&hellip;那帮人搞了一个破仓库，我看以前就是存鸡屎的，现在他们竹板闹革命搞起了LOFT，还起了一个特恶心的名字叫心碎乌托邦，据说住在里面的人个个都心碎&hellip;&hellip;反正他们表面上一个个心碎的一塌糊涂，实际上比谁过的都好，那个小资啊，小情调啊，落地窗啊，小台球啊，小蓝筐啊，小飞镖啊，小花园啊，还有狗呢，什么咖啡啊，一帮的人成天关在里面瞎得瑟，胡浪漫，一个个狼心狗肺的样子，该事业的事业，该胡闹的胡闹，一个个天天高兴的跟王八蛋似的，再取一个让人同情的名字来气咱们，你说他们多缺德啊！ </p>
<p>　　<strong>12、</strong><span class="yqlink"> 离婚</span>也能离的这么经典的 </p>
<p>　　杨晓芸：呸！我才不爱你呢！ </p>
<p>　　向南：你给我夜煮方便面还给我加俩鸡蛋那叫不爱我？我呸！ </p>
<p>　　杨晓芸：我煮狗鸡蛋！我呸！ </p>
<p>　　向南：给狗煮方便面你还加俩鸡蛋？我呸！ </p>
<p>　　杨晓芸：我煮狗鸡蛋！呸！ </p>
<p>　　向南：你就是对我好承认怎么了？</p>
<p>　　杨晓芸：呸！我才不承认呢！ </p>
<p>　　向南：我告诉你我就是你的初恋我就是你的最爱我就是离不了的婚！ </p>
<p>　　杨晓芸：你就是一无赖！ </p>
<p>　　向南：谢谢你提醒我还真就是一无赖我还就赖上你了我告诉你杨晓芸这婚你离不了因为我改注意了我不同意离婚你要是再跟我说离婚我就告诉你别跟我开玩笑了呸！ </p>
<p>　　杨晓芸：呸！离婚！马上离婚！不离我现在就踩死你！ </p>
<p>　　向南：呸！没门儿！</p>
<p>　　杨晓芸：呸！ </p>
<p>　　向南：呸！玩儿去！你给我玩儿去！你给我玩勺子把儿去！</p>
<p>　　杨晓芸：你&hellip;&hellip; </p>
<p>　　向南：呸！</p>
<p>　　工作人员：哎哎，先生这儿不能吸烟。 </p>
<p>　　杨晓芸：谁让你抽烟了？ </p>
<p>　　向南：管得着吗？出门 </p>
<p>　　向南：看什么呀？看什么呀！都给我玩儿去！又不是拍电视剧干吗呢一个个！ </p>
<p>　　群众：怎么说话呢这是！</p>
<p>　　向南：什么怎么说话。 </p>
<p>　　杨晓芸：凭什么不让人家看呀懂不懂尊重别人啊我告诉你这都是我的FANS。 </p>
<p>　　向南：我呸！</p>
<p>　　杨晓芸：呸什么呀你就是我的超级大FANS。 </p>
<p>　　向南：呸！ </p>
<p>　　杨晓芸：向南 我问你我到底哪儿好啊 让你成天欲罢不能地使劲欣赏我？</p>
<p>　　向南：我怎么那么爱你呀呸！</p>
<p>　　杨晓芸：都散了吧没事儿了 下一对儿啊！ </p>
<p>　　杨晓芸：说你傻吧，你还非得给你这称号配一行头！ </p>
<p>　　向南：三十年后全变大妈。&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;、 陆涛：&ldquo;我告诉你夏琳，从今以后你就是我的老婆了，想找死就找别的男人说话看看！&rdquo; </p>
<p>　　夏琳：&ldquo;我告诉你陆涛，从今以后你就是我的钱包了，想找死就找别的女人花钱试试！&rdquo;</p>
<p>　　陆妈妈：&ldquo;儿子，你亲生父亲要从美国回来了&hellip;&hellip;他在美国赚了很多钱&hellip;&hellip;他想见见你&hellip;&hellip;&rdquo;</p>
<p>　　陆涛：&ldquo;见面就算了，让他把遗产打我卡里吧~&rdquo;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/136667#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 30 Oct 2007 11:09:11 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/136667</link>
        <guid>http://kanghao126.javaeye.com/blog/136667</guid>
      </item>
      <item>
        <title>[转]JAVA Calendar详解</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/136464" style="color:red;">http://kanghao126.javaeye.com/blog/136464</a>&nbsp;
          发表时间: 2007年10月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>究竟什么是一个 Calendar 呢？中文的翻译就是日历，那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢？</p>
<p>比如有：<br />
月份的定义 - 阳`(公)历 一年12 个月，每个月的天数各不同；阴(农)历，每个月固定28天<br />
每周的第一天 - 阳(公)历星期日是第一天；阴(农)历，星期一是第一天</p>
<p>实际上，在历史上有着许多种纪元的方法。它们的差异实在太大了，比如说一个人的生日是&quot;八月八日&quot; 那么一种可能是阳(公)历的八月八日，但也可以是阴(农)历的日期。所以为了计时的统一，必需指定一个日历的选择。那现在最为普及和通用的日历就是 &quot;Gregorian Calendar&quot;。也就是我们在讲述年份时常用 &quot;公元几几年&quot;。Calendar 抽象类定义了足够的方法，让我们能够表述日历的规则。Java 本身提供了对 &quot;Gregorian Calendar&quot; 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 &quot;GreogrianCalendar&quot; 对象(与您通过 new GregorianCalendar() 获得的结果一致)。</p>
<p>下面的代码可以证明这一点：</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class WhatIsCalendar<br />
{<br />
public static void main(String[] args) {<br />
Calendar calendar = Calendar.getInstance();<br />
if (calendar instanceof GregorianCalendar)<br />
System.out.println(&quot;It is an instance of GregorianCalendar&quot;t;<br />
}<br />
}</p>
<p>Calendar 在 Java 中是一个抽象类(Abstract Class)，GregorianCalendar 是它的一个具体实现。</p>
<p>我们也可以自己的 Calendar 实现类，然后将它作为 Calendar 对象返回(面向对象的特性)。在 IBM alphaWorks 上，IBM 的开发人员实现了多种日历(<a href="http://www.alphaworks.ibm.com/tech/calendars">http://www.alphaworks.ibm.com/tech/calendars</a>)。同样在 Internet 上，也有对中国农历的实现。本文对如何扩展 Calendar 不作讨论，大家可以通过察看上述 Calendar 的源码来学习。</p>
<p>Calendar 与 Date 的转换非常简单：</p>
<p>Calendar calendar = Calendar.getInstance();<br />
// 从一个 Calendar 对象中获取 Date 对象<br />
Date date = calendar.getTime();<br />
// 将 Date 对象反应到一个 Calendar 对象中，<br />
// Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象<br />
// 所以我们必需先获得一个实例，然后设置 Date 对象<br />
calendar.setTime(date);</p>
<p>&nbsp;<br />
Calendar 对象在使用时，有一些值得注意的事项：</p>
<p>1. Calendar 的 set() 方法</p>
<p>set(int field, int value) - 是用来设置&quot;年/月/日/小时/分钟/秒/微秒&quot;等值</p>
<p>field 的定义在 Calendar 中</p>
<p>set(int year, int month, int day, int hour, int minute, int second) 但没有</p>
<p>set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。</p>
<p>另外，月份的起始值为０而不是１，所以要设置八月时，我们用７而不是8。</p>
<p>calendar.set(Calendar.MONTH, 7);</p>
<p>我们通常需要在程序逻辑中将它清为 0，否则可能会出现下面的情况：</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class WhatIsCalendarWrite<br />
{<br />
public static void main(String[] args) throws Exception{<br />
ObjectOutputStream out =<br />
new ObjectOutputStream(<br />
new FileOutputStream(&quot;calendar.out&quot;t);<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 1, 0, 0, 0);<br />
out.writeObject(cal1);<br />
Calendar cal2 = Calendar.getInstance();<br />
cal2.set(2000, 7, 1, 0, 0, 0);<br />
cal2.set(Calendar.MILLISECOND, 0);<br />
out.writeObject(cal2);<br />
out.close();<br />
}<br />
}</p>
<p>&nbsp;</p>
<p>我们将 Calendar 保存到文件中</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class WhatIsCalendarRead<br />
{<br />
public static void main(String[] args) throws Exception{<br />
ObjectInputStream in =<br />
new ObjectInputStream(<br />
new FileInputStream(&quot;calendar.out&quot;t);<br />
Calendar cal2 = (Calendar)in.readObject();<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 1, 0, 0, 0);<br />
if (cal1.equals(cal2))<br />
System.out.println(&quot;Equals&quot;t;<br />
else<br />
System.out.println(&quot;NotEqual&quot;t;<br />
System.out.println(&quot;Old calendar &quot;+cal2.getTime().getTime());<br />
System.out.println(&quot;New calendar &quot;+cal1.getTime().getTime());<br />
cal1.set(Calendar.MILLISECOND, 0);<br />
cal2 = (Calendar)in.readObject();<br />
if (cal1.equals(cal2))<br />
System.out.println(&quot;Equals&quot;t;<br />
else<br />
System.out.println(&quot;NotEqual&quot;t;<br />
System.out.println(&quot;Processed Old calendar &quot;+cal2.getTime().getTime());<br />
System.out.println(&quot;Processed New calendar &quot;+cal1.getTime().getTime());<br />
}<br />
}</p>
<p>然后再另外一个程序中取回来（模拟对数据库的存储），但是执行的结果是：</p>
<p>NotEqual<br />
Old calendar 965113200422 &lt;------------ 最后三位的MilliSecond与当前时间有关<br />
New calendar 965113200059 &lt;-----------/<br />
Equals<br />
Processed Old calendar 965113200000<br />
Processed New calendar 965113200000</p>
<p>&nbsp;<br />
另外我们要注意的一点是，Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题：</p>
<p>Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31<br />
cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31，也就是 2000-10-1<br />
cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1，那么现在的结果就该是 2000-10-30<br />
System.out.println(cal1.getTime()); //输出的是2000-9-30，说明 Calendar 不是马上就刷新其内部的记录</p>
<p>在 Calendar 的方法中，get() 和 add() 会让 Calendar 立刻刷新。Set() 的这个特性会给我们的开发带来一些意想不到的结果。我们后面会看到这个问题。</p>
<p>2. Calendar 对象的容错性，Lenient 设置<br />
我们知道特定的月份有不同的日期，当一个用户给出错误的日期时，Calendar 如何处理的呢？</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class WhatIsCalendar<br />
{<br />
public static void main(String[] args) throws Exception{<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 1, 32, 0, 0, 0);<br />
System.out.println(cal1.getTime());<br />
cal1.setLenient(false);<br />
cal1.set(2000, 1, 32, 0, 0, 0);<br />
System.out.println(cal1.getTime());<br />
}<br />
}</p>
<p>它的执行结果是：</p>
<p>Tue Feb 01 00:00:00 PST 2000<br />
Exception in thread &quot;main&quot; java.lang.IllegalArgumentException<br />
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)<br />
at java.util.Calendar.updateTime(Calendar.java:1508)<br />
at java.util.Calendar.getTimeInMillis(Calendar.java:890)<br />
at java.util.Calendar.getTime(Calendar.java:871)<br />
at WhatIsCalendar.main(WhatIsCalendar.java:12)<br />
当我们设置该 Calendar 为 Lenient false 时，它会依据特定的月份检查出错误的赋值。</p>
<p>3. 不稳定的 Calendar</p>
<p>我们知道 Calendar 是可以被 serialize 的，但是我们要注意下面的问题</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class UnstableCalendar implements Serializable<br />
{</p>
<p>public static void main(String[] args) throws Exception{<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 1, 0, 0 , 0);<br />
cal1.set(Calendar.MILLISECOND, 0);<br />
ObjectOutputStream out =<br />
new ObjectOutputStream(<br />
new FileOutputStream(&quot;newCalendar.out&quot;t);<br />
out.writeObject(cal1);<br />
out.close();<br />
ObjectInputStream in =<br />
new ObjectInputStream(<br />
new FileInputStream(&quot;newCalendar.out&quot;t);<br />
Calendar cal2 = (Calendar)in.readObject();<br />
cal2.set(Calendar.MILLISECOND, 0);<br />
System.out.println(cal2.getTime());<br />
}<br />
}</p>
<p>运行的结果竟然是: Thu Jan 01 00:00:00 PST 1970</p>
<p>它被复原到 EPOC 的起始点，我们称该 Calendar 是处于不稳定状态。这个问题的根本原因是 Java 在 serialize GregorianCalendar 时没有保存所有的信息，所以当它被恢复到内存中，又缺少足够的信息时，Calendar 会被恢复到 EPOCH 的起始值。Calendar 对象由两部分构成：字段和相对于 EPOC 的微秒时间差。字段信息是由微秒时间差计算出的，而 set() 方法不会强制 Calendar 重新计算字段。这样字段值就不对了。</p>
<p>下面的代码可以解决这个问题：</p>
<p>import java.io.*;<br />
import java.util.*;</p>
<p>public class StableCalendar implements Serializable<br />
{</p>
<p>public static void main(String[] args) throws Exception{<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 1, 0, 0 , 0);<br />
cal1.set(Calendar.MILLISECOND, 0);<br />
ObjectOutputStream out =<br />
new ObjectOutputStream(<br />
new FileOutputStream(&quot;newCalendar.out&quot;t);<br />
out.writeObject(cal1);<br />
out.close();<br />
ObjectInputStream in =<br />
new ObjectInputStream(<br />
new FileInputStream(&quot;newCalendar.out&quot;t);<br />
Calendar cal2 = (Calendar)in.readObject();<br />
cal2.get(Calendar.MILLISECOND); //先调用 get()，强制 Calendar 刷新<br />
cal2.set(Calendar.MILLISECOND, 0);//再设值<br />
System.out.println(cal2.getTime());<br />
}<br />
}</p>
<p>运行的结果是: Tue Aug 01 00:00:00 PDT 2000</p>
<p>这个问题主要会影响到在 EJB 编程中，参数对象中包含 Calendar 时。经过 Serialize/Deserialize 后，直接操作 Calendar 会产生不稳定的情况。</p>
<p>4. add() 与 roll() 的区别</p>
<p>add() 的功能非常强大，add 可以对 Calendar 的字段进行计算。如果需要减去值，那么使用负数值就可以了，如 add(field, -value)。</p>
<p>add() 有两条规则：</p>
<p>当被修改的字段超出它可以的范围时，那么比它大的字段会自动修正。如：<br />
Calendar cal1 = Calendar.getInstance();<br />
cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31<br />
cal1.add(Calendar.MONTH, 1); //2000-9-31 =&gt; 2000-10-1，对吗？<br />
System.out.println(cal1.getTime()); //结果是 2000-9-30</p>
<p>另一个规则是，如果比它小的字段是不可变的（由 Calendar 的实现类决定），那么该小字段会修正到变化最小的值。</p>
<p>以上面的例子，9-31 就会变成 9-30，因为变化最小。</p>
<p>Roll() 的规则只有一条：<br />
当被修改的字段超出它可以的范围时，那么比它大的字段不会被修正。如：</p>
<p>Calendar cal1 = Calendar.getInstance();<br />
cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日<br />
cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二<br />
cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日<br />
cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日<br />
WEEK_OF_MONTH 比 MONTH 字段小，所以 roll 不能修正 MONTH 字段。</p>
<p>Date类介绍</p>
<p>Data和Calendar类：<br />
一、创建一个日期对象r</p>
<p>让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简<br />
单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.<br />
import java.util.Date;</p>
<p>public class DateExample1 {<br />
public static void main(String[] args) {<br />
// Get the system date/time<br />
Date date = new Date();</p>
<p>System.out.println(date.getTime());<br />
}<br />
}</p>
<p>在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上<br />
显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造<br />
函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部<br />
使用了System.currentTimeMillis() 方法来从系统获取日期.如果用</p>
<p>System.out.println(new Date());</p>
<p>则输出形式为：Tue Nov 08 14:28:07 CST 2005</p>
<p>那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如<br />
何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.<br />
SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.</p>
<p>二、日期数据的定制格式</p>
<p>假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展<br />
示了如何完成这个工作:</p>
<p>import java.text.SimpleDateFormat;<br />
import java.util.Date;</p>
<p>public class DateExample2 {</p>
<p>public static void main(String[] args) {</p>
<p>SimpleDateFormat bartDateFormat =<br />
new SimpleDateFormat(&quot;EEEE-MMMM-dd-yyyy&quot;);</p>
<p>Date date = new Date();</p>
<p>System.out.println(bartDateFormat.format(date));<br />
}<br />
}</p>
<p>只要通过向SimpleDateFormat 的构造函数传递格式字符串&quot;EEE-MMMM-dd-yyyy&quot;, <br />
我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符<br />
告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日<br />
, yyyy是年. 字符的个数决定了日期是如何格式化的.传递&quot;EE-MM-dd-yy&quot;会显示 <br />
Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.</p>
<p>三、将文本数据解析成日期对象r</p>
<p>假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个<br />
字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串<br />
&quot;MM-dd-yyyy&quot; 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不<br />
是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串<br />
&quot;9-29-2001&quot;并创建一个值为001736000000 的日期对象.</p>
<p>例子程序:</p>
<p>import java.text.SimpleDateFormat;<br />
import java.util.Date;</p>
<p>public class DateExample3 {</p>
<p>public static void main(String[] args) {<br />
// Create a date formatter that can parse dates of<br />
// the form MM-dd-yyyy.<br />
SimpleDateFormat bartDateFormat =<br />
new SimpleDateFormat(&quot;MM-dd-yyyy&quot;);</p>
<p>// Create a string containing a text date to be parsed.<br />
String dateStringToParse = &quot;9-29-2001&quot;;</p>
<p>try {<br />
// Parse the text version of the date.<br />
// We have to perform the parse method in a<br />
// try-catch construct in case dateStringToParse<br />
// does not contain a date in the format we are expecting.<br />
Date date = bartDateFormat.parse(dateStringToParse);</p>
<p>// Now send the parsed date as a long value<br />
// to the system output.<br />
System.out.println(date.getTime());<br />
}<br />
catch (Exception ex) {<br />
System.out.println(ex.getMessage());<br />
}<br />
}<br />
}</p>
<p>五、使用标准的日期格式化过程</p>
<p>既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的<br />
格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的<br />
方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格<br />
式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式.</p>
<p>import java.text.DateFormat;<br />
import java.util.Date;</p>
<p>public class DateExample4 {</p>
<p>public static void main(String[] args) {<br />
Date date = new Date();</p>
<p>DateFormat shortDateFormat =<br />
DateFormat.getDateTimeInstance(<br />
DateFormat.SHORT,<br />
DateFormat.SHORT);</p>
<p>DateFormat mediumDateFormat =<br />
DateFormat.getDateTimeInstance(<br />
DateFormat.MEDIUM,<br />
DateFormat.MEDIUM);</p>
<p>DateFormat longDateFormat =<br />
DateFormat.getDateTimeInstance(<br />
DateFormat.LONG,<br />
DateFormat.LONG);</p>
<p>DateFormat fullDateFormat =<br />
DateFormat.getDateTimeInstance(<br />
DateFormat.FULL,<br />
DateFormat.FULL);</p>
<p>System.out.println(shortDateFormat.format(date));<br />
System.out.println(mediumDateFormat.format(date));<br />
System.out.println(longDateFormat.format(date));<br />
System.out.println(fullDateFormat.format(date));<br />
}<br />
}</p>
<p>注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数<br />
是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑<br />
到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 <br />
FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web<br />
站点上的解释.</p>
<p>运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容:<br />
9/29/01 8:44 PM<br />
Sep 29, 2001 8:44:45 PM<br />
September 29, 2001 8:44:45 PM EDT<br />
Saturday, September 29, 2001 8:44:45 PM EDT&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/136464#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 29 Oct 2007 20:14:28 +0800</pubDate>
        <link>http://kanghao126.javaeye.com/blog/136464</link>
        <guid>http://kanghao126.javaeye.com/blog/136464</guid>
      </item>
      <item>
        <title>[转]开源框架带来的烦恼</title>
        <author>王牌海盗</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kanghao126.javaeye.com">王牌海盗</a>&nbsp;
          链接：<a href="http://kanghao126.javaeye.com/blog/136297" style="color:red;">http://kanghao126.javaeye.com/blog/136297</a>&nbsp;
          发表时间: 2007年10月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p tag="p"><strong><font size="2" tag="font">1、空前繁荣的开源世界</font><br />
</strong><strong><br />
</strong><font size="2">　　大致2000年以前，Java世界还是Sun一言九鼎，唯我独尊的时代。Sun发布的任何规范和标准都无一例外地被Java社区有意无意的追捧着，Java世界沉浸在一片歌功颂德，前拥后簇的氛围里。<strong><font style="BACKGROUND-COLOR: #ffffff">IBM，Bea，Oracle这些Java阵营的代表者也都为能最先最快实现Sun的各种规范而弹冠相庆。</font></strong></font></p>
<br />
<p tag="p">　　但这三四年来，Java的列车驶进了春秋战国百家争鸣，百花齐放的时代，Apache，JBoss，opensymphony，Eclipse，Codehaus等开源组织个个门庭若市，车水马龙。Java世界似乎天天在过年--张灯结彩，新桃换旧符。打开theserverside.com网站，每天映入眼帘是一条条各种开源项目发布、升级的新闻。虽然嘈杂了些，但却异彩纷呈，惊艳四座。在Java世界里，十室之内必有隐士，十步之内必有芳草，有才华的程序员太多了，抑或怀才的程序员被独裁式的统治压抑太久了，一旦找到了海德公园，庞涓、孙膑、苏秦、张仪式的高手纷纷走出隐居的鬼谷，在开源舞台上劲舞一支，高歌一曲，用一个个开源项目彰显着自己独特的魅力。</p>
<p>　　<strong>从客户端到数据库，从页面流程控制到业务流程控制，从全文搜索到地图搜索，从论坛到博客，在各种应用领域你都可以方便地找到多个相似的Java开源框架。</strong>开源框架的空前繁荣有力的促进了Java技术的交流和分享。一些面向开源的社区，论坛纷纷建立，国内比较著名的就有满江红开源论坛、中文Spring论坛、JavaScud开源平台、JavaEye社区等，宣讲、争论、协作、互动，无数激情和智慧碰撞出耀眼的火花。</p>
<p>　　随着开源项目的日益增多，国内甚至出现了象open-open.com Java开源大全的汇总整理网站，它如一个开源项目的大集市，将开源项目分类整理，提供简要的描述说明信息，方便使用者了解、查询和比较。</p>
<p tag="p">　　开源项目的繁荣还为技术图书业创造了机会，不管是国外的Amazon，还是china-pub或dearbook，开源框架或产品的技术图书，如Spring，Hibernate，Struts，Eclipse等等都成为荣登榜首的畅销先锋。</p>
<p tag="p">　　这场几乎来源于民间的开源飓风给开发者和CTO们的思路和决策带来了巨大的影响，<strong tag="strong">据Bea的调查，全球排名前2000家软件开发公司中有70%以上在使用一种或多种开源框架--多达28%的公司在开发环境中使用了一种以上的应用服务器。</strong></p>
<p>　　同时开源也给走传统路线的Java巨头们带来战略性的影响：Sun去年宣布将其旗舰产品--Solaris开源；去年IBM向第三方厂商开放了其高性能通用并行文件系统（GPFS）的源代码；Unisys也改变企业战略定位投入开源怀抱等等不胜枚举，它们纷纷将营利模式从原来的产品销售调整为支持与服务。</p>
<p><strong>2、开源框架带来的烦恼<br />
</strong><br />
　　虽然开源的框架、类库越来越丰富，可供选择的替代者越来越多，但Java程序员却感觉自己慢慢陷入到了技术的漩涡之中：因为他们发现只要一段时间不关注开源社区，就有潮水般陌生的技术框架、专业术语、英文缩略词挟裹着一团团亢奋的热浪将自己淹没，让他们觉得随时都有被Java世界抛弃的危险。<strong>许多年纪稍大的程序员甚至觉得职位转换，甩掉技术干管理已经时不我待。<br />
</strong><br />
　　<strong>选择的困惑</strong></p>
<p>　　雨后春笋般涌现的开源框架都声称自己是最好的，有过多次因盲从于技术鼓吹而失望伤心的经历后，现在的开发者都变得成熟理智了，他们不会轻易相信某个框架自身的承诺，不会轻易附和他人的宣传，这确实是件好事。为了作出理智的选择，他们往往要自己亲自摸索以做出评判。</p>
<p>　　有时，我们会发现向上司推荐一个框架已经变成一件困难的事情，因为上司会冒出各种各样的问题：如Webwork比Struts好在哪里？Hibernate和iBatis有什么区别？OpenWFE比之jBpm有什么优势等等。所以要确定一个框架时，往往需要将相似的框架都研究一遍，以便有充足的理由让上司相信我们的选择是最优的。</p>
<p>　　但是，要将同类的框架都做一次研究并比较优劣并非易事，<strong>如开源工作流引擎就有Willow，OpenWFE，jBpm，Werkflow，OSWorkflow等不下30余种的框架，</strong>炫耀的声音一个比一个响亮。每种框架都有自己的设计思路和实现方案，况且这种技术预研性的工作，又不可能在项目周期内占用太多的时间，而不深入预研又不可能客观地作出评判，所以往往是熬红的双眼依然带着迷茫的目光。</p>
<p tag="p">　　此外，用人单位为了减少新员工的培训时间，对求职者往往有明确的框架使用技能和经验的要求。求职者为了能找到一个好工作，不得不逼迫自己学习更多的框架，以便让自己拥有更多的求职机会。<br />
<br />
　　<strong>搭配的困难</strong></p>
<p tag="p">　　开源的繁荣虽然给各个领域都造就了许多优秀的框架，如Spring，Struts，Hibernate，Lucene、OSCache等等，<strong tag="strong">但却没有出现一个一站式，统管全局的整合开发框架。</strong>开发者在享用大餐之前，事先得充当大橱的角色，将这些盐，油、酱、菜按合理的方式调配好。<br />
虽然，我们一直强调整体大于单个的总和，但是如何将单个&quot;个体&quot;正确的组合成发挥更大效应的&quot;整体&quot;却并非易事。<strong>因为这些单独的框架都由不同的团队开发，框架与框架之间存在天然的阻抗，</strong>这种框架和框架之间的&quot;代沟&quot;需要额外配置和编码才能弥合。</p>
<p>　　每个框架都拥有自己的配置文件，框架的整合经常带来配置的灾难，如将Spring和Struts整合时，不仅Struts本身的配置文件一个不能少，在Spring中还需要每个Action提供配置信息，而且两者需要遵守一定的契约。</p>
<p>　　相互搭配的框架和框架之间经常会出现相似的或重复的功能，如何取舍，如何使用往往让开发者们为难。<strong>如Spring本身提供了AOP方法返回结果的缓存功能，而Hibernate本身也提供二级缓存，</strong>究竟两者都使用呢，还是择一而从？往往中间又会引出很多争论。</p>
<p tag="p">　　框架整合的问题已经日益突出，我们可以在各开源论坛或社区发现大量有关讨论的主题。<br />
　　目前也出现了一些试图解决的框架整合问题的开源项目，如国外的AppFuse，国内的SpringSide，为框架的整合提供了专业的指导。但是并没有很好的解决现实开发中的实际需要。这些整合框架为了增加通用性，网都撒得太大，导致整合框架本身象一个庞然大物，让人望而生畏，定制性和灵巧性上都存在不足，降低了它们的实用性，所以这些整合性的开源项目往往降格为指导性的实例。</p>
<p>　　<strong>升级的困扰</strong></p>
<p tag="p">　　活跃的框架每天都在升级改造，丰富功能。其次由于开源框架在一定程度上存在随意性，往往导致框架在实际使用后，发现大量隐含的Bug，所以有时对某个框架的升级变得不可避免。开源框架比之Sun正规的规范有着更加灵活的升级方式，高低版本不兼容的问题已经成为司空见惯的事情。<strong>如著名的Hibernate，其3.0版本和2.0版本的包名都发生了彻底的变化，刚发布的Acegi和低版本也存在很大的差异，无法兼容。</strong></p>
<p>　　一个整合性的框架由多个出自于不同团队的框架组成，整合框架在这些组合框架之上高位运行，底层框架的升级变化就造成了组合框架水涨船高的局面，整合框架脆弱的稳定性很容易被打破。</p>
<p>　　组合框架的升级还直接带来了开发团队学习的压力，为了熟悉框架新功能和改进，在开发工作之余，他们不得不努力压榨自己的业余时间不断地充电学习。总是某个框架新功能学习还未完成，另一个框架的新版本又在一阵欢呼声中闪亮登场，让开发人员发现自己所有的努力只是一场骑牛追马游戏。</p>
<p>　　<strong>3、开发者如何走出迷局</strong></p>
<p>　　框架的爆炸性增长和技术更替一日千里的速度，让刚刚从传统J2EE迷局中走出来的开发者重新堕入了新的困境之中。有许多切身体验的开发者在网上大倒苦水，甚至有许多声音在呐喊，希望重新回到JSP+JavaBean＋JDBC那个纯真的年代中去。</p>
<p>　　框架的作者们本想还软件开发一个清新美满的世界，不想个体性的良性企盼变成了一种整体性的混乱纷争。在纷繁复杂的开源世界如何走出迷局和困境，把握自己技术航船的方向，是每个开发者们冥思遐想的事情。</p>
<p>　　<strong>重点学习 触类旁通</strong></p>
<p>　　每个人的时间是有限的，对于周期紧，进度急，加班赶的开发者来说更加如此，使得开发者不可能 &quot;识遍天下字，读尽人间书&quot;逐个学习框架。选择好适合自己、适合项目的框架进行重点学习尤为重要。不但要掌握技术细节，更要理解框架的原理和思想，这样在接触相关框架时，我们才能触类旁通，慧眼识真。</p>
<p>　　如果你深入理解了Struts框架的MVC的原理和思想，在接触Tapestry，Spring MVC等框架时，你会发现两者只是形上的区别，而非质上的差异，即使因现实需要确实要转换框架时，也可以轻松平滑地过渡。</p>
<p>　　<strong>不求最好 但求适用</strong></p>
<p>　　开发人员往往都是完美主义者，吹毛求疵，带着浓重的偏执狂倾向。是的，偏执狂是优秀程序员的一个特点，时下《只有偏执狂才能生存》也正在大卖热卖，Rod Johnson，Gavin King，Oberg也都是偏执狂。</p>
<p tag="p">　　但在有进度工期压力的情况下，我们不得不向实现妥协。对于公司来说，利润永远都是第一位的，不管用不用框架或用什么框架，只要能如期保质保量完成用户的所有功能需求，就是最好的项目。客户永远看不到，也不关心你使用了哪个优秀的技术和框架。</p>
<p>　　所以，在实际的开发中，也许我们常常需要委曲内心的冲动，只要目前的框架能满足需求，我们没有必须象服装界一样赶追时髦，一切不求最好，但求适用。</p>
<p>　　如果Spring Template JDBC已经很好的满足了目前的需求，就没有必要一定要上Hibernate，如果自己开发的简要列表控件效果不错，就无须转换为ExtremeTable。新框架的学习需要代价，但这种代价的价值在实际发挥功效之前是不被肯定的。<strong>况且看似不合时宜的那些简单而古老的技术也可以做出强大的系统，如世界上最大的java项目--巴西全国医疗系统，就是构建在JSP＋JavaBean＋Servlet之上。</strong></p>
<p>　　<strong>注重积累 搭建平台</strong></p>
<p tag="p">　　我们常常发现一些软件公司自身没有任何积累，完全寄希望于这些整合框架解决所有的问题。开源框架解决的都是某个领域的通用性问题，每个公司由于其所处行业，服务用户的不同，要求公司拥有自己的解决方案，框架的通用性和公司的个性化需求是存在矛盾的。</p>
<p tag="p">　　软件公司应该加强自身的积累，在这些框架的基础上搭建好符合自身需求的快速开发平台，屏蔽掉底层框架的复杂功能和细枝末节，降低对开发人员的技能要求，以便新员工能够快速参与到项目中，而无需进行一个个开源框架的学习。</p>
<p>　　虽然这种积累和平台的建设会耗费额外的工作量，但首先它是一个循序渐进的过程，其次这种任务仅由两三个技术突出的技术人员承担，带来的好处是直接降低了其他开发人员使用难度和技术要求，在一定程序上避免了开源框架的所带来的不稳定性影响。</p>
<p>　　<strong>4、小结</strong></p>
<p>　　开源的繁荣带来了丰富的框架，有力的推动了业界的发展，同时我们也看到，这种繁荣所带来的惊喜背后紧跟着许多困惑的眼神，迷失在繁荣的混乱之中的开发者们希望走出困惑，走出迷局。</p>
<p>　　如何在嘈杂喧闹的开源世界把握方向寻求突破，不管是对于开发者还是软件公司的决策者都值得深深的思考。</p>
          <br/>
          <span style="color:red;">
            <a href="http://kanghao126.javaeye.com/blog/136297#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' tar