<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Shamrock</title>
    <description></description>
    <link>http://Shamrock.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>QQ去广告方法</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/212706" style="color:red;">http://Shamrock.javaeye.com/blog/212706</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: small;">首先显找到QQ的安装目录：比如我的QQ安装在C:\Program
Files\QQ\文件夹下，你就可得到C:\Program
Files\QQ\NewSkins\QQ2007（根据你正在使用的版本有关，不一定非得是QQ2006，2007BATE4也行）\IMSkin\
IMSkin.ini这个文件，如果没找到，就直接在<span class="t_tag" onclick="tagshow(event)">地址</span>
栏输入C:\Program Files\QQ\NewSkins\QQ2007\IMSkin\IMSkin.ini。如果安装在别的盘换一下前面的部分。 <br />
</span>
<span style="font-size: small;"><br />
</span>
<span style="font-size: small;">首先备份一下 <span style="color: #0000ff;">IMSKIN.INI<br />
</span>
<br />
然后用记事本打开，很乱吧？别急！用记事本得编辑： </span>
<span style="font-size: small;"><br />
</span>
<span style="font-size: small;"><br />
ctrl+F 查找键 <br />
<br />
1、查找功能先找rightSpace字符串，找到后发现把rightSpace=0改为 rightSpace=<span style="color: #0000ff;"><span style="color: #ff0000;">-</span>
242</span>
； (<span style="color: #0000ff;">注意</span>
<span style="color: #0000ff;">242前面有个</span>
 <span style="color: #ff0000;">- </span>
)<br />
2、在点击查找menuShowBand字符串把menuShowBand = 1，改为 menuShowBand = <span style="color: #ff0000;">0</span>
（<span style="color: #ff0000;">谨记空格绝对不能去掉</span>
）保存记事本后<span class="t_tag" onclick="tagshow(event)">重启</span>
QQ<span class="t_tag" onclick="tagshow(event)">软件</span>
就好了。</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/212706#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, 08 Jul 2008 13:31:08 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/212706</link>
        <guid>http://Shamrock.javaeye.com/blog/212706</guid>
      </item>
      <item>
        <title>Rails develpoment和production环境中@变量的区别</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/205574" style="color:red;">http://Shamrock.javaeye.com/blog/205574</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>定义一个model：</p>
<pre name="code" class="ruby">class Test&lt; ActiveRecord::Base
  def self.test
    @test ||= Time.now
    puts @test
  end
end</pre>
<p>&nbsp;当rails处于开发环境时，输出的时间会随着不同的请求而变化，而当rails处于生产环境的时候，每次的输出均相同，这就可能导致程序在开发时和正式上线运行时的效果不一样，需要特别注意。</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/205574#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, 18 Jun 2008 23:41:19 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/205574</link>
        <guid>http://Shamrock.javaeye.com/blog/205574</guid>
      </item>
      <item>
        <title>使用exerb将Ruby打包成可执行文件</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/199827" style="color:red;">http://Shamrock.javaeye.com/blog/199827</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>先执行mkexy main.rb，会自动生成一个main.exy的配置文件；</p>
