﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Jhonney的专栏</title><link>http://www.blogjava.net/Jhonney/</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;----人见人爱</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 14:26:50 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 14:26:50 GMT</pubDate><ttl>60</ttl><item><title>ORACLE 关连更新 update select</title><link>http://www.blogjava.net/Jhonney/archive/2010/06/25/324503.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Fri, 25 Jun 2010 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2010/06/25/324503.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/324503.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2010/06/25/324503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/324503.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/324503.html</trackback:ping><description><![CDATA[<p>$ sqlplus user/pass </p>
<p>SQL*Plus: Release 9.2.0.6.0 - Production on Wed Aug 2 17:38:39 2006 </p>
<p>Copyright (c) 1982, 2002, Oracle Corporation.&nbsp; All rights reserved. </p>
<p><br />
Connected to:<br />
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.6.0 - Production </p>
<p>SQL&gt; select * from wwm2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --要更新的表 </p>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ww'jj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
llll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1111<br />
dddd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
dsafdf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
3435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
dsafdf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
3435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222</div>
<div><br />
SQL&gt; select * from wwm5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --更新的条件表</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9984</div>
<div>SQL&gt; select wwm2.* from wwm2,wwm5 where wwm2.id=wwm5.id<br />
&nbsp; 2&nbsp; /</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ww'jj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
dsafdf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
3435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
dsafdf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
3435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111</div>
<div>8 rows selected.</div>
<div>所以,每次需要更新8条数据就是正确的.</div>
<div>相信程序员是通过以下类似的SQL更新的,这是错误的,因为没有加WHERE<br />
SQL&gt;&nbsp; update wwm2 set wwm2.town=(select wwm5.town from wwm5 where wwm5.id=wwm2.id)<br />
&nbsp; 2&nbsp; /</div>
<div>13 rows updated.</div>
<div>SQL&gt; select * from wwm2;</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1111<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
13 rows selected.</div>
<div>可以看到13条记录被更新,符合条件的更新正确,不符合条件的也更新为NULL.以下是正确的方法</div>
<div>方法一:<br />
SQL&gt; update wwm2<br />
&nbsp; 2&nbsp; set town=(select town from wwm5 where wwm5.id=wwm2.id)<br />
&nbsp; 3&nbsp; where id=(select wwm5.id from wwm5 where wwm5.id=wwm2.id)<br />
&nbsp; 4&nbsp; /</div>
<div>8 rows updated.</div>
<div>方法二:&nbsp;&nbsp;&nbsp; 与方法一道理相同,这里需要掌握EXIST的相关用法.<br />
SQL&gt; update wwm2<br />
&nbsp;&nbsp; set town=(select town from wwm5 where wwm5.id=wwm2.id)<br />
&nbsp;&nbsp; where exists (select 1 from wwm5 where wwm5.id=wwm2.id)<br />
8 rows updated.</div>
<div>方法三:<br />
SQL&gt; update (select a.town atown,a.id aid,b.town btown,b.id bid from wwm2 a,wwm5 b where a.id=b.id)<br />
&nbsp; 2&nbsp; set atown=btown<br />
&nbsp; 3&nbsp; /<br />
set atown=btown<br />
&nbsp;&nbsp;&nbsp; *<br />
ERROR at line 2:<br />
ORA-01779: cannot modify a column which maps to a non key-preserved table</div>
<div>&nbsp; 1* alter table wwm5 add primary key (id)<br />
SQL&gt; /</div>
<div>Table altered.</div>
<div>&nbsp; 1&nbsp; update (select a.town atown,a.id aid,b.town btown,b.id bid from wwm2 a,wwm5 b where a.id=b.id)<br />
&nbsp; 2*&nbsp; set atown=btown<br />
SQL&gt; /</div>
<div>8 rows updated.</div>
<div>这种方法的局限性就是需要PRIMARY 的支持.</div>
<div>方法四:<br />
&nbsp; 1&nbsp; declare<br />
&nbsp; 2&nbsp; cursor cur_wwm is select town,id from wwm5;<br />
&nbsp; 3&nbsp; begin<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; for my_wwm in cur_wwm loop<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; update wwm2 set town=my_wwm.town<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; where id=my_wwm.id;<br />
&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp; end loop;<br />
&nbsp; 8* end;<br />
SQL&gt; /</div>
<div>PL/SQL procedure successfully completed.</div>
<div>SQL&gt; select * from wwm2;</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
llll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1111<br />
dddd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222</div>
<div>这个方法是最灵活的了.</div>
<div>方法五:</div>
<div>注意,方法五只能适用于WWM5是WWM2的子集的时候.<br />
&nbsp; 1&nbsp;&nbsp; merge into wwm2<br />
&nbsp; 2&nbsp;&nbsp; using (select town,id from wwm5) b<br />
&nbsp; 3&nbsp;&nbsp; on (wwm2.id=b.id)<br />
&nbsp; 4&nbsp;&nbsp; when matched then update set town=b.town<br />
&nbsp; 5* when not matched then insert (town,id) values (null,null)<br />
SQL&gt; /</div>
<div>9 rows merged.</div>
<div>SQL&gt; select * from wwm2;</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---注意这个地方,被插入了一个空值.因为WWM5的ID=9984在WWM2中不能匹配,根本原因是ORACLE9必须有WHEN NOT MATCHED子句,但是ORACLE10可以不许要,也就是ORACLE10可以不写WHEN NOT MATCHED ,就不必插入NULL值了,为解决这个问题,下一步会DELETE WWM5的ID=9984,这样一来就不会执行WHEN NOT MATCHED<br />
222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
llll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1111<br />
dddd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2222<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222</div>
<div>TOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID<br />
-------------------- ----------<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
lllldf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111<br />
ljjjjj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222</div>
<div>14 rows selected.</div>
<div>SQL&gt; delete from wwm5 where id=9984;</div>
<div>1 row deleted.</div>
<div>SQL&gt;&nbsp; 1&nbsp;&nbsp; merge into wwm2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
SQL&gt;&nbsp;&nbsp; 2&nbsp;&nbsp; using (select town,id from wwm5) b<br />
SQL&gt;&nbsp;&nbsp; 3&nbsp;&nbsp; on (wwm2.id=b.id)<br />
SQL&gt;&nbsp;&nbsp; 4&nbsp;&nbsp; when matched then update set town=b.town<br />
SQL&gt;&nbsp;&nbsp; 5* when not matched then insert (town,id) values (null,null)<br />
SQL&gt; /</div>
<div>8 rows merged.</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上就是5种关连更新的例子了,希望能给开发人员解惑.</div>
<div>&nbsp;</div>
<div><strong>说明：如果select 子句可以返回多行记录，但返回适合where条件的记录只能是唯一的，否则将会报返回单行的select子句返回多行的错误，因为update只能跟据此处的where子句（内层where)进行相应记录的匹配更新，一次只能是一条。</strong></div>
<img src ="http://www.blogjava.net/Jhonney/aggbug/324503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2010-06-25 19:30 <a href="http://www.blogjava.net/Jhonney/archive/2010/06/25/324503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】自己写的一个分页程序</title><link>http://www.blogjava.net/Jhonney/archive/2008/04/26/196108.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Fri, 25 Apr 2008 16:48:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2008/04/26/196108.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/196108.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2008/04/26/196108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/196108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/196108.html</trackback:ping><description><![CDATA[<p>年初时帮朋友写了分页程序，主要由于考虑到他的应用数据量很大<br />
程序元旦时已完成，也懒得发出来<br />
大体思想：分页的核心思想采用Iterator模式，每次从数据库中取定量的数据块<br />
其中block和pageCount是两个不同的概念，block是块，规定了从数据库中获取的数量<br />
pageCount为表现层每页显示的数量<br />
另外参数中还包含缓存的时间的设置<br />
程序分核心jar包和测试包，测试包以SPring为基础框架<br />
http://www.chinadforce.com/viewthread.php?tid=878261&amp;extra=page%3D4<br />
</p>
<img src ="http://www.blogjava.net/Jhonney/aggbug/196108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2008-04-26 00:48 <a href="http://www.blogjava.net/Jhonney/archive/2008/04/26/196108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>classloader总结</title><link>http://www.blogjava.net/Jhonney/archive/2008/04/04/190798.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Fri, 04 Apr 2008 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2008/04/04/190798.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/190798.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2008/04/04/190798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/190798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/190798.html</trackback:ping><description><![CDATA[项目时需要对外提供一些服务接口，写了接口及其实现发现报castClassException，当时newInstance时采用<br />
Thread.currentContext.getClassLoader的形式，分析了一下发现平台采用了自己的classloader<br />
<br />
1.java的classloader采用双亲委托的机制<br />
2.当前类加载器和线程上下文的区别是，当前类加载器在加载caller类时已经确定，但thread's context classloader is modifiable<br />
3.thread's classloader can break through the parent delegation mechanism of classloader<br />
4.it is should keep the thread's classloader same as current class classloader<br />
5.the default form of class.forname isn't recommend,because of exception of initializing static field if the classloader is not<br />
destroied<br />
6.banq comment about adoption thread's&nbsp; classloader is not correctly<br />
<br />
<img src ="http://www.blogjava.net/Jhonney/aggbug/190798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2008-04-04 16:45 <a href="http://www.blogjava.net/Jhonney/archive/2008/04/04/190798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>走出ClassLoader迷宫</title><link>http://www.blogjava.net/Jhonney/archive/2008/03/23/187966.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sat, 22 Mar 2008 18:57:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2008/03/23/187966.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/187966.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2008/03/23/187966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/187966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/187966.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体;">quto:http://www.blogjava.net/lihuaxajh/articles/94371.html<br />
other resources:<br />
&nbsp;&nbsp;&nbsp; 1.http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html?page=1<br />
&nbsp;&nbsp;&nbsp; 2.http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html?page=2&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp; 3.http://www.javaworld.com/javaworld/javaqa/2003-03/01-qa-0314-forname.html<br />
&nbsp;&nbsp;&nbsp; 4.http://www.theserverside.com/news/thread.tss?thread_id=40763<br />
&nbsp;&nbsp;&nbsp; 5.http://www.matrix.org.cn/resource/article/43/43875_Class_Loading.html<br />
&nbsp;&nbsp;&nbsp; 6.http://blog.sina.com.cn/s/blog_4b6047bc0100096v.html<br />
&nbsp;&nbsp;&nbsp; 7.http://blog.sina.com.cn/s/blog_4b6047bc0100097p.html<br />
这个问题经常出现在编写框架代码</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">需要动态加载很多类和资源的时候</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">通常当你需要动态加载资源的时候</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">你至少有三个</span>
<span lang="EN-US">ClassLoader</span>
<span style="font-family: 宋体;">可以选择</span>
<span lang="EN-US">: </span>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
</p>
<ol>
    <li><span style="font-family: Wingdings;" lang="EN-US">
    <span><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">系统类加载器或叫作应用类加载器</span>
    <span style="font-family: Wingdings;" lang="EN-US">(system classloader or application classloader)</span></li>
    <li><span style="font-family: Wingdings;" lang="EN-US"><span><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;</span></span></span><span style="font-family: 宋体;">当前类加载器</span><span style="font-family: Wingdings;" lang="EN-US"></span></li>
    <li><span style="font-family: Wingdings;" lang="EN-US"><span><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;</span></span></span><span style="font-family: 宋体;">当前线程类加载器</span></li>
