<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iq leung&#039;s blog</title>
	<atom:link href="http://blog.iqbon.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.iqbon.com</link>
	<description>zlliang的个人博客</description>
	<lastBuildDate>Thu, 19 Jan 2012 16:26:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>设置google的hosts，获取google code的密码</title>
		<link>http://blog.iqbon.com/doc/309.html</link>
		<comments>http://blog.iqbon.com/doc/309.html#comments</comments>
		<pubDate>Thu, 19 Jan 2012 16:26:17 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=309</guid>
		<description><![CDATA[在hosts文件添加上 ##Google Service ##Chrome 网上应用店 203.208.46.146 chrome.google.com 203.208.46.146 clients0.google.com 203.208.46.146 clients1.google.com 203.208.46.146 clients2.google.com 203.208.46.146 clients3.google.com 203.208.46.146 clients4.google.com 203.208.46.146 www.googleusercontent.com 203.208.46.146 lh0.googleusercontent.com 203.208.46.146 lh1.googleusercontent.com 203.208.46.146 lh2.googleusercontent.com 203.208.46.146 lh3.googleusercontent.com 203.208.46.146 lh4.googleusercontent.com 203.208.46.146 lh5.googleusercontent.com 203.208.46.146 lh6.googleusercontent.com 203.208.46.146 clients1.googleusercontent.com 203.208.46.146 clients2.googleusercontent.com ##网页快照 203.208.46.146 webcache.googleusercontent.com ##Google SSL 203.208.46.146 encrypted.google.com 203.208.46.146 encrypted.google.com.hk ##Google Docs 203.208.46.146 docs.google.com 203.208.46.146 docs0.google.com 203.208.46.146 docs1.google.com 203.208.46.146 [...]]]></description>
			<content:encoded><![CDATA[<p>在hosts文件添加上<br />
##Google Service<br />
##Chrome 网上应用店<br />
203.208.46.146 chrome.google.com<br />
203.208.46.146 clients0.google.com<br />
203.208.46.146 clients1.google.com<br />
203.208.46.146 clients2.google.com<br />
203.208.46.146 clients3.google.com<br />
203.208.46.146 clients4.google.com<br />
203.208.46.146 www.googleusercontent.com<br />
203.208.46.146 lh0.googleusercontent.com<br />
203.208.46.146 lh1.googleusercontent.com<br />
203.208.46.146 lh2.googleusercontent.com<br />
203.208.46.146 lh3.googleusercontent.com<br />
203.208.46.146 lh4.googleusercontent.com<br />
203.208.46.146 lh5.googleusercontent.com<br />
203.208.46.146 lh6.googleusercontent.com<br />
203.208.46.146 clients1.googleusercontent.com<br />
203.208.46.146 clients2.googleusercontent.com<br />
##网页快照<br />
203.208.46.146 webcache.googleusercontent.com<br />
##Google SSL<br />
203.208.46.146 encrypted.google.com<br />
203.208.46.146 encrypted.google.com.hk<br />
##Google Docs<br />
203.208.46.146 docs.google.com<br />
203.208.46.146 docs0.google.com<br />
203.208.46.146 docs1.google.com<br />
203.208.46.146 docs2.google.com<br />
203.208.46.146 docs3.google.com<br />
203.208.46.146 spreadsheets.google.com<br />
203.208.46.146 spreadsheets0.google.com<br />
203.208.46.146 spreadsheets1.google.com<br />
203.208.46.146 spreadsheets2.google.com<br />
203.208.46.146 spreadsheets3.google.com<br />
#Gmail<br />
203.208.46.146 mail.google.com<br />
203.208.46.146 chatenabled.mail.google.com #Gmail中Gtalk聊天服务<br />
##Google 搜索<br />
203.208.46.146 www.google.com<br />
##Google preview<br />
203.208.46.146 www.googlepreview.com<br />
##Google 翻译<br />
203.208.46.146 translate.google.com<br />
203.208.46.146 translate.googleapis.com<br />
##Google 搜索建议（IE9）<br />
203.208.46.146 clients5.google.com<br />
##Google code<br />
203.208.46.146 code.google.com<br />
##Picasa 网络相册<br />
203.208.46.146 picasaweb.google.com<br />
203.208.46.146 lh0.ggpht.com<br />
203.208.46.146 lh1.ggpht.com<br />
203.208.46.146 lh2.ggpht.com<br />
203.208.46.146 lh3.ggpht.com<br />
203.208.46.146 lh4.ggpht.com<br />
203.208.46.146 lh5.ggpht.com<br />
203.208.46.146 lh6.ggpht.com<br />
203.208.46.146 lh7.ggpht.com<br />
203.208.46.146 lh8.ggpht.com<br />
203.208.46.146 lh8.ggpht.com<br />
203.208.46.146 lh9.ggpht.com<br />
203.208.46.146 lh6.google.com<br />
##Google 个人资料<br />
203.208.46.146 profiles.google.com<br />
203.208.46.146 browsersync.google.com<br />
##Google+<br />
203.208.46.146 talkgadget.google.com ##Google+中的聊天服务<br />
203.208.46.146 ssl.gstatic.com<br />
203.208.46.146 images-pos-opensocial.googleusercontent.com<br />
203.208.46.146 images1-focus-opensocial.googleusercontent.com<br />
203.208.46.146 images2-focus-opensocial.googleusercontent.com<br />
203.208.46.146 images3-focus-opensocial.googleusercontent.com<br />
203.208.46.146 images4-focus-opensocial.googleusercontent.com<br />
203.208.46.146 images5-focus-opensocial.googleusercontent.com<br />
203.208.46.146 images6-focus-opensocial.googleusercontent.com<br />
203.208.46.146 plus.google.com<br />
##Download 下载<br />
203.208.46.146 dl.google.com<br />
203.208.46.146 dl-ssl.google.com<br />
##Groups<br />
203.208.46.146 groups.google.com<br />
##Google URL Shortener<br />
203.208.46.146 goo.gl<br />
##Google app engine<br />
203.208.46.146 appengine.google.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/309.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ANT 远程发布到FTP服务器的方法</title>
		<link>http://blog.iqbon.com/doc/304.html</link>
		<comments>http://blog.iqbon.com/doc/304.html#comments</comments>
		<pubDate>Wed, 18 Jan 2012 16:09:27 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=304</guid>
		<description><![CDATA[在ANT中用FTP脚本 action=&#8221;put&#8221; 表明上传 action=&#8221;get&#8221; 表明下载]]></description>
			<content:encoded><![CDATA[<p>在ANT中用FTP脚本</p>
<p><ftp action="put" password="其他电脑密码" remotedir="其他电脑共享目录" server="其他电脑IP地址" userid="其他电脑用户名"><br />
      <fileset file="需要上传的文件"/><br />
</ftp></p>
<p>action=&#8221;put&#8221; 表明上传  action=&#8221;get&#8221; 表明下载</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/304.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库性能优化六大技巧</title>
		<link>http://blog.iqbon.com/doc/302.html</link>
		<comments>http://blog.iqbon.com/doc/302.html#comments</comments>
		<pubDate>Sat, 22 Oct 2011 04:22:14 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=302</guid>
		<description><![CDATA[数据库表表面上存在索引和防错机制，然而一个简单的查询就会耗费很长时间。Web应用程序或许在开发环境中运行良好，但在产品环境中表现同样糟糕。 如果你是个数据库管理员，你很有可能已经在某个阶段遇到上述情况。因此，本文将介绍对MySQL进行性能优化的技巧和窍门。 1.存储引擎的选择 如果数据表需要事务处理，应该考虑使用InnoDB，因为它完全符合ACID特性。如果不需要事务处理，使用默认存储引擎MyISAM是比较明智 的。并且不要尝试同时使用这两个存储引擎。思考一下：在一个事务处理中，一些数据表使用InnoDB，而其余的使用MyISAM。结果呢?整个 subject将被取消，只有那些在事务处理中的被带回到原始状态，其余的被提交的数据转存，这将导致整个数据库的冲突。然而存在一个简单的方法可以同时 利用两个存储引擎的优势。目前大多数MySQL套件中包括InnoDB、编译器和链表，但如果你选择MyISAM，你仍然可以单独下载InnoDB，并把 它作为一个插件。很简单的方法，不是吗? 2.计数问题 如果数据表采用的存储引擎支持事务处理(如InnoDB)，你就不应使用COUNT(*)计算数据表中的行数。这是因为在产品类数据库使用 COUNT(*)，最多返回一个近似值，因为在某个特定时间，总有一些事务处理正在运行。如果使用COUNT(*)显然会产生bug，出现这种错误结果。 3.反复测试查询 查询最棘手的问题并不是无论怎样小心总会出现错误，并导致bug出现。恰恰相反，问题是在大多数情况下bug出现时，应用程序或数据库已经上线。的 确不存在针对该问题切实可行的解决方法，除非将测试样本在应用程序或数据库上运行。任何数据库查询只有经过上千个记录的大量样本测试，才能被认可。 4.避免全表扫描 通常情况下，如果MySQL(或者其他关系数据库模型)需要在数据表中搜索或扫描任意特定记录时，就会用到全表扫描。此外，通常最简单的方法是使用 索引表，以解决全表扫描引起的低效能问题。然而，正如我们在随后的问题中看到的，这存在错误部分。 5.使用”EXPLAIN”进行查询 当需要调试时，EXPLAIN是一个很好的命令，下面将对EXPLAIN进行深入探讨。 首先，创建一个简单的数据表： CREATETABLE&#8217;awesome_pcq&#8217;( &#8216;emp_id&#8217;INT(10)NOTNULL DEFAULT&#8217;0&#8242;, &#8216;full_name&#8217;VARCHAR(100)NOTNULL, &#8216;email_id&#8217;VARCHAR(100)NOTNULL, &#8216;password&#8217;VARCHAR(50)NOTNULL, &#8216;deleted&#8217;TINYINT(4)NOTNULL, PRIMARYKEY(&#8216;emp_id&#8217;) ) COLLATE=&#8217;utf8_general_ci&#8217; ENGINE=InnoDB ROW_FORMAT=DEFAULT 这个数据表一目了然，共有五列，最后一列“deleted”是一个Boolean类变量flag来检查帐号是活动的还是已被删除。接下来，您需要用 样本记录填充这个表(比如，100个雇员记录)。正如你看到的，主键是“emp_id”。因此，使用电子邮件地址和密码字段，我们可以很容易地创建一个查 询，以验证或拒绝登录请求，如下(实例一)： SELECTCOUNT(*)FROMawesome_pcqWHERE email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 之前我们提到，要避免使用COUNT(*)。代码纠正如下(实例二)： SELECTemp_idFROMawesome_pcqWHERE email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 现在回想一下，在实例一中，代码查询定位并返回“email_id”和“password”等于给定值的行数。在实例二中，进行了同样的查询，不同 的是明确要求列出“emp_id”所有满足给定的标准的值。哪个查询更费时? 很显然，这两个实例都是同样费时的数据库查询，因为无意间，两个实例查询都进行了全表扫描。为了更好地读懂指令，执行如下代码： EXPLAINSELECTemp_idFROMawesome_pcqWHERE email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 在输出时，集中在倒数第二列：“rows”。假设我们已经将表填充了100个记录，它会在第一行显示100，这是MySQL需要进行扫描用来计算查询的结 果的行数。这说明了什么?这需要全表扫描。为了克服这个弊端，则需要添加索引。 6.添加索引 先从重要的说起：给每一个可能遇到的次要问题创建索引并不明智。过多的索引会导致效能减慢和资源占用。在进一步讨论之前，在实例中创建一个样本索 引： ALTERTABLE&#8217;awesome_pcq&#8217;ADDINDEX&#8217;LoginValidate&#8217;(&#8216;email_id&#8217;) 接下来，再次运行该查询： EXPLAINSELECTemp_idFROMawesome_pcqWHERE email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 请注意运行后的值。不是100，而是1。因此，为了给出查询结果，MySQL只扫描了1行，多亏先前创建的索引。你可能会注意到，索引只在电子邮件 [...]]]></description>
			<content:encoded><![CDATA[<p>数据库表表面上存在索引和防错机制，然而一个简单的查询就会耗费很长时间。Web应用程序或许在开发环境中运行良好，但在产品环境中表现同样糟糕。 如果你是个数据库管理员，你很有可能已经在某个阶段遇到上述情况。因此，本文将介绍对MySQL进行性能优化的技巧和窍门。</p>
<p>1.存储引擎的选择</p>
<p>如果数据表需要事务处理，应该考虑使用InnoDB，因为它完全符合ACID特性。如果不需要事务处理，使用默认存储引擎MyISAM是比较明智 的。并且不要尝试同时使用这两个存储引擎。思考一下：在一个事务处理中，一些数据表使用InnoDB，而其余的使用MyISAM。结果呢?整个 subject将被取消，只有那些在事务处理中的被带回到原始状态，其余的被提交的数据转存，这将导致整个数据库的冲突。然而存在一个简单的方法可以同时 利用两个存储引擎的优势。目前大多数MySQL套件中包括InnoDB、编译器和链表，但如果你选择MyISAM，你仍然可以单独下载InnoDB，并把 它作为一个插件。很简单的方法，不是吗?</p>
<p>2.计数问题</p>
<p>如果数据表采用的存储引擎支持事务处理(如InnoDB)，你就不应使用COUNT(*)计算数据表中的行数。这是因为在产品类数据库使用 COUNT(*)，最多返回一个近似值，因为在某个特定时间，总有一些事务处理正在运行。如果使用COUNT(*)显然会产生bug，出现这种错误结果。</p>
<p>3.反复测试查询</p>
<p>查询最棘手的问题并不是无论怎样小心总会出现错误，并导致bug出现。恰恰相反，问题是在大多数情况下bug出现时，应用程序或数据库已经上线。的 确不存在针对该问题切实可行的解决方法，除非将测试样本在应用程序或数据库上运行。任何数据库查询只有经过上千个记录的大量样本测试，才能被认可。</p>
<p>4.避免全表扫描</p>
<p>通常情况下，如果MySQL(或者其他关系数据库模型)需要在数据表中搜索或扫描任意特定记录时，就会用到全表扫描。此外，通常最简单的方法是使用 索引表，以解决全表扫描引起的低效能问题。然而，正如我们在随后的问题中看到的，这存在错误部分。</p>
<p>5.使用”EXPLAIN”进行查询</p>
<p>当需要调试时，EXPLAIN是一个很好的命令，下面将对EXPLAIN进行深入探讨。</p>
<p>首先，创建一个简单的数据表：</p>
<p>CREATETABLE&#8217;awesome_pcq&#8217;(</p>
<p>&#8216;emp_id&#8217;INT(10)NOTNULL</p>
<p>DEFAULT&#8217;0&#8242;,</p>
<p>&#8216;full_name&#8217;VARCHAR(100)NOTNULL,</p>
<p>&#8216;email_id&#8217;VARCHAR(100)NOTNULL,</p>
<p>&#8216;password&#8217;VARCHAR(50)NOTNULL,</p>
<p>&#8216;deleted&#8217;TINYINT(4)NOTNULL,</p>
<p>PRIMARYKEY(&#8216;emp_id&#8217;)</p>
<p>) COLLATE=&#8217;utf8_general_ci&#8217;</p>
<p>ENGINE=InnoDB</p>
<p>ROW_FORMAT=DEFAULT </p>
<p>这个数据表一目了然，共有五列，最后一列“deleted”是一个Boolean类变量flag来检查帐号是活动的还是已被删除。接下来，您需要用 样本记录填充这个表(比如，100个雇员记录)。正如你看到的，主键是“emp_id”。因此，使用电子邮件地址和密码字段，我们可以很容易地创建一个查 询，以验证或拒绝登录请求，如下(实例一)：</p>
<p>SELECTCOUNT(*)FROMawesome_pcqWHERE</p>
<p>email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 </p>
<p>之前我们提到，要避免使用COUNT(*)。代码纠正如下(实例二)：</p>
<p>SELECTemp_idFROMawesome_pcqWHERE</p>
<p>email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 </p>
<p>现在回想一下，在实例一中，代码查询定位并返回“email_id”和“password”等于给定值的行数。在实例二中，进行了同样的查询，不同 的是明确要求列出“emp_id”所有满足给定的标准的值。哪个查询更费时?</p>
<p>很显然，这两个实例都是同样费时的数据库查询，因为无意间，两个实例查询都进行了全表扫描。为了更好地读懂指令，执行如下代码：</p>
<p>EXPLAINSELECTemp_idFROMawesome_pcqWHERE</p>
<p>email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0<br />
在输出时，集中在倒数第二列：“rows”。假设我们已经将表填充了100个记录，它会在第一行显示100，这是MySQL需要进行扫描用来计算查询的结 果的行数。这说明了什么?这需要全表扫描。为了克服这个弊端，则需要添加索引。</p>
<p>6.添加索引</p>
<p>先从重要的说起：给每一个可能遇到的次要问题创建索引并不明智。过多的索引会导致效能减慢和资源占用。在进一步讨论之前，在实例中创建一个样本索 引：</p>
<p>ALTERTABLE&#8217;awesome_pcq&#8217;ADDINDEX&#8217;LoginValidate&#8217;(&#8216;email_id&#8217;)<br />
接下来，再次运行该查询：</p>
<p>EXPLAINSELECTemp_idFROMawesome_pcqWHERE</p>
<p>email_id=&#8217;blahblah&#8217;ANDpassword=&#8217;blahblah&#8217;ANDdeleted=0 </p>
<p>请注意运行后的值。不是100，而是1。因此，为了给出查询结果，MySQL只扫描了1行，多亏先前创建的索引。你可能会注意到，索引只在电子邮件 地址字段创建，而查询对其他字段同样进行了搜索。这表明MySQL先执行了一个cros-check，检查是否有在WHERE子句中的定义的值有索引指 定，如果有这样的值就执行相应的操作。</p>
<p>但是，它不是每次重复将减少到一个。例如，如果不是唯一的索引字段(如employee names列可以有两行相同的值)，即使创建索引，也将有多个记录留下。但它仍然比全表扫描好。并且，在WHERE子句中指定列的顺序没有在这个过程中发 挥作用。例如，如果在上面的查询中，改变字段的顺序，使电子邮件地址出现在最后，MySQL仍将遍历索引列的基础上。那么，就要在索引上动脑筋，注意如何 避免大量的全表扫描，并获得更好的结果。不过，这需要经历一个很长的过程。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/302.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spring相关jar包简介</title>
		<link>http://blog.iqbon.com/doc/299.html</link>
		<comments>http://blog.iqbon.com/doc/299.html#comments</comments>
		<pubDate>Sun, 16 Oct 2011 04:32:39 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=299</guid>
		<description><![CDATA[spring.jar 是包含有完整发布的单个jar包，spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容，因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试，正式应用系统中是用不得这些类的。 　　除了spring.jar文件，Spring还包括有其它13个独立的jar包，各自包含着对应的Spring组件，用户可以根据自己的需要来选择组合自己的jar包，而不必引入整个spring.jar的所有类文件。 (1) spring-core.jar 这个jar文件包含Spring框架基本的核心工具类，Spring其它组件要都要使用到这个包里的类，是其它组件的基本核心，当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用都要用到的，它包含访问配置文件、创建和管理bean以及进行 Inversion of Control / Dependency Injection（IoC/DI）操作相关的所有类。如果应用只需基本的IoC /DI支持，引入spring-core.jar及spring- beans.jar文件就可以了。 (3) spring-aop.jar 这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性，如声明型事务管理（Declarative Transaction Management），也要在应用里包含这个jar包。 (4) spring-context.jar 　　这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类，JDNI所需的全部类，UI方面的用来与模板（Templating）引擎如 Velocity、FreeMarker、JasperReports集成的类，以及校验Validation方面的相关类。 (5) spring-dao.jar 　　这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持，还需在自己的应用里包含spring-aop.jar。 (6) spring-hibernate.jar 　　这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。 (7) spring-jdbc.jar 　　这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。 (8) spring-orm.jar 　　这个jar文件包含Spring对DAO特性集进行了扩展，使其支持 iBATIS、JDO、OJB、TopLink，因为Hibernate已经独立成包了，现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 spring-dao.jar里的类，用这个包时你需要同时包含spring- dao.jar包。 (9) spring-remoting.jar 　　这个jar文件包含支持EJB、JMS、远程调用Remoting（RMI、Hessian、Burlap、Http Invoker、JAX-RPC）方面的类。 10) spring-support.jar 　　该组件提供对Cache（ehcache）、JCA、JMX，邮件服务（Java Mail、COS [...]]]></description>
			<content:encoded><![CDATA[<p>spring.jar 是包含有完整发布的单个jar包，spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容，因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试，正式应用系统中是用不得这些类的。<br />
　　除了spring.jar文件，Spring还包括有其它13个独立的jar包，各自包含着对应的Spring组件，用户可以根据自己的需要来选择组合自己的jar包，而不必引入整个spring.jar的所有类文件。<br />
(1) spring-core.jar<br />
这个jar文件包含Spring框架基本的核心工具类，Spring其它组件要都要使用到这个包里的类，是其它组件的基本核心，当然你也可以在自己的应用系统中使用这些工具类。</p>
<p>(2) spring-beans.jar<br />
这个jar文件是所有应用都要用到的，它包含访问配置文件、创建和管理bean以及进行 Inversion of Control / Dependency Injection（IoC/DI）操作相关的所有类。如果应用只需基本的IoC /DI支持，引入spring-core.jar及spring- beans.jar文件就可以了。<br />
(3) spring-aop.jar<br />
这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性，如声明型事务管理（Declarative Transaction Management），也要在应用里包含这个jar包。<br />
(4) spring-context.jar<br />
　　这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类，JDNI所需的全部类，UI方面的用来与模板（Templating）引擎如 Velocity、FreeMarker、JasperReports集成的类，以及校验Validation方面的相关类。<br />
(5) spring-dao.jar<br />
　　这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持，还需在自己的应用里包含spring-aop.jar。<br />
(6) spring-hibernate.jar<br />
　　这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。<br />
(7) spring-jdbc.jar<br />
　　这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。<br />
(8) spring-orm.jar<br />
　　这个jar文件包含Spring对DAO特性集进行了扩展，使其支持 iBATIS、JDO、OJB、TopLink，因为Hibernate已经独立成包了，现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 spring-dao.jar里的类，用这个包时你需要同时包含spring- dao.jar包。<br />
(9) spring-remoting.jar<br />
　　这个jar文件包含支持EJB、JMS、远程调用Remoting（RMI、Hessian、Burlap、Http Invoker、JAX-RPC）方面的类。</p>
<p>10) spring-support.jar<br />
　　该组件提供对Cache（ehcache）、JCA、JMX，邮件服务（Java Mail、COS Mail），计划任务Scheduling（Timer、Quartz）支持的类</p>
<p>(11) spring-web.jar<br />
　　这个jar文件包含Web应用开发时，用到Spring框架时所需的核心类，包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。<br />
(12) spring-webmvc.jar<br />
　　这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、 JasperReports、Tiles、Velocity、 XSLT相关类。当然，如果你的应用使用了独立的MVC框架，则无需这个JAR文件里的任何类。<br />
(13) spring-mock.jar<br />
　　这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类，这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。<br />
　　如何选择这些发布包，决定选用哪些发布包其实相当简单。如果你正在构建Web应用并将全程使用Spring，那么最好就使用单个全部的 spring.jar文件；如果你的应用仅仅用到简单的 Inversion of Control / Dependency Injection（IoC/DI）容器，那么只需spring- core.jar与spring-beans.jar即可；如果你对发布的大小要求很高，那么就得精挑细选了，只取包含自己所需特性的jar文件了。采用独立的发布包你可以避免包含自己的应用不需要的全部类。当然你可以采用其它的一些工具来设法令整个应用包变小，节省空间的重点在于准确地找出自己所需的 Spring依赖类，然后合并所需的类与包就可以了。Eclispe有个插件叫 ClassPath Helper可以帮你找找所依赖的类。</p>
<p>Spring包依赖说明:<br />
1) spring-core.jar需commons-collections.jar，spring-core.jar是以下其它各个的基本。<br />
2) spring-beans.jar需spring-core.jar，cglib-nodep-2.1_3.jar<br />
3) spring-aop.jar需spring-core.jar，spring-beans.jar，cglib-nodep-2.1_3.jar，aopalliance.jar<br />
4) spring-context.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，commons-collections.jar，aopalliance.jar<br />
5) spring-dao.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，spring-context.jar<br />
6) spring-jdbc.jar需spring-core.jar，spring-beans.jar，spring-dao.jar<br />
7) spring-web.jar需spring-core.jar，spring-beans.jar，spring-context.jar<br />
 <img src='http://blog.iqbon.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar<br />
9) spring -hibernate.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，spring- dao.jar，spring-jdbc.jar，spring-orm.jar，spring-web.jar，spring-webmvc.jar<br />
10) spring-orm.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，spring- dao.jar，spring-jdbc.jar，spring-web.jar，spring-webmvc.jar<br />
11) spring -remoting.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，spring- dao.jar，spring-context.jar，spring-web.jar，spring-webmvc.jar<br />
12) spring-support.jar需spring-core.jar，spring-beans.jar，spring-aop.jar，spring-dao.jar，spring-context.jar，spring-jdbc.jar<br />
13) spring-mock.jar需spring-core.jar，spring-beans.jar，spring-dao.jar，spring-context.jar，spring-jdbc.jar</p>
<p>////////////////////////////////////////////////////////////////////////////////////////////<br />
其他jar介绍<br />
antlr: 见struts相关jar包简介</p>
<p>axis: Apache Axis 是Apache WebService项目中的子项目,其最初起源于IBM的&#8221;SOAP4J&#8221;,应该属于最早的一批用于构造基于SOAP应用的Framework。</p>
<p>aopalliance.jar: AOP Alliance(http://aopalliance.sourceforge.net/)是个联合的开源协作组织,在多个项目间进行协作以期提供一套标准的AOP Java接口(interface)。 Spring AOP就是基于AOP Alliance标准API实现的。</p>
<p>c3p0:C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。</p>
<p>cglib_nodep.jar: cglib不包含asm，cglib-nodep包含了asm，而asm是cglib必须的三方类库，出现两个版本的原因恐怕是要避免框架集成时的版本冲突吧。</p>
<p>caucho: Caucho Burlap Burlap是一个轻量级的XML RPC协议.利用Burlap Web服务协议使用Web服务不需要大型的框架也不用学习其它协议。<br />
Hessian Hessian也是一个轻量级的,自定义描述的二进制RPC协议.因为它是一个二进制协议,所以它很适合于发送二进制数据而需要使用其它附件来扩展这个协议.</p>
<p>cos: cos上传组件它是闻名O&#8217;Reilly的图书出版公司开发的。这个上传的组件做得很棒。</p>
<p>commons-attribute-api commons-attribute-compilor :没找到说明，但似乎是必须的，跟commons-attribute是什么关系？</p>
<p>commons-Codec 包含一些通用的编码解码算法。包括一些语音编码器, Hex, Base64, 以及URL encoder.<br />
,通过使用各种模式来映射服务/引用名称和资源名称。</p>
<p>Commons-Discovery 提供工具来定位资源 (包括类) ，通过使用各种模式来映射服务/引用名称和资源名称。<br />
Commons-HttpClient HttpClient作为HTTP客户端组件与服务器进行通讯,同时使用了jdom进行XML数据的解析。</p>
<p>echache 大部分程序都用Echache来缓存</p>
<p>FreeMarker FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。</p>
<p>iText iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用&#8230;使用iText与PDF能够使你正确的控制Servlet的输出。</p>
<p>jaxen是一个用Java开发的XPath 引擎,支持JDOM, dom4j。</p>
<p>JAMon JAMon(Java应用程序监视器)是一个免费的,简单,高性能,线程安全的Java API. 它让开发者可以方便地监控软件</p>
<p>jdo: 但是,EJB中的会话Bean和消息驱动Bean有很多优势,所以JDO规范详细定义了JDO如何与他们进行集成。 JDO:JDO集成了很多&#8230;Query:java.jdo.Query接口用具体的厂商JDO来实现,它负责处理JDO查询语言(JDOQL),这些 JDOQL最终被解释为实际的数据库&#8230;</p>
<p>JExcel jxl:java关于excel的操作</p>
<p>jmx: JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 JMX的前身是JMAPI。</p>
<p>jotm jdo: 但是,EJB中的会话Bean和消息驱动Bean有很多优势,所以JDO规范详细定义了JDO如何与他们进行集成。 JDO:JDO集成了很多&#8230;Query:java.jdo.Query接口用具体的厂商JDO来实现,它负责处理JDO查询语言(JDOQL),这些 JDOQL最终被解释为实际的数据库&#8230;</p>
<p>OJB ObJectRelationalBridge-OJB是基于XML的对象/关系映射工具.OJB提供一些高级的特性如:对象缓存,延迟加载,利用事务隔离级别的结构进行分布式管理,支持悲观与乐观锁.OJB还提供了一个灵活的配置与插件机制以便可以扩展加入自己的功能.</p>
<p>oro Jakarta ORO一套文本处理工具,能提供perl5.0兼容的正则表达式,AWK-like正则表达式, glob表达式。还提供替换,分割&#8230;</p>
<p>poi Jakarta POI可以让你使用Java来读写MS Excel ,Word文件</p>
<p>Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。</p>
<p>Toplink是业界领先的企业级商业ORM平台,早些年被Oracle收购。</p>
<p>Velocity是一个基于java的模板引擎（template engine）。它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。<br />
当 Velocity应用于web开发时，界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点，也就是说，页面设计人员可以只关注页面的显示效果，而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来，这样为web站点的长期维护提供了便利，同时也为我们在JSP和PHP之外又提供了一种可选的方案。</p>
<p>XDoclet可以通过你在java源代码中的一些特殊的注释信息，自动为你生成配置文件、源代码等等，例如web、ejb的部署描述文件、为你生成struts的struts-config.xml配置文件、javascript校验等。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/299.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spring依赖的jar包简介</title>
		<link>http://blog.iqbon.com/doc/297.html</link>
		<comments>http://blog.iqbon.com/doc/297.html#comments</comments>
		<pubDate>Sun, 16 Oct 2011 04:31:12 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=297</guid>
		<description><![CDATA[Spring的依赖关系 ant ant.jar, ant-junit.jar, ant-launcher.jar Spring采用Apache Ant作为其构建工具，还用来完成大量其它任务如文档生成和测试执行等。运行时Ant根本不起作用，因此发布应用时无需包含该JAR文件。 aopalliance aopalliance.jar AOP Alliance(http://aopalliance.sourceforge.net/)是个联合的开源协作组织，在多个项目间进行协作以期提供一套标准的AOP Java接口（interface）。 Spring AOP就是基于AOP Alliance标准API实现的。如果你打算使用Spring的AOP或基于AOP的任何特性，只需这个JAR文件。 axis axis.jar, saaj.jar, wsdl4j.jar Spring采用Apache Axis项目来支持Spring远程调用里的JAXRPC功能。如果使用JAXRPC Remoting，那么只需要这些文件。 caucho burlap-2.1.12.jar, hessian-2.1.12.jar Spring远程调用（remoting）对大量不同种类的协议包括Caucho的Burlap和Hessian提供了支持。要用哪个协议就包含这个分组里相应的JAR文件。 cglib cglib-full-2.0.2.jar CGLIB用来生成动态代理类（dynamic proxy classes），供核心DI和AOP实现之用。由于大量Spring功能的实现都要用到CGLIB，因此你的应用几乎总需包含CGLIB。 cos cos.jar COS代表com.oreilly.servlet，是个实用类的集合，对Servlets和基于web的应用很有用。Spring在两个地方要用到COS：文件上传处理和e-mail发送。不过在这两种情形中，COS都只是实现选择之一，因此只有选用COS而非其它实现方法时，才需包含cos.jar。 dom4j dom4j.jar 使用Hibernate时dom4j不可或缺，因此如果你的应用打算采用Hibernate实现ORM，就需要包含这个JAR文件。 easymock easymock.jar, easymockclassextension.jar Spring的测试套件用到了EasyMock，因此只有构建和运行测试套件时才用到这个JAR，无需随你的应用一起发布。 freemarker freemaker.jar Spring提供了FreeMarker模板引擎的包装类，还为把FreeMarker模板用作web应用的视图提供了支持。只要使用FreeMarker，就需要这个JAR文件。 hibernate ehcache.jar, hibernate2.jar, odmg.jar 如果采用Spring的Hibernate集成和支持类，这些JAR文件不可或缺。如果使用其它ORM工具如iBATIS，则不需要这些JAR文件。如果使用Hibernate，则你的应用还要包含CGLIB JAR文件。 hsqldb hsqldb.jar Spring的示例应用使用了hsqldb.jar文件。 ibatis ibatis-common.jar [...]]]></description>
			<content:encoded><![CDATA[<p>Spring的依赖关系</p>
<p>ant</p>
<p>ant.jar, ant-junit.jar, ant-launcher.jar</p>
<p>Spring采用Apache Ant作为其构建工具，还用来完成大量其它任务如文档生成和测试执行等。运行时Ant根本不起作用，因此发布应用时无需包含该JAR文件。<br />
aopalliance</p>
<p>aopalliance.jar</p>
<p>AOP Alliance(http://aopalliance.sourceforge.net/)是个联合的开源协作组织，在多个项目间进行协作以期提供一套标准的AOP Java接口（interface）。 Spring AOP就是基于AOP Alliance标准API实现的。如果你打算使用Spring的AOP或基于AOP的任何特性，只需这个JAR文件。<br />
axis</p>
<p>axis.jar, saaj.jar, wsdl4j.jar</p>
<p>Spring采用Apache Axis项目来支持Spring远程调用里的JAXRPC功能。如果使用JAXRPC Remoting，那么只需要这些文件。<br />
caucho</p>
<p>burlap-2.1.12.jar, hessian-2.1.12.jar</p>
<p>Spring远程调用（remoting）对大量不同种类的协议包括Caucho的Burlap和Hessian提供了支持。要用哪个协议就包含这个分组里相应的JAR文件。<br />
cglib</p>
<p>cglib-full-2.0.2.jar</p>
<p>CGLIB用来生成动态代理类（dynamic proxy classes），供核心DI和AOP实现之用。由于大量Spring功能的实现都要用到CGLIB，因此你的应用几乎总需包含CGLIB。<br />
cos</p>
<p>cos.jar</p>
<p>COS代表com.oreilly.servlet，是个实用类的集合，对Servlets和基于web的应用很有用。Spring在两个地方要用到COS：文件上传处理和e-mail发送。不过在这两种情形中，COS都只是实现选择之一，因此只有选用COS而非其它实现方法时，才需包含cos.jar。<br />
dom4j</p>
<p>dom4j.jar</p>
<p>使用Hibernate时dom4j不可或缺，因此如果你的应用打算采用Hibernate实现ORM，就需要包含这个JAR文件。<br />
easymock</p>
<p>easymock.jar, easymockclassextension.jar</p>
<p>Spring的测试套件用到了EasyMock，因此只有构建和运行测试套件时才用到这个JAR，无需随你的应用一起发布。<br />
freemarker</p>
<p>freemaker.jar</p>
<p>Spring提供了FreeMarker模板引擎的包装类，还为把FreeMarker模板用作web应用的视图提供了支持。只要使用FreeMarker，就需要这个JAR文件。<br />
hibernate</p>
<p>ehcache.jar, hibernate2.jar, odmg.jar</p>
<p>如果采用Spring的Hibernate集成和支持类，这些JAR文件不可或缺。如果使用其它ORM工具如iBATIS，则不需要这些JAR文件。如果使用Hibernate，则你的应用还要包含CGLIB JAR文件。<br />
hsqldb</p>
<p>hsqldb.jar</p>
<p>Spring的示例应用使用了hsqldb.jar文件。<br />
ibatis</p>
<p>ibatis-common.jar , ibatis-sqlmap.jar, ibatis-sqlmap-2.jar</p>
<p>使用Spring的iBATIS集成类时，这些文件不可或缺；如果使用JDBC或其它ORM工具如Hibernate或JDO，则你的应用不需要这些文件。<br />
itext</p>
<p>itext-1.02b.jar</p>
<p>Spring使用iText提供web层的PDF支持。只有你的web应用需要生成PDF输出时才需包含这个JAR文件。<br />
j2ee</p>
<p>activation.jar, connector-api.jar, ejb.jar, jaxrpc.jar, jdbc2_0-stdext.jar, jms.jar, jstl.jar, jta.jar, mail.jar, servlet.jar, xml-apis.jar</p>
<p>如左侧所示，J2EE 相关的各种不同JAR文件数量相当可观。如果你想要使用Spring邮件支持的JavaMail实现，则需要activation.jar和 mail.jar文件。要让Hibernate使用JCA Connector则需connector-api.jar，使用Spring的EJB支持则需要ejb.jar，jms.jar用于Spring的 JMS支持。对于web应用，如果想要使用Spring JSTL支持则需要servlet.jar和jstl.jar。Spring远程调用里的JAXRPC支持需要jaxrpc.jar文件，jta.jar 用于JTA事务支持。剩下两个JAR文件jdbc2_0-stdext.jar和xml-apis.jar分别用于JDBC和XML配置支持，不过只有你使用1.3版本的JVM时才需要它们。<br />
jakarta</p>
<p>jakarta-commons commons-attributes-api.jar, commons-attributes-compiler.jar, commons-beanutils.jar, commons-collections.jar, commons-dbcp.jar, commons-digester.jar, commons-discovery.jar, commons-fileupload.jar, commons-lang.jar, commons-logging.jar, commons-pool.jar, commons- validator.jar</p>
<p>Spring使用了来自Jakarta Commons项目的大量组件。如果你想在应用中使用源码级元数据（metadata），就需要commons-attributes-api.jar，此外还需要commons-attributes-compiler.jar，以便将attributes编译到应用里。Struts要用到 BeanUtils、Collections、Digester、Discovery,和Validator JAR文件，其中的Collections，Hibernate也会用到。使用DBCP连接池时，Spring JDBC支持要用到DBCP，Pooling则对有些示例应用不可或缺。如果想使用相应的Spring包装类来处理web应用的文件上传，则需要 FileUpload。最后，Spring处处用到了Logging，因此需在所有基于Spring的应用里包含这个JAR文件。<br />
jakarta-taglibs</p>
<p>standard.jar</p>
<p>这是Jakarta的JSTL实现，一些Spring示例应用使用了这个实现。<br />
jboss</p>
<p>jboss-common-jdbc-wrapper.jar</p>
<p>运行在JBoss应用服务器上的应用使用Spring的JDBC类时，这个JAR文件不可或缺。<br />
jdo</p>
<p>jdo.jar</p>
<p>提供Spring的JDO支持。<br />
jdom</p>
<p>jdom.jar</p>
<p>在Spring里使用iBATIS 1.3时，JDOM不可或缺。本章介绍的iBATIS版本为2.0。<br />
jotm</p>
<p>jotm.jar, xapool.jar</p>
<p>如果你打算配合Spring事务抽象层一起使用JOTM，jotm.jar文件不可或缺。如果打算在自己的应用里将XAPool用于连接池（connection pooling），则只需xapool.jar。<br />
junit</p>
<p>junit.jar</p>
<p>运行时根本不需要JUnit；它只用来构建和运行测试套件。<br />
log4j</p>
<p>log4j-1.2.8.jar</p>
<p>如果想要使用Spring配置log4j日志记录，这个文件不可或缺。<br />
poi</p>
<p>poi-2.5.jar</p>
<p>这个JAR可令Spring MVC框架支持Microsoft Excel输出。<br />
quartz</p>
<p>quartz.jar</p>
<p>Spring基于Quartz的调度支持需要该JAR。<br />
regexp</p>
<p>Jakarta-oro-2.0.7.jar</p>
<p>使用正则表达式来指定AOP的切入点（pointcut）时需要这个JAR。第六章有更详细的介绍。<br />
struts</p>
<p>struts.jar</p>
<p>欲配合Spring使用Struts构建web应用，Struts JAR必不可少。<br />
velocity</p>
<p>velocity-1.4.jar, velocity-tools-generic-1.1.jar</p>
<p>Spring提供了Velocity的包装类使其支持DI，同时当你在应用中使用Velocity时，还可减少需要编写的代码量。除此之外，Spring还提供了一些类，支持将Velocity用作web层里的视图提供者（view provider）。只要使用了上述任意特性，都需在发布里包含Velocity JAR文件。<br />
xdoclet</p>
<p>xjavadoc-1.0.jar</p>
<p>Commons Attributes用这个JAR解析源代码文件，然后提取属性信息。如果使用了Spring Commons Attributes支持，须包含该JAR文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/297.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB2获取CHAR字段数据的数据长度方法</title>
		<link>http://blog.iqbon.com/doc/294.html</link>
		<comments>http://blog.iqbon.com/doc/294.html#comments</comments>
		<pubDate>Thu, 13 Oct 2011 14:50:59 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[DB2]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=294</guid>
		<description><![CDATA[数据库中字段ORGAN_NO为CHAR(6) 列名称 类型模式 类型名称 长度 小数位 NULL &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8211; &#8212;&#8212; ORGAN_NO SYSIBM CHARACTER 6 0 是 值内容 ORGAN_NO = &#8217;001&#8242; 在DB2中如果用 select length(ORGAN_NO) from table 结果为 6 因为字段定义为定长的char类型，虽然值是&#8217;001&#8242;，但是实际上是会补齐后面的。所以要去掉后面的空格 select length(trim(ORGAN_NO)) from table 结果为 3]]></description>
			<content:encoded><![CDATA[<p>数据库中字段ORGAN_NO为CHAR(6)</p>
<p>列名称                             类型模式      类型名称     长度    小数位    NULL<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8211; &#8212;&#8212;</p>
<p>ORGAN_NO                       SYSIBM    CHARACTER       6     0         是</p>
<p>值内容 ORGAN_NO = &#8217;001&#8242;</p>
<p>在DB2中如果用</p>
<p>select length(ORGAN_NO) from    table   </p>
<p>结果为 6</p>
<p>因为字段定义为定长的char类型，虽然值是&#8217;001&#8242;，但是实际上是会补齐后面的。所以要去掉后面的空格</p>
<p>select length(trim(ORGAN_NO))    from table</p>
<p>结果为 3</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/294.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用的敏捷测试工具</title>
		<link>http://blog.iqbon.com/doc/292.html</link>
		<comments>http://blog.iqbon.com/doc/292.html#comments</comments>
		<pubDate>Fri, 23 Sep 2011 12:13:02 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=292</guid>
		<description><![CDATA[* 单元测试工具：TestNG、xUnit家族（如JUnit、NUnit）、JMock、BizMock等。 * 功能测试自动化：ThoughtWorks Twist。 * Web功能测试（frontend）：Selenium IDE/RC、WatiR、WatiN。 * Web service测试工具（backend）：soapUI。 * 性能测试：JMeter+BadBoy。 * 验收测试框架：Fitnesse、Tellurium。 * 敏捷测试过程管理工具：微软的Visual Studio 2010，包括TFS 2010、Scrum模板（MS VS Scrum 1.0）、Test Manager 2010、Coded UI Test等。 * 业务智能（BI）应用的测试框架：Oraylis BI.Quality （+ NUnit）。 * 其他一些协作工具等，如TestLink、BugZilla、BugFree、Wiki等。]]></description>
			<content:encoded><![CDATA[<p>    * 单元测试工具：TestNG、xUnit家族（如JUnit、NUnit）、JMock、BizMock等。<br />
    * 功能测试自动化：ThoughtWorks Twist。<br />
    * Web功能测试（frontend）：Selenium IDE/RC、WatiR、WatiN。<br />
    * Web service测试工具（backend）：soapUI。<br />
    * 性能测试：JMeter+BadBoy。<br />
    * 验收测试框架：Fitnesse、Tellurium。<br />
    * 敏捷测试过程管理工具：微软的Visual Studio 2010，包括TFS 2010、Scrum模板（MS VS Scrum 1.0）、Test Manager 2010、Coded UI Test等。<br />
    * 业务智能（BI）应用的测试框架：Oraylis BI.Quality （+ NUnit）。<br />
    * 其他一些协作工具等，如TestLink、BugZilla、BugFree、Wiki等。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/292.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用python实现查询移动手机余额话费</title>
		<link>http://blog.iqbon.com/doc/287.html</link>
		<comments>http://blog.iqbon.com/doc/287.html#comments</comments>
		<pubDate>Fri, 02 Sep 2011 15:32:02 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=287</guid>
		<description><![CDATA[用python实现查询移动手机余额话费的代码 001 #!/usr/bin/env python 002 #encoding=utf-8 003 004 import Image 005 import sys 006 import urllib, urllib2, cookielib 007 import cmd 008 import re 009 import StringIO 010 011 class Mobile(cmd.Cmd): 012 013 def __init__(self): 014 cmd.Cmd.__init__(self) 015 self.intro= &#8220;&#8221;" 016 请输入 help 查看帮助 017 &#8220;&#8221;" 018 self.prompt = &#8220;Yidong> &#8221; 019 self.form = { [...]]]></description>
			<content:encoded><![CDATA[<p>用python实现查询移动手机余额话费的代码<br />
001	#!/usr/bin/env python<br />
002	#encoding=utf-8<br />
003<br />
004	import Image<br />
005	import sys<br />
006	import urllib, urllib2, cookielib<br />
007	import cmd<br />
008	import re<br />
009	import StringIO<br />
010<br />
011	class Mobile(cmd.Cmd):<br />
012<br />
013	    def __init__(self):<br />
014	        cmd.Cmd.__init__(self)<br />
015	        self.intro= &#8220;&#8221;"<br />
016	        请输入 help 查看帮助<br />
017	        &#8220;&#8221;"<br />
018	        self.prompt = &#8220;Yidong> &#8221;<br />
019	        self.form = {<br />
020	            &#8216;submitMode&#8217;:&#8217;2&#8242;,<br />
021	            &#8216;ErrorUrl&#8217;:&#8217;../briefLogon.do&#8217;,<br />
022	            &#8216;ReturnURL&#8217;:'www.sd.10086.cn/newecare/common/prior.jsp&#8217;,<br />
023	            &#8216;FieldID&#8217;:&#8217;1&#8242;,<br />
024	            &#8216;entrance&#8217;:'IndexBrief&#8217;,<br />
025	            &#8216;mobileNum&#8217;:&#8221;,<br />
026	            &#8216;logonMode&#8217;:&#8217;1&#8242;,<br />
027	            &#8216;servicePWD&#8217;:&#8221;,<br />
028	            &#8216;randCode&#8217;:&#8221;,<br />
029	            &#8216;smsRandomCode&#8217;:&#8221;<br />
030	        }<br />
031	        self.formAction = &#8216;http://www.sd.10086.cn//portal/servlet/LoginServlet&#8217;<br />
032	        self.mobilePage = &#8216;http://www.sd.10086.cn/newecare/common/prior.jsp&#8217;<br />
033	        cookie = cookielib.CookieJar()<br />
034	        cookie.clear()<br />
035	        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))<br />
036	        opener.addheaders = [<br />
037	            ('User-agent',  'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91 Safari/534.30'),<br />
038	            ('Referer',  'http://www.sd.10086.cn/portal/briefLogon.do'),<br />
039	            ('Accept-Language',  'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'),<br />
040	            ('Accept-Encoding',  'gzip, deflate'),<br />
041	            ('Host',  'www.sd.10086.cn'),<br />
042	        ]<br />
043	        urllib2.install_opener(opener)<br />
044<br />
045	    def _getCode(self):<br />
046	        urlImg = &#8216;http://sd.10086.cn/portal/sms/briefValidateCode.jsp&#8217;<br />
047	        imgs = (<br />
048	            (0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,),<br />
049	            (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,),<br />
050	            (0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,),<br />
051	            (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,),<br />
052	            (0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,),<br />
053	            (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,),<br />
054	            (0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,),<br />
055	            (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,),<br />
056	            (0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,),<br />
057	            (0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,)<br />
058	        )<br />
059	        fp = StringIO.StringIO(urllib2.urlopen(urllib2.Request(urlImg)).read())<br />
060	        im = Image.open(fp)<br />
061	        im = im.crop((8,5,52,20))<br />
062	        code=&#8221;<br />
063	        for i in range(4):<br />
064	            im_new = im.crop((11*i,0,11*(i+1),15))<br />
065	            width, height = im_new.size<br />
066	            l = []<br />
067	            for i in range(width):<br />
068	                for j in range(height):<br />
069	                    c1, c2, c3 = im_new.getpixel((i, j))<br />
070	                    if (c1 < 40) and  (c2 < 40) and (c2 < 40) :<br />
071	                        l.append(1)<br />
072	                    else:<br />
073	                        l.append(0)<br />
074	            n=0<br />
075	            for img in imgs:<br />
076	                same=0<br />
077	                for i in range(165):<br />
078	                    if img[i] == l[i]:<br />
079	                        same += 1<br />
080	                if same > 150:<br />
081	                    code += str(n)<br />
082	                    break<br />
083	                n += 1<br />
084	        return code<br />
085<br />
086	    def do_ye(self, info):<br />
087	        &#8221;&#8217;<br />
088	        查询话费： Yidong>ye 手机号码 服务密码<br />
089	        Yidong> ye 15153006103 888888<br />
090	        &#8221;&#8217;<br />
091<br />
092	        arg = info.split(&#8216; &#8216;)<br />
093	        if len(arg) <> 2:<br />
094	            print &#8216;error 89!&#8217;<br />
095	            return 0<br />
096<br />
097	        print &#8216;waiting &#8230; &#8216;,<br />
098	        sys.stdout.flush()<br />
099<br />
100	        self.form['mobileNum']  = arg[0]<br />
101	        self.form['servicePWD'] = arg[1]<br />
102	        self.form['randCode']   = self._getCode()<br />
103	        req = urllib2.Request(self.formAction, urllib.urlencode(self.form))<br />
104	        doc = urllib2.urlopen(req).read()<br />
105	        reU = re.compile(&#8216;(www.sd.10086.cn/newecare/common/prior.jsp;ssojsessionid=\S+)&#8221;&#8216;, re.S)<br />
106	        result = reU.findall(doc)<br />
107	        try:<br />
108	            doc = urllib2.urlopen(urllib2.Request(&#8216;http://&#8217;+result[0])).read()<br />
109	            doc = urllib2.urlopen(urllib2.Request(&#8216;http://www.sd.10086.cn/portal/servlet/CookieServlet?FieldID=2&#8242;)).read()<br />
110	        except:<br />
111	            print &#8216;error: 98!&#8217;<br />
112	            return 0<br />
113	        reA = re.compile(&#8220;&#8216;(\S+)&#8217;&#8221;, re.S)<br />
114	        result = reA.findall(doc)<br />
115	        url = &#8216;http://www.sd.10086.cn/newecare/loginAttritd.do?Attritd=%s&#038;randnum=6010.6788671377135&#038;menuID=null&#8217; % (result[0])<br />
116	        urllib2.urlopen(urllib2.Request(url))<br />
117<br />
118	        doc = urllib2.urlopen(urllib2.Request(&#8216;http://www.sd.10086.cn/newecare/loginSuccess.jsp&#8217;)).read()<br />
119	        reYE = re.compile(&#8220;您的余额：(\S+)元&#8221;, re.S)<br />
120	        result = reYE.findall(doc)<br />
121	        try:<br />
122	            print result[0]+&#8221;元&#8221;<br />
123	        except:<br />
124	            print &#8216;error: 109!&#8217;<br />
125<br />
126	def main():<br />
127	    mobile = Mobile()<br />
128	    try:<br />
129	        mobile.cmdloop()<br />
130	    except KeyboardInterrupt:<br />
131	        print &#8220;bye&#8221;<br />
132<br />
133	if __name__ == &#8220;__main__&#8221;:<br />
134	    main()</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/287.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>用python实现股市信息下载</title>
		<link>http://blog.iqbon.com/doc/285.html</link>
		<comments>http://blog.iqbon.com/doc/285.html#comments</comments>
		<pubDate>Wed, 17 Aug 2011 14:40:49 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=285</guid>
		<description><![CDATA[用python实现的一段股市信息下载的代码 import urllib def getURL(url): socket = urllib.urlopen(url) readSocket = socket.read() socket.close() return readSocket def printInfo(listInfo): print &#8220;Stock Symbol: &#8221; , listInfo[0] print &#8220;Last Trade Price: &#8221; , listInfo[1] print &#8220;Last Trade Date: &#8221; , listInfo[2] print &#8220;Last Trade Time: &#8221; , listInfo[3] print &#8220;Change: &#8221; , listInfo[4] print &#8220;Open: &#8221; , listInfo[5] print &#8220;Day&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>用python实现的一段股市信息下载的代码</p>
<p>import urllib</p>
<p>def getURL(url):</p>
<p>socket = urllib.urlopen(url)</p>
<p>readSocket = socket.read()</p>
<p>socket.close()</p>
<p>return readSocket</p>
<p>def printInfo(listInfo):</p>
<p>print &#8220;Stock Symbol: &#8221; , listInfo[0]</p>
<p>print &#8220;Last Trade Price: &#8221; , listInfo[1]</p>
<p>print &#8220;Last Trade Date: &#8221; , listInfo[2]</p>
<p>print &#8220;Last Trade Time: &#8221; , listInfo[3]</p>
<p>print &#8220;Change: &#8221; , listInfo[4]</p>
<p>print &#8220;Open: &#8221; , listInfo[5]</p>
<p>print &#8220;Day&#8217;s High: &#8221; , listInfo[6]</p>
<p>print &#8220;Day&#8217;s Low: &#8221; , listInfo[7]</p>
<p>print &#8220;Volume: &#8221; , listInfo[8]</p>
<p>stockSymbol = raw_input(&#8220;Enter the stock symbol: &#8220;)</p>
<p>stockURL = &#8220;http://download.finance.yahoo.com/d/quotes.csv?s=%s&amp;f=sl1d1t1c1ohgv&amp;e=.csv&#8221; % stockSymbol</p>
<p>stockInfoStr = getURL(stockURL)</p>
<p>stockInfoStr = stockInfoStr.rstrip()</p>
<p>stockInfoStr = stockInfoStr.split(&#8220;,&#8221;)</p>
<p>printInfo(stockInfoStr)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/285.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>DB2在sql中实现分页</title>
		<link>http://blog.iqbon.com/doc/282.html</link>
		<comments>http://blog.iqbon.com/doc/282.html#comments</comments>
		<pubDate>Sun, 14 Aug 2011 15:50:46 +0000</pubDate>
		<dc:creator>zlliang</dc:creator>
				<category><![CDATA[DB2]]></category>

		<guid isPermaLink="false">http://blog.iqbon.com/?p=282</guid>
		<description><![CDATA[SELECT FUTTYP FROM ( SELECT FUTTYP, ROWNUMBER() OVER( ORDER by FUTTYP asc) AS RN FROM .SM_INTERFACE_CFG_TB WHERE (I_FUCTYP = &#8221; OR FUTTYP=I_FUCTYP)) AS A1 WHERE A1.RN BETWEEN I_BEGIN AND I_END;]]></description>
			<content:encoded><![CDATA[<p>SELECT FUTTYP FROM (<br />
SELECT FUTTYP, ROWNUMBER()   OVER( ORDER by FUTTYP asc)<br />
AS RN FROM .SM_INTERFACE_CFG_TB WHERE (I_FUCTYP = &#8221; OR FUTTYP=I_FUCTYP)) AS A1<br />
WHERE A1.RN BETWEEN I_BEGIN AND I_END;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iqbon.com/doc/282.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