<p>打开生成的配置文件，加入下面的代码：</p>
<p>resource:<br />
&nbsp; icon:<br />
&nbsp;&nbsp;&nbsp; - width : 16<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: 16<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color : 8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file&nbsp; : 19lou.ico<br />
&nbsp;&nbsp;&nbsp; - width : 32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: 32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color : 8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file&nbsp; : 19lou.ico<br />
&nbsp; version:<br />
&nbsp;&nbsp;&nbsp; file_version_number&nbsp;&nbsp; : 1.2.3.4<br />
&nbsp;&nbsp;&nbsp; product_version_number: 5.6.7.8<br />
&nbsp;&nbsp;&nbsp; comments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Comments Field<br />
&nbsp;&nbsp;&nbsp; company_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Company Name Field<br />
&nbsp;&nbsp;&nbsp; legal_copyright&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Legal Copyright Field<br />
&nbsp;&nbsp;&nbsp; legal_trademarks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Legal Trademarks Field<br />
&nbsp;&nbsp;&nbsp; file_version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : File Version Field<br />
&nbsp;&nbsp;&nbsp; product_version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Product Version Field<br />
&nbsp;&nbsp;&nbsp; product_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Product Name Field<br />
&nbsp;&nbsp;&nbsp; file_description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : File Description Field<br />
&nbsp;&nbsp;&nbsp; internal_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Internal Name Field<br />
&nbsp;&nbsp;&nbsp; original_filename&nbsp;&nbsp;&nbsp;&nbsp; : Original Filename Field<br />
&nbsp;&nbsp;&nbsp; private_build&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Private Build Field<br />
&nbsp;&nbsp;&nbsp; special_build&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Special Build Field</p>
<p>这些代码用来配置生成的exe文件的一些信息，如图标、版本等；</p>
<p>然后执行exerb main.exy，生成最终的可执行文件，该可执行文件比较大，可以使用UPX进行压缩，压缩率可以达到70%以上。</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/199827#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, 03 Jun 2008 18:17:38 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/199827</link>
        <guid>http://Shamrock.javaeye.com/blog/199827</guid>
      </item>
      <item>
        <title>解决Cygwin中的“died waiting for dll loading”错误</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/189411" style="color:red;">http://Shamrock.javaeye.com/blog/189411</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在Cygwin中开发Rails，有时候需要执行SH命令，而这些命令调用DLL时经常会遇到类似的错误提示：</p>
<p>&nbsp;[main] ruby 4208 C:\cygwin\bin\ruby.exe: *** fatal error - unable to remap C:\cygwin\bin\cygssl-0.9.8.dll to<br />
same address as parent(0&times;340000) != 0&times;4730000<br />
&nbsp;[main] ruby 1752 fork: child 4208 - died waiting for dll loading, errno 11</p>
<p>具体原因不大清楚，解决方法如下：</p>
<p>CMD到Cygwin的bin路径下，执行ash命令，或者直接run这个命令；</p>
<p>在ash提示符后面运行/bin/rebaseall，注意要输入完整，如果只输入rebaseall，会提示找不到这个命令，而且这个命令只能在ash下面执行，不能在Cygwin下面执行。</p>
<p>现在打开Cygwin，应该一切正常了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/189411#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>Sun, 04 May 2008 16:42:46 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/189411</link>
        <guid>http://Shamrock.javaeye.com/blog/189411</guid>
      </item>
      <item>
        <title>解决MySQL不允许从远程访问的方法 </title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/181294" style="color:red;">http://Shamrock.javaeye.com/blog/181294</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1。 改表法。可能是你的帐号不允许从远程登陆，只能在localhost。这个时候只要在localhost的那台电脑，登入mysql后，更改 "mysql" 数据库里的 "user" 表里的 "host" 项，从"localhost"改称"%"<br /><br /><pre name="code" class="sql">mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;</pre><br /><br /><br />2. 授权法。例如，你想myuser使用mypassword从任何主机连接到mysql服务器的话。<br /><br /><pre name="code" class="sql">GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