</ol>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;">上面的问题指的是最后一种类加载器</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">哪种类加载器是正确的选择呢</span>
<span lang="EN-US">?</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%;">
<span style="font-family: 宋体;">第一种选择可以很容易地排除</span>
<span lang="EN-US">: </span>
<span style="font-family: 宋体;">系统类加载器</span>
<span lang="EN-US">(system classloader). </span>
<span style="font-family: 宋体;">这个类加载器处理</span>
<span lang="EN-US">-classpath</span>
<span style="font-family: 宋体;">下的类加载工作</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">可以通过</span>
<span lang="EN-US">ClassLoader.getSystemClassLoader()</span>
<span style="font-family: 宋体;">方法调用</span>
<span lang="EN-US">. ClassLoader</span>
<span style="font-family: 宋体;">下所有的</span>
<span lang="EN-US">getSystemXXX()</span>
<span style="font-family: 宋体;">的静态方法都是通过这个方法定义的</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">在你的代码中</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">你应该尽量少地调用这个方法</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">以其它的类加载器作为代理</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">否则你的代码将只能工作在简单的命令行应用中</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">这个时候系统类加载器</span>
<span lang="EN-US">(system classloader)</span>
<span style="font-family: 宋体;">是</span>
<span lang="EN-US">JVM</span>
<span style="font-family: 宋体;">最后创建的类加载器</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">一但你把代码移到</span>
<span lang="EN-US">EJB, Web</span>
<span style="font-family: 宋体;">应用或</span>
<span lang="EN-US">Java Web Start</span>
<span style="font-family: 宋体;">应用中</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">一定会出问题</span>
<span lang="EN-US">. </span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">所以我们来看第二种选择</span>
<span lang="EN-US">: </span>
<span style="font-family: 宋体;">当前上下文环境下的类加载器</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">根据定义</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">当前类加载器就是你当前方法所属的类的加载器</span>
<span lang="EN-US">. </span>
<span style="font-family: 宋体;">在运行时类之间动态联编</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">及调用</span>
<span lang="EN-US">Class.forName,() Class.getResource()</span>
<span style="font-family: 宋体;">等类似方法时</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">这个类加载器会被隐含地使用</span>
<span lang="EN-US">. </span>
<span style="color: #ffcc00; font-family: 宋体;" lang="EN-US">It is also used by syntactic constructs like X.class class literals.</span>
<span style="font-family: 宋体;" lang="EN-US">
<o:p>
</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">线程上下文类型加载器是在<span lang="EN-US">Java 2</span>平台上被引入的<span lang="EN-US">. </span>每一个线程都有一个类加载器与之对应<span lang="EN-US">(</span>除非这个线程是被本地代码创建的<span lang="EN-US">). </span>这个类加载器是通过<span lang="EN-US">Thread.setContextClassLoaser()</span>方法设置的<span lang="EN-US">. </span>如果你不在线程构造后调用这个方法<span lang="EN-US">, </span>这个线程将从它的父线程中继承相应的上下文类加载器<span lang="EN-US">. </span>如果在整个应用中你不做任何特殊设置<span lang="EN-US">, </span>所有的线程将都以系统类加载器<span lang="EN-US">(system classloader)</span>作为自己的线程上下文类加载器<span lang="EN-US">. </span>自从<span lang="EN-US">Web</span>和<span lang="EN-US">J2EE</span>应用服务器使用成熟的类加载器机制来实现诸如<span lang="EN-US">JNDI, </span>线程池<span lang="EN-US">, </span>组件热部署等功能以来<span lang="EN-US">, </span>这种在整个应用中不做任何线程类加载器设置的情况就很少了<span lang="EN-US">.<o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">为什么线程上下文类加载器存在于如此重要的位置呢<span lang="EN-US">? </span>这个概念在<span lang="EN-US">J2SE</span>中的引入并不引人注目<span lang="EN-US">. </span>很多开发人员对这一概念迷惑的原因是<span lang="EN-US">Sun</span>公司在这方面缺乏适当的指引和文档<span lang="EN-US">. <o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">事实上<span lang="EN-US">, </span>上下文类加载器提供了类加载机制的后门<span lang="EN-US">, </span>这一点也在<span lang="EN-US">J2SE</span>中被引入了<span lang="EN-US">. </span>通常<span lang="EN-US">, </span>在<span lang="EN-US">JVM</span>中的所有类加载器被组织成了有继承层次的结构<span lang="EN-US">, </span>每一个类加载器<span lang="EN-US">(</span>除了引导<span lang="EN-US">JVM</span>的原始类加载器<span lang="EN-US">)</span>都有一个父加载器<span lang="EN-US">. </span>每当被请示加载类时<span lang="EN-US">, </span>类加载器都会首先请求其父类加载器<span lang="EN-US">, </span>只有当父类加载器不能加载时<span lang="EN-US">, </span>才会自己进行类加载<span lang="EN-US">.<o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">有时候这种类加载的顺序安排不能正常工作<span lang="EN-US">, (<font color="#3300cc">此
处的意思是:正常情况下都是从子类加载器到根类加载器请求,万一有根类里需要加载子类时,这种顺序就不能满足要求,就要有一条反向的通道,即得到子类加载
器,这样就用到了thread context
classloader,因为通过thread.getcontextclassloader()可以得到子类加载器</font>).</span>通常当必须动态加载应用程序开发人员提供的资源的时候<span lang="EN-US">. </span>以<span lang="EN-US">JNDI</span>为例<span lang="EN-US">: </span>它的内容<span lang="EN-US">(</span>从<span lang="EN-US">J2SE1.3</span>开始<span lang="EN-US">)</span>就在<span lang="EN-US">rt.jar</span>中的引导类中实现了<span lang="EN-US">, </span>但是这些<span lang="EN-US">JNDI</span>核心类需要动态加载由独立厂商实现并部署在应用程序的<span lang="EN-US">classpath</span>下的<span lang="EN-US">JNDI</span>提供者<span lang="EN-US">. </span>这种情况就要求一个父<span lang="EN-US">classloader(</span>本例<span lang="EN-US">, </span>就是引导类加载器<span lang="EN-US">)</span>去加载对于它其中一个子<span lang="EN-US">classloader(</span>本例<span lang="EN-US">, </span>系统类加载器<span lang="EN-US">)</span>可见的类<span lang="EN-US">. </span>这时通常的类加载代理机制不能实现这个要求<span lang="EN-US">. </span>解决的办法<span lang="EN-US">(workaround)</span>就是<span lang="EN-US">, </span>让<span lang="EN-US">JNDI</span>核心类使用当前线程上下文的类加载器<span lang="EN-US">, </span>这样<span lang="EN-US">, </span>就基本的类加载代理机制的相反方向建立了一条有效的途径<span lang="EN-US">. <o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">另外<span lang="EN-US">, </span>上面一段可能让你想起一些其它的事情<span lang="EN-US">: XML</span>解析<span lang="EN-US">Java API(JAXP). </span>是的<span lang="EN-US">, </span>当<span lang="EN-US">JAXP</span>只是<span lang="EN-US">J2SE</span>的扩展进<span lang="EN-US">, </span>它很自然地用当前类加载器来引导解析器的实现<span lang="EN-US">. </span>而当<span lang="EN-US">JAXP</span>被加入到<span lang="EN-US">J2SE1.4</span>的核心类库中时<span lang="EN-US">, </span>它的类加载也就改成了用当前线程类加载器<span lang="EN-US">, </span>与<span lang="EN-US">JNDI</span>的情况完全类似<span lang="EN-US">(</span>也使很多程序员很迷惑<span lang="EN-US">). </span>明白为什么我说来自<span lang="EN-US">Sun</span>的指导很缺乏了吧<span lang="EN-US">?<o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">在以上的介绍之后<span lang="EN-US">, </span>我们来看关键问题<span lang="EN-US">: </span>这两种选择<span lang="EN-US">(</span>当前类加载器和当前线程类加载器<span lang="EN-US">)</span>都不是在所有环境下都适用<span lang="EN-US">. </span>有些人认为当前线程类加载器应该成为新的标准策略<span lang="EN-US">. </span>但是<span lang="EN-US">, </span>如果这样<span lang="EN-US">, </span>当多个线程通过共享数据进行交互的时<span lang="EN-US">, </span>将会呈现出一幅极其复杂的类加载的画面<span lang="EN-US">, </span>除非它们全部使用了同一个上下文的类加载器<span lang="EN-US">. </span>进一步说<span lang="EN-US">, </span>在某些遗留下来的解决方案中<span lang="EN-US">, </span>委派到当前类加载器的方法已经是标准<span lang="EN-US">. </span>比如对<span lang="EN-US">Class.forName(String)</span>的直接调用<span lang="EN-US">(</span>这也是我为什么推荐尽量避免对这个方法进行调用的原因<span lang="EN-US">). </span>即使你努力去只调用上下文相关的类加载器<span lang="EN-US">, </span>仍然会有一些代码会不由你控制<span lang="EN-US">. </span>这种不受控制的类加载委派机制是混入是很危险的<span lang="EN-US">. <o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">更严重的问题<span lang="EN-US">, </span>某些应用服务器把环境上下文及当前类加载器设置到不同的类加载器实例上<span lang="EN-US">, </span>而这些类加载器有相同的类路径但却没有委派机制中的父子关系<span lang="EN-US">. </span>想想这为什么十分可怕<span lang="EN-US">. </span>要知道类加载器定义并加载的类实例会带有一个<span lang="EN-US">JVM</span>内部的<span lang="EN-US">ID</span>号<span lang="EN-US">. </span>如果当前类加载器加载一个类<span lang="EN-US">X</span>的实例<span lang="EN-US">, </span>这个实例调用<span lang="EN-US">JNDI</span>查找类<span lang="EN-US">Y</span>的实例<span lang="EN-US">, </span>些时的上下文的类加载器也可以定义了加载类<span lang="EN-US">Y</span>实例<span lang="EN-US">. </span>这个类<span lang="EN-US">Y</span>的定义就与当前类加载器看到的类<span lang="EN-US">Y</span>的定义不同<span lang="EN-US">. </span>如果进行强制类型转换<span lang="EN-US">, </span>则产生异常<span lang="EN-US">. <o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;">
<span style="font-family: 宋体;" lang="EN-US">
<span>&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">这种混乱的情况还将在<span lang="EN-US">Java</span>中存在一段时间<span lang="EN-US">. </span>对于那些需要动态加载资源的<span lang="EN-US">J2SE</span>的<span lang="EN-US">API, </span>我们来猜想它们的类加策略<span lang="EN-US">. </span>例如<span lang="EN-US">:<o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;" lang="EN-US">JNDI</span>
<span style="font-family: 宋体;">使用线程上下文类加载器<span lang="EN-US"><o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;" lang="EN-US">Class.getResource()</span>
<span style="font-family: 宋体;">和<span lang="EN-US">Class.forName()</span>使用当前类加载器<span lang="EN-US"><o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;" lang="EN-US">JAXP(J2SE 1.4</span>
<span style="font-family: 宋体;">及之后<span lang="EN-US">)</span>使用线程上下文类加载器<span lang="EN-US"><o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;" lang="EN-US">java.util.ResourceBundle</span>
<span style="font-family: 宋体;">使用调用者的当前类加载器<span lang="EN-US"><o:p></o:p></span></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="color: #ffcc00; font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="color: #ffcc00; font-family: 宋体;" lang="EN-US">URL
protocol handlers specified via java.protocol.handler.pkgs system
property are looked up in the bootstrap and system classloaders only<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; line-height: 150%;">
<span style="font-family: Wingdings;" lang="EN-US">
<span>&#216;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;" lang="EN-US">Java</span>
<span style="font-family: 宋体;">序列化<span lang="EN-US">API</span>默认使用调用者当前的类加载器<span lang="EN-US"><o:p></o:p></span></span>
</p>
<span style="font-family: 宋体;">这些类及资源的加载策略问题<span lang="EN-US">, </span>肯定是<span lang="EN-US">J2SE</span>领域中文档最及说明最缺乏的部分了<span lang="EN-US">.</span></span>
<img src ="http://www.blogjava.net/Jhonney/aggbug/187966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2008-03-23 02:57 <a href="http://www.blogjava.net/Jhonney/archive/2008/03/23/187966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>classloader</title><link>http://www.blogjava.net/Jhonney/archive/2008/03/23/187959.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sat, 22 Mar 2008 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2008/03/23/187959.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/187959.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2008/03/23/187959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/187959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/187959.html</trackback:ping><description><![CDATA[classloader 和class.forname的区别<br />
项目中，发生了classcast异常，源码处写的是Thread.currentThread<span class="tpc_content">.getContextClassLoader<br />
后来改成class.forname后OK啦<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Class.forName(String&nbsp;clz);<br />
使用调用这个语句的对象所使用的ClassLoader作为ClassLoader(</span><span style="color: #000000;">1</span><span style="color: #000000;">)。<br />
<br />
Thread.currentThread().getContextClassLoader())<br />
返回当前线程使用的ClassLoader(</span><span style="color: #000000;">2</span><span style="color: #000000;">)。<br />
<br />
<br />
如果ClassLoader(</span><span style="color: #000000;">1</span><span style="color: #000000;">)&#8220;等于&#8221;ClassLoader(</span><span style="color: #000000;">2</span><span style="color: #000000;">)，那么这里的使用Class.forName(String&nbsp;clz)和ClassLoader(</span><span style="color: #000000;">2</span><span style="color: #000000;">).loadClass(String&nbsp;clz)就是等价的。<br />
<br />
如果ClassLoader(</span><span style="color: #000000;">1</span><span style="color: #000000;">)&#8220;不等于&#8221;ClassLoader(</span><span style="color: #000000;">2</span><span style="color: #000000;">)，那么就是不等价的。<br />
<br />
在框架代码中，实际情况是ClassLoader(</span><span style="color: #000000;">1</span><span style="color: #000000;">)往往&#8220;不等于&#8221;ClassLoader(</span><span style="color: #000000;">2</span><span style="color: #000000;">)：<br />
即调用Class.forName(String&nbsp;clz)的语句所在的类的装载器不一定就是当前线程使用的类装载器。<br />
因为：一个类装载完了在运行了，该类的所属的类装载器就确定了(不变)，而在程序运行之中，线程<br />
的类装载器都随时可以通过hread.currentThread().setContextClassLoader(loader)进行改变(变)。</span></div>
程序中出现的错误，可能是由于平台的classloader是另一套机制<br />
<img src ="http://www.blogjava.net/Jhonney/aggbug/187959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2008-03-23 00:19 <a href="http://www.blogjava.net/Jhonney/archive/2008/03/23/187959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一片比较不错的单例双检锁</title><link>http://www.blogjava.net/Jhonney/archive/2008/03/13/186155.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Thu, 13 Mar 2008 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2008/03/13/186155.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/186155.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2008/03/13/186155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/186155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/186155.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: quto:http://www.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java                        A comprehensive look at this broken programming idiom                                           ...&nbsp;&nbsp;<a href='http://www.blogjava.net/Jhonney/archive/2008/03/13/186155.html'>阅读全文</a><img src ="http://www.blogjava.net/Jhonney/aggbug/186155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2008-03-13 22:43 <a href="http://www.blogjava.net/Jhonney/archive/2008/03/13/186155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DELL XP Pro 来源 与 MD5</title><link>http://www.blogjava.net/Jhonney/archive/2007/12/02/164667.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sun, 02 Dec 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2007/12/02/164667.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/164667.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2007/12/02/164667.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/164667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/164667.html</trackback:ping><description><![CDATA[<p>MD5：57505544DB716B451DB6CC33F1ABC0E3<br />
2005N<br />
原始放出2006.07世纪时代论坛</p>
<p>&nbsp;</p>
<p>MD5：66c029d7c10bfb1b9ce1c7034d882a21<br />
2004N<br />
原始放出ISO：2004.09&nbsp;&nbsp; 西安交大XXX</p>
<p><br />
md5：62c244a48e70b80c6baa014ca33b68ed<br />
2006N<br />
原始放出2006.10电骡一友：Bxx xxxxx</p>
<p><br />
MD5：e38f4e392a7798aao15fa95c50ff573d<br />
和MD5：57505544DB716B451DB6CC33F1ABC0E3<br />
是同一批盘。</p>
<img src ="http://www.blogjava.net/Jhonney/aggbug/164667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2007-12-02 17:47 <a href="http://www.blogjava.net/Jhonney/archive/2007/12/02/164667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dell OEM XP SP2的原版镜像</title><link>http://www.blogjava.net/Jhonney/archive/2007/12/02/164666.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sun, 02 Dec 2007 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2007/12/02/164666.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/164666.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2007/12/02/164666.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/164666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/164666.html</trackback:ping><description><![CDATA[<div class="tit">Dell OEM XP SP2的原版镜像</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <p>Dell OEM XP SP2的原版镜像：</p>
            <p>1.2004年台式机原版：MD5 66c029d7c10bfb1b9ce1c7034d882a21</p>
            <p>2.2005年笔记本原版：MD5 57505544DB716B451DB6CC33F1ABC0E3</p>
            <p>3.2006年原版：MD5 62c244a48e70b80c6baa014ca33b68ed</p>
            <p>非原版：</p>
            <p>1.772MB的那个所谓的2006.04版</p>
            <p>2.MD5 97E6327A45A86D62E40F38504B4BB01A<br />
            </p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/Jhonney/aggbug/164666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2007-12-02 17:45 <a href="http://www.blogjava.net/Jhonney/archive/2007/12/02/164666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随笔</title><link>http://www.blogjava.net/Jhonney/archive/2007/09/15/145389.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sat, 15 Sep 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2007/09/15/145389.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/145389.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2007/09/15/145389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/145389.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/145389.html</trackback:ping><description><![CDATA[这一个月来一直在做专利电子审批项目,比较的忙,也没时间更新BOKEE了<br />