FLUSH   PRIVILEGES;</pre><br /><br /><br />如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器，并使用mypassword作为密码<br /><br /><pre name="code" class="sql">GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 
'mypassword' WITH GRANT OPTION; 
FLUSH   PRIVILEGES;</pre><br /><br /> 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库，并使用mypassword作为密码<br /><pre name="code" class="sql">
GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 
'mypassword' WITH GRANT OPTION; 
FLUSH   PRIVILEGES;</pre><br />注意授权后必须FLUSH   PRIVILEGES;否则无法立即生效。<br /><br />另外一种方法.<br /><br />在安装mysql的机器上运行：  <br />  1、d:\mysql\bin\>mysql   -h   localhost   -u   root  <br />        //这样应该可以进入MySQL服务器  <br />  2、mysql>GRANT   ALL   PRIVILEGES   ON   *.*   TO   'root'@'%'   WITH   GRANT   OPTION  <br />        //赋予任何主机访问数据的权限  <br />  3、mysql>FLUSH   PRIVILEGES  <br />        //修改生效  <br />  4、mysql>EXIT  <br />        //退出MySQL服务器  <br />  这样就可以在其它任何的主机上以root身份登录啦！
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/181294#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>Thu, 10 Apr 2008 15:12:36 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/181294</link>
        <guid>http://Shamrock.javaeye.com/blog/181294</guid>
      </item>
      <item>
        <title>Linux下的字符集问题</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/181292" style="color:red;">http://Shamrock.javaeye.com/blog/181292</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在Ubuntu默认的字符集都是UTF8，但是一些老的其他Linux发行版的默认字符集可能为其他字符集，从而导致Linux下的项目出现乱码。<br />打开/etc/sysconfig/i18n文件，将其修改为：<br /><pre name="code" class="java">
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"</pre>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/181292#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>Thu, 10 Apr 2008 15:09:08 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/181292</link>
        <guid>http://Shamrock.javaeye.com/blog/181292</guid>
      </item>
      <item>
        <title>Linux下MySQL的大小写区分问题</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/181290" style="color:red;">http://Shamrock.javaeye.com/blog/181290</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、linux下mysql安装完后是默认：区分表名的大小写，不区分列名的大小写；<br /><br />2、用root帐号登录后，在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1，重启MYSQL服务，这时已设置成功：不区分表名的大小写；<br />  <br />    lower_case_table_names参数详解：<br /><br />        lower_case_table_names = 0<br /><br />        其中 0：区分大小写，1：不区分大小写<br /><br />        MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的：<br /><br />　　        1、数据库名与表名是严格区分大小写的；<br /><br />　　        2、表的别名是严格区分大小写的；<br /><br />　　        3、列名与列的别名在所有的情况下均是忽略大小写的；<br /><br />　　        4、变量名也是严格区分大小写的；<br /><br />        MySQL在Windows下都不区分大小写。<br /><br /><br />3、如果想在查询时区分字段值的大小写，则：字段值需要设置BINARY属性，设置的方法有多种：<br /><br />    A、创建时设置：<br />                    CREATE TABLE T(<br />                        A VARCHAR(10) BINARY<br />                    );<br /><br />    B、使用alter修改：<br />                     ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;<br /><br />    C、mysql table editor中直接勾选BINARY项。
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/181290#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>Thu, 10 Apr 2008 15:05:08 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/181290</link>
        <guid>http://Shamrock.javaeye.com/blog/181290</guid>
      </item>
      <item>
        <title>通过分区（Partition）提升MySQL性能</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/180335" style="color:red;">http://Shamrock.javaeye.com/blog/180335</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          几年前，俺写过一篇题为“The Foundation of Excellent Performance”的文章(现在仍然可以在http://www.tdan.com/i016fe03.htm看到)，俺对SQL语句是影响数据库驱动系统性能的第一要素的观点有点质疑。其实在那时我在文章中就坚信数据库的物理设计在对高级数据库的性能影响上远比其他因素重要。同时俺还给大家看了Oracle的研究，他们解释了为什么拙劣的物理设计是数据库停机（无论是有计划的还是没计划的）背后的主要原因。这么多年都过来啦（幸好没多少人朝俺扔砖头），俺的观点是改变了一些，但在这点上俺还是坚持DBA如果想要高性能的数据库就必须在数据库的物理设计上多思考的观点，这样才能减少响应时间使终端用户满意而不是引来骂声一片。（陈朋奕语：不要那么严肃，嘿嘿）<br />俺今天这么激动又想写文章的原因是MySQL5.1的发布带来了设计超强动力数据库的强有力的武器，任何MySQL的DBA都应该尽快学习并使用它。俺觉得如果能很好滴使用这个5.1版带来的新特性，DBA可以使自己管理的VLDB（不知道什么是VLDB？告诉你，是好大好大的数据库的意思，Very Large DB）或数据仓库奇迹般的获得巨大的性能提升。<br /><br />什么是数据库分区？<br />数据库分区是一种物理数据库设计技术，DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果，但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。<br />分区主要有两种形式：//这里一定要注意行和列的概念（row是行，column是列）<br /><br />   1. 水平分区（Horizontal Partitioning） 这种形式分区是对表的行进行分区，通过这样的方式不同分组里面的物理列分割的数据集得以组合，从而进行个体分割（单分区）或集体分割（1个或多个分区）。所有在表中定义的列在每个数据集中都能找到，所以表的特性依然得以保持。<br />      举个简单例子：一个包含十年发票记录的表可以被分区为十个不同的分区，每个分区包含的是其中一年的记录。（朋奕注：这里具体使用的分区方式我们后面再说，可以先说一点，一定要通过某个属性列来分割，譬如这里使用的列就是年份）<br />   2. 垂直分区（Vertical Partitioning） 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度，使某些特定的列被划分到特定的分区，每个分区都包含了其中的列所对应的行。<br />      举个简单例子：一个包含了大text和BLOB列的表，这些text和BLOB列又不经常被访问，这时候就要把这些不经常使用的text和BLOB了划分到另一个分区，在保证它们数据相关性的同时还能提高访问速度。 <br /><br />在数据库供应商开始在他们的数据库引擎中建立分区（主要是水平分区）时，DBA和建模者必须设计好表的物理分区结构，不要保存冗余的数据（不同表中同时都包含父表中的数据）或相互联结成一个逻辑父对象（通常是视图）。这种做法会使水平分区的大部分功能失效，有时候也会对垂直分区产生影响。<br /><br /><br />在MySQL 5.1中进行分区<br />     MySQL5.1中最激动人心的新特性应该就是对水平分区的支持了。这对MySQL的使用者来说确实是个好消息，而且她已经支持分区大部分模式：<br />         Range（范围） – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区，80年代（1980's）的数据，90年代（1990's）的数据以及任何在2000年（包括2000年）后的数据。 <br />         Hash（哈希） – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算，最后通过这个Hash码不同数值对应的数据区域进行分区，。例如DBA可以建立一个对表主键进行分区的表。 <br />         Key（键值） – 上面Hash模式的一种延伸，这里的Hash Key是MySQL系统产生的。 <br />         List（预定义列表） – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如：DBA建立了一个横跨三个分区的表，分别根据2004年2005年和2006年值所对应的数据。 <br />         Composite（复合模式） - 很神秘吧，哈哈，其实是以上模式的组合使用而已，就不解释了。举例：在初始化已经进行了Range范围分区的表上，我们可以对其中一个分区再进行hash哈希分区。<br />    分区带来的好处太多太多了，有多少？俺也不知道，自己猜去吧，要是觉得没有多少就别用，反正俺也不求你用。不过在这里俺强调两点好处：<br />性能的提升（Increased performance） - 在扫描操作中，如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据，它就能直接去扫描那些分区的数据，而不用浪费很多时间扫描不需要的地方了。需要举个例子？好啊，百万行的表划分为10个分区，每个分区就包含十万行数据，那么查询分区需要的时间仅仅是全表扫描的十分之一了，很明显的对比。同时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上，这时候的I/O读写速度就“不堪设想”（没用错词，真的太快了，理论上100倍的速度提升啊，这是多么快的响应速度啊，所以有点不堪设想了）了。<br />对数据管理的简化（Simplified data management） - 分区技术可以让DBA对数据的管理能力提升。通过优良的分区，DBA可以简化特定数据操作的执行方式。例如：DBA在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。<br />此外分区是由MySQL系统直接管理的，DBA不需要手工的去划分和维护。例如：这个例如没意思，不讲了，如果你是DBA，只要你划分了分区，以后你就不用管了就是了。<br /><br />站在性能设计的观点上，俺们对以上的内容也是相当感兴趣滴。通过使用分区和对不同的SQL操作的匹配设计，数据库的性能一定能获得巨大提升。下面咱们一起用用这个MySQL 5.1的新功能看看。<br />下面所有的测试都在Dell Optiplex box with a Pentium 4 3.00GHz processor, 1GB of RAM机器上（炫耀啊……），Fedora Core 4和MySQL 5.1.6 alpha上运行通过。<br /><br /><br />如何进行实际分区<br />看看分区的实际效果吧。我们建立几个同样的MyISAM引擎的表，包含日期敏感的数据，但只对其中一个分区。分区的表（表名为part_tab）我们采用Range范围分区模式，通过年份进行分区：<br />mysql> CREATE TABLE part_tab<br />    ->      ( c1 int default NULL,<br />    -> c2 varchar(30) default NULL,<br />    -> c3 date default NULL<br />    -><br />    ->      ) engine=myisam<br />    ->      PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),<br />    ->      PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,<br />    ->      PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,<br />    ->      PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,<br />    ->      PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,<br />    ->      PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),<br />    ->      PARTITION p11 VALUES LESS THAN MAXVALUE );<br />Query OK, 0 rows affected (0.00 sec)<br />注意到了这里的最后一行吗？这里把不属于前面年度划分的年份范围都包含了，这样才能保证数据不会出错，大家以后要记住啊，不然数据库无缘无故出错你就爽了。那下面我们建立没有分区的表（表名为no_part_tab）：<br />mysql> create table no_part_tab<br />    -> (c1 int(11) default NULL,<br />    -> c2 varchar(30) default NULL,<br />    -> c3 date default NULL) engine=myisam;<br />Query OK, 0 rows affected (0.02 sec)<br />下面咱写一个存储过程（感谢Peter Gulutzan给的代码，如果大家需要Peter Gulutzan的存储过程教程的中文翻译也可以跟我要，chenpengyi◎gmail.com），它能向咱刚才建立的已分区的表中平均的向每个分区插入共8百万条不同的数据。填满后，咱就给没分区的克隆表中插入相同的数据：<br />mysql> delimiter //<br />mysql> CREATE PROCEDURE load_part_tab()<br />    -> begin<br />    -> declare v int default 0;<br />    ->          while v &lt; 8000000<br />    -> do<br />    -> insert into part_tab<br />    -> values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652));<br />    -> set v = v + 1;<br />    -> end while;<br />    -> end<br />    -> //<br />Query OK, 0 rows affected (0.00 sec)<br />mysql> delimiter ;<br />mysql> call load_part_tab();<br />Query OK, 1 row affected (8 min 17.75 sec)<br />mysql> insert into no_part_tab select * from part_tab;<br />Query OK, 8000000 rows affected (51.59 sec)<br />Records: 8000000 Duplicates: 0 Warnings: 0<br /><br />表都准备好了。咱开始对这两表中的数据进行简单的范围查询吧。先分区了的，后没分区的，跟着有执行过程解析（MySQL Explain命令解析器），可以看到MySQL做了什么：<br />mysql> select count(*) from no_part_tab where<br />    -> c3 > date '1995-01-01' and c3 &lt; date '1995-12-31';<br />+----------+<br />| count(*) |<br />+----------+<br />|   795181 |<br />+----------+<br />1 row in set (38.30 sec)<br /> <br />mysql> select count(*) from part_tab where<br />    -> c3 > date '1995-01-01' and c3 &lt; date '1995-12-31';<br />+----------+<br />| count(*) |<br />+----------+<br />|   795181 |<br />+----------+<br />1 row in set (3.88 sec)<br /> <br />mysql> explain select count(*) from no_part_tab where<br />    -> c3 > date '1995-01-01' and c3 &lt; date '1995-12-31'\G<br />*************************** 1. row ***************************<br />           id: 1<br /> select_type: SIMPLE<br />        table: no_part_tab<br />         type: ALL<br />possible_keys: NULL<br />          key: NULL<br />      key_len: NULL<br />          ref: NULL<br />         rows: 8000000<br />        Extra: Using where<br />1 row in set (0.00 sec)<br /> <br />mysql> explain partitions select count(*) from part_tab where<br />    -> c3 > date '1995-01-01' and c3 &lt; date '1995-12-31'\G<br />*************************** 1. row ***************************<br />           id: 1<br /> select_type: SIMPLE<br />        table: part_tab<br />   partitions: p1<br />         type: ALL<br />possible_keys: NULL<br />          key: NULL<br />      key_len: NULL<br />          ref: NULL<br />         rows: 798458<br />        Extra: Using where<br />1 row in set (0.00 sec)<br />从上面结果可以容易看出，设计恰当表分区能比非分区的减少90％的响应时间。而命令解析Explain程序也告诉我们在对已分区的表的查询过程中仅对第一个分区进行了扫描，其他都跳过了。<br />哔厉吧拉，说阿说……反正就是这个分区功能对DBA很有用拉，特别对VLDB和需要快速反应的系统。<br /><br />对Vertical Partitioning的一些看法<br />虽然MySQL 5.1自动实现了水平分区，但在设计数据库的时候不要轻视垂直分区。虽然要手工去实现垂直分区，但在特定场合下你会收益不少的。例如在前面建立的表中，VARCHAR字段是你平常很少引用的，那么对它进行垂直分区会不会提升速度呢？咱们看看测试结果：<br />mysql> desc part_tab;<br />+-------+-------------+------+-----+---------+-------+<br />| Field | Type        | Null | Key | Default | Extra |<br />+-------+-------------+------+-----+---------+-------+<br />| c1    | int(11)     | YES |     | NULL    |       |<br />| c2    | varchar(30) | YES |     | NULL    |       |<br />| c3    | date        | YES |     | NULL    |       |<br />+-------+-------------+------+-----+---------+-------+<br />3 rows in set (0.03 sec)<br /> <br />mysql> alter table part_tab drop column c2;<br />Query OK, 8000000 rows affected (42.20 sec)<br />Records: 8000000 Duplicates: 0 Warnings: 0<br /> <br />mysql> desc part_tab;<br />+-------+---------+------+-----+---------+-------+<br />| Field | Type    | Null | Key | Default | Extra |<br />+-------+---------+------+-----+---------+-------+<br />| c1    | int(11) | YES |     | NULL    |       |<br />| c3    | date    | YES |     | NULL    |       |<br />+-------+---------+------+-----+---------+-------+<br />2 rows in set (0.00 sec)<br /> <br />mysql> select count(*) from part_tab where<br />    -> c3 > date '1995-01-01' and c3 &lt; date '1995-12-31';<br />+----------+<br />| count(*) |<br />+----------+<br />|   795181 |<br />+----------+<br />1 row in set (0.34 sec)<br />在设计上去掉了VARCHAR字段后，不止是你，俺也发现查询响应速度上获得了另一个90％的时间节省。所以大家在设计表的时候，一定要考虑，表中的字段是否真正关联，又是否在你的查询中有用？<br /><br />补充说明 <br /><br />这么简单的文章肯定不能说全MySQL 5.1 分区机制的所有好处和要点（虽然对自己写文章水平很有信心），下面就说几个感兴趣的：<br /><br />    * 支持所有存储引擎(MyISAM, Archive, InnoDB, 等等)<br />    * 对分区的表支持索引，包括本地索引local indexes，对其进行的是一对一的视图镜像，假设一个表有十个分区，那么其本地索引也包含十个分区。<br />    * 关于分区的元数据Metadata的表可以在INFORMATION_SCHEMA数据库中找到，表名为PARTITIONS。<br />    * All SHOW 命令支持返回分区表以及元数据的索引。<br />    * 对其操作的命令和实现的维护功能有（比对全表的操作还多）：<br />          o ADD PARTITION<br />          o DROP PARTITION<br />          o COALESCE PARTITION<br />          o REORGANIZE PARTITION<br />          o ANALYZE PARTITION<br />          o CHECK PARTITION<br />          o OPTIMIZE PARTITION<br />          o REBUILD PARTITION<br />          o REPAIR PARTITION <br /><br />站在性能主导的观点上来说，MySQL 5.1的分区功能能给数据性能带来巨大的提升的同时减轻DBA的管理负担，如果分区合理的话。如果需要更多的资料可以去http://dev.mysql.com/doc/refman/5.1/en/partitioning.html或 http://forums.mysql.com/list.php?106获得相关资料。<br />关于MySQL分区的使用方法很快发布上来，这里有什么错误欢迎指出，或给我来信<br />——2006-05-05陈朋奕
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/180335#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>Tue, 08 Apr 2008 09:38:13 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/180335</link>
        <guid>http://Shamrock.javaeye.com/blog/180335</guid>
      </item>
      <item>
        <title>一些sql 语句(行列转换等)</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/179374" style="color:red;">http://Shamrock.javaeye.com/blog/179374</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. 行列转换--普通<br /><br />假设有张学生成绩表(CJ)如下<br />Name Subject Result<br />张三 语文 80<br />张三 数学 90<br />张三 物理 85<br />李四 语文 85<br />李四 数学 92<br />李四 物理 82<br /><br />想变成<br />姓名 语文 数学 物理<br />张三 80 90 85<br />李四 85 92 82<br /><br />declare @sql varchar(4000)<br />set @sql = 'select Name'<br />select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'<br />from (select distinct Subject from CJ) as a<br />select @sql = @sql+' from test group by name'<br />exec(@sql)<br /><br />2. 行列转换--合并<br /><br />有表A,<br />id pid<br />1 1<br />1 2<br />1 3<br />2 1<br />2 2<br />3 1<br />如何化成表B:<br />id pid<br /> 1 1,2,3<br /> 2 1,2<br /> 3 1<br /><br />创建一个合并的函数<br />create function fmerg(@id int)<br />returns varchar(8000)<br />as<br />begin<br />declare @str varchar(8000)<br />set @str=''<br />select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)<br />return(@str)<br />End<br />go<br /><br />--调用自定义函数得到结果<br />select distinct id,dbo.fmerg(id) from 表A<br /><br />3. 如何取得一个数据表的所有列名<br /><br />方法如下：先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。<br />SQL语句如下：<br />declare @objid int,@objname char(40)<br />set @objname = 'tablename'<br />select @objid = id from sysobjects where id = object_id(@objname)<br />select 'Column_name' = name from syscolumns where id = @objid order by colid<br /><br />是不是太简单了？ 呵呵 不过经常用阿.<br /><br />4. 通过SQL语句来更改用户的密码<br /><br />修改别人的,需要sysadmin role<br />EXEC sp_password NULL, 'newpassword', 'User'<br /><br />如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa<br /><br />5. 怎么判断出一个表的哪些字段不允许为空？<br /><br />select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename<br /><br />6. 如何在数据库里找到含有相同字段的表？<br />a. 查已知列名的情况<br />SELECT b.name as TableName,a.name as columnname<br />From syscolumns a INNER JOIN sysobjects b<br />ON a.id=b.id<br />AND b.type='U'<br />AND a.name='你的字段名字'<br /><br />b. 未知列名查所有在不同表出现过的列名<br />Select o.name As tablename,s1.name As columnname<br />From syscolumns s1, sysobjects o<br />Where s1.id = o.id<br /> And o.type = 'U'<br /> And Exists (<br /> Select 1 From syscolumns s2<br /> Where s1.name = s2.name<br /> And s1.id &lt;> s2.id<br /> )<br /><br />7. 查询第xxx行数据<br /><br />假设id是主键：<br />select *<br />from (select top xxx * from yourtable) aa<br />where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)<br /> <br />如果使用游标也是可以的<br />fetch absolute [number] from [cursor_name]<br />行数为绝对行数<br /><br />8. SQL Server日期计算<br />a. 一个月的第一天<br />SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)<br />b. 本周的星期一<br />SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)<br />c. 一年的第一天<br />SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)<br />d. 季度的第一天<br />SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)<br />e. 上个月的最后一天<br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))<br />f. 去年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))<br />g. 本月的最后一天<br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))<br />h. 本月的第一个星期一<br />select DATEADD(wk, DATEDIFF(wk,0,<br /> dateadd(dd,6-datepart(day,getdate()),getdate())<br /> ), 0)<br />i. 本年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/179374#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>Thu, 03 Apr 2008 20:24:10 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/179374</link>
        <guid>http://Shamrock.javaeye.com/blog/179374</guid>
      </item>
      <item>
        <title>按位数拆分数字</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/175887" style="color:red;">http://Shamrock.javaeye.com/blog/175887</a>&nbsp;
          发表时间: 2008年03月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看下面一段代码：<br /><pre name="code" class="ruby">s='12345678'