感受最大的是 ,在读研期间,我过多的重视了技术,醉心于技术,但是在实际的工作,项目中,软件工程/管理方面的东西却一直很没有用心,近日感觉这是个方向,基石
<img src ="http://www.blogjava.net/Jhonney/aggbug/145389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2007-09-15 16:43 <a href="http://www.blogjava.net/Jhonney/archive/2007/09/15/145389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;上帝也疯狂2&gt;</title><link>http://www.blogjava.net/Jhonney/archive/2007/09/15/145386.html</link><dc:creator>Jhonney</dc:creator><author>Jhonney</author><pubDate>Sat, 15 Sep 2007 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/Jhonney/archive/2007/09/15/145386.html</guid><wfw:comment>http://www.blogjava.net/Jhonney/comments/145386.html</wfw:comment><comments>http://www.blogjava.net/Jhonney/archive/2007/09/15/145386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jhonney/comments/commentRss/145386.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jhonney/services/trackbacks/145386.html</trackback:ping><description><![CDATA[昨天偶然看了央6的上帝也疯狂,感觉
<img src ="http://www.blogjava.net/Jhonney/aggbug/145386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jhonney/" target="_blank">Jhonney</a> 2007-09-15 16:34 <a href="http://www.blogjava.net/Jhonney/archive/2007/09/15/145386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>