s.gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, &quot;\\1,&quot;)</pre> <p>返回的结果是12,345,678</p><p>正则表达式中，?=为正向预查，在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串，?!为负向预查，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串，这个正则表达式的意思为：匹配以一个数字开头，接着跟上N组3个数字，但不以一个数字结尾。</p><p>?=和?!为预查，不消耗字符串，发现匹配后立即开始下一次搜索，而不是从包含预查的字符之后开始。</p><p>gsub!和scan一样，从字符串的0位开始扫描匹配正则表达式，所以当扫描到1位时，出现第一个匹配的字符串为2345678，返回[2,678]，接着向后扫描到4位时，出现第二个匹配的字符串为5678，返回[5,678]。</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/175887#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>Tue, 25 Mar 2008 16:24:16 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/175887</link>
        <guid>http://Shamrock.javaeye.com/blog/175887</guid>
      </item>
      <item>
        <title>returning的用法</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/175547" style="color:red;">http://Shamrock.javaeye.com/blog/175547</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Ruby中返回值的关键字除了return外，还有一个returning，使用returning返回结果时，可以对结果进行处理。</p><p>Rails中的示例代码如下： </p><pre name="code" class="ruby">def extract_namespace(record_or_hash_or_array)
    returning &quot;&quot; do |namespace|
        if record_or_hash_or_array.is_a?(Array)
           record_or_hash_or_array.delete_if do |record_or_namespace|
              if record_or_namespace.is_a?(String) || record_or_namespace.is_a?(Symbol)
                namespace &lt;&lt; &quot;#{record_or_namespace}_&quot;
              end
            end
        end  
    end
end</pre>&nbsp;其中namespace是returning后面的值，传入后面的block中执行后，返回namespace的结果。<br /><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/175547#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, 24 Mar 2008 20:03:01 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/175547</link>
        <guid>http://Shamrock.javaeye.com/blog/175547</guid>
      </item>
      <item>
        <title>Rails新增内容</title>
        <author>phoenix520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://Shamrock.javaeye.com">phoenix520</a>&nbsp;
          链接：<a href="http://Shamrock.javaeye.com/blog/175474" style="color:red;">http://Shamrock.javaeye.com/blog/175474</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>2.0.2 - </p><p>增加了has_finder:</p><pre name="code" class="ruby">class Article &lt; ActiveRecord::Base
    has_finder :published, :conditions =&gt; {:published =&gt; true}
    has_finder :popular, :conditions =&gt; ...
end

Article.published.paginate(:page =&gt; 1)
Article.published.popular.count
Article.popular.find(:first)
Article.popular.find(:all, :conditions =&gt; {...})</pre><p>通过has_finder，可以方便的增加查询和符合查询方法。</p>
          <br/>
          <span style="color:red;">
            <a href="http://Shamrock.javaeye.com/blog/175474#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>Mon, 24 Mar 2008 15:57:57 +0800</pubDate>
        <link>http://Shamrock.javaeye.com/blog/175474</link>
        <guid>http://Shamrock.javaeye.com/blog/175474</guid>
      </item>
  </channel>
</rss>