<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>陌上霜寒de部落阁</title>
    <description>来自江西,现混在北京,热爱java,喜好开源...
itxava@gmail.com</description>
    <link>http://itren.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>基于Ext的在线即时聊天系统</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/234607" style="color:red;">http://itren.javaeye.com/blog/234607</a>&nbsp;
          发表时间: 2008年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先要说一下是，因为在公司内被调离到了一个新的项目组，新项目组不能上网，比较悲哀，所以有很久没有更新过BOLG了。今天来小小的写下，如题。但是项目只完成了一小部分，等全部完成了再继续写，呵呵。
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/234607#comments" style="color:red;">已有 <strong>5</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Aug 2008 22:07:55 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/234607</link>
        <guid>http://itren.javaeye.com/blog/234607</guid>
      </item>
          <item>
        <title>数据库设计的14个技巧（摘录）</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/180385" style="color:red;">http://itren.javaeye.com/blog/180385</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下述十四个技巧，是许多人在大量的数据库分析与设计实践中，逐步总结出来的。对于这些经验的运用，读者不能生帮硬套，死记硬背，而要消化理解，实事求是，灵活掌握。并逐步做到：在应用中发展，在发展中应用。<br /><br />1. 原始单据与实体之间的关系<br />　　<br />可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单证对应多个实体，或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后，对我们设计录入界面大有好处。<br /><br />〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表：员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。<br /><br />2. 主键与外键<br />　　<br />一般而言，一个实体不能既无主键又无外键。在E?R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。<br />　　<br />主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美国数据库设计专家说：“键，到处都是键，除了键之外，什么也没有”，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。<br /><br />3. 基本表的性质<br />　　<br />基本表与中间表、临时表不同，因为它具有如下四个特性：<br />　　 <br />(1) 原子性。基本表中的字段是不可再分解的。<br />　　 (2) 原始性。基本表中的记录是原始数据（基础数据）的记录。<br />　　 (3) 演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。<br />　　 (4) 稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。<br /><br />理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临时表区分开来。<br /><br />4. 范式标准<br />　<br />基本表及其字段之间的关系, 应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间换时间的目的。<br /><br />〖例2〗：有一张存放商品的基本表，如表1所示。“金额”这个字段的存在，表明该表的设计不满足第三范式，因为“金额”可以由“单价”乘以“数量”得到，说明“金额”是冗余字段。但是，增加“金额”这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作法。<br />　　<br />在Rose 2002中，规定列有两种类型：数据列和计算列。“金额”这样的列被称为“计算列”，而“单价”和“数量”这样的列被称为“数据列”。<br />　　<br />表1 商品表的表结构<br />　　 商品名称 商品型号 单价 数量 金额<br />　　 电视机 29? 2,500 40 100,000<br />　　 <br />5. 通俗地理解三个范式<br />　　<br />通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)：<br />　　<br />第一范式：1NF是对属性的原子性约束，要求属性具有原子性，不可再分解；<br />　　 第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一性；<br />　　 第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余.<br />　　<br />没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是：在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。<br /><br />6. 要善于识别与正确处理多对多的关系<br /><br />若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。<br /><br />〖例3〗：在“图书馆信息系统”中，“图书”是一个实体，“读者”也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为“借还书”，它的属性为：借还时间、借还标志(0表示借书，1表示还书)，另外，它还应该有两个外键(“图书”的主键，“读者”的主键)，使它能与“图书”和“读者”连接。<br /><br />7. 主键PK的取值方法<br />　　 <br />PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时，建议字段的个数不要太多，多了不但索引占用空间大，而且速度也慢。<br /><br />8. 正确认识数据冗余<br />　　<br />主键与外键在多表中的重复出现, 不属于数据冗余，这个概念必须清楚，事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余！而且是一种低级冗余，即重复性的冗余。高级冗余不是字段的重复出现，而是字段的派生出现。<br /><br />〖例4〗：商品中的“单价、数量、金额”三个字段，“金额”就是由“单价”乘以“数量”派生出来的，它就是冗余，而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性，因为同一数据，可能从不同时间、地点、角色上多次录入。因此，我们提倡高级冗余(派生性冗余)，反对低级冗余(重复性冗余)。<br /><br />9. E--R图没有标准答案<br />　　<br />信息系统的E--R图没有标准答案，因为它的设计与画法不是惟一的，只要它覆盖了系统需求的业务范围和功能内容，就是可行的。反之要修改E--R图。尽管它没有惟一的标准答案，并不意味着可以随意设计。好的E?R图的标准是：结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。<br /><br />10. 视图技术在数据库设计中很有用<br />　　<br />与基本表、代码表、中间表不同，视图是一种虚表，它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口，是基表数据综合的一种形式, 是数据处理的一种方法，是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。<br /><br />对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统，视图的作用更加重要。这些系统的基本表完成物理设计之后，立即在基本表上建立第一层视图，这层视图的个数和结构，与基本表的个数和结构是完全相同。并且规定，所有的程序员，一律只准在视图上操作。只有数据库管理员，带着多个人员共同掌握的“安全钥匙”，才能直接在基本表上操作。请读者想想：这是为什么？<br /><br />11. 中间表、报表和临时表<br />　　<br />中间表是存放统计数据的表，它是为数据仓库、输出报表或查询结果而设计的，有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的，存放临时记录，为个人所用。基表和中间表由DBA维护，临时表由程序员自己用程序自动维护。<br /><br />12. 完整性约束表现在三个方面<br />　　<br />域的完整性：用Check来实现约束，在数据库设计工具中，对字段的取值范围进行定义时，有一个Check按钮，通过它定义字段的值城。参照完整性：用PK、FK、表级触发器来实现。用户定义完整性：它是一些业务规则，用存储过程和触发器来实现。<br /><br />13. 防止数据库设计打补丁的方法是“三少原则”<br />　　 <br />(1) 一个数据库中表的个数越少越好。只有表的个数少了，才能说明系统的E--R图少而精，去掉了重复的多余的实体，形成了对客观世界的高度抽象，进行了系统的数据集成，防止了打补丁式的设计；<br />　　 <br />(2) 一个表中组合主键的字段个数越少越好。因为主键的作用，一是建主键索引，二是做为子表的外键，所以组合主键的字段个数少了，不仅节省了运行时间，而且节省了索引存储空间；<br />　　 <br />(3) 一个表中的字段个数越少越好。只有字段的个数少了，才能说明在系统中不存在数据重复，且很少有数据冗余，更重要的是督促读者学会“列变行”，这样就防止了将子表中的字段拉入到主表中去，在主表中留下许多空余的字段。所谓“列变行”，就是将主表中的一部分内容拉出去，另外单独建一个子表。这个方法很简单，有的人就是不习惯、不采纳、不执行。<br />　　<br />数据库设计的实用原则是：在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念，综合观点，不能孤立某一个原则。该原则是相对的，不是绝对的。“三多”原则肯定是错误的。试想：若覆盖系统同样的功能，一百个实体(共一千个属性) 的E--R图，肯定比二百个实体(共二千个属性) 的E--R图，要好得多。<br />　　<br />提倡“三少”原则，是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成为应用数据库，将应用数据库集成为主题数据库，将主题数据库集成为全局综合数据库。集成的程度越高，数据共享性就越强，信息孤岛现象就越少，整个企业信息系统的全局E?R图中实体的个数、主键的个数、属性的个数就会越少。<br />　　<br />提倡“三少”原则的目的，是防止读者利用打补丁技术，不断地对数据库进行增删改，使企业数据库变成了随意设计数据库表的“垃圾堆”，或数据库表的“大杂院”，最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章，不计其数，导致企事业单位的信息系统无法维护而瘫痪。<br />　　 <br />“三多”原则任何人都可以做到，该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的原则，它要求有较高的数据库设计技巧与艺术，不是任何人都能做到的，因为该原则是杜绝用“打补丁方法”设计数据库的理论依据。<br /><br />14. 提高数据库运行效率的办法<br />　　<br />在给定的系统硬件和系统软件条件下，提高数据库系统的运行效率的办法是：<br />(1) 在数据库物理设计时，降低范式，增加冗余, 少用触发器, 多用存储过程。<br /><br />(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条)，复杂计算要先在数据库外面，以文件系统方式用C++语言计算处理完成之后，最后才入库追加到表中去。这是电信计费系统设计的经验。<br />　　<br />(3) 发现某个表的记录太多，例如超过一千万条，则要对该表进行水平分割。水平分割的做法是，以该表主键PK的某个值为界线，将该表的记录水平分割为两个表。若发现某个表的字段太多，例如超过八十个，则垂直分割该表，将原来的一个表分解为两个表。<br />　　<br />(4) 对数据库管理系统DBMS进行系统优化，即优化各种系统参数，如缓冲区个数。<br />　　<br />(5) 在使用面向数据的SQL语言进行程序设计时，尽量采取优化算法。<br />　<br />总之，要提高数据库的运行效率，必须从数据库系统级优化、数据库设计级优化、程序实现级优化，这三个层次上同时下功夫。
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/180385#comments" style="color:red;">已有 <strong>9</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 11:20:35 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/180385</link>
        <guid>http://itren.javaeye.com/blog/180385</guid>
      </item>
          <item>
        <title>给博客添加QQ联系方式，还有其他的</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/177381" style="color:red;">http://itren.javaeye.com/blog/177381</a>&nbsp;
          发表时间: 2008年03月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多博客上都提供自定义设置，因此好多人都弄些什么添加QQ，地图啊，天气预报之类的东东。那是怎么弄的呢，以下是一些相关的代码！！！<br />设置地图的代码<br /><pre name="code" class="html">
&lt;a href="http://www2.clustrmaps.com/counter/maps.php?url=你的博客地址" id="clustrMapsLink">&lt;img src="http://www2.clustrmaps.com/counter/index2.php?url=你的博客地址" style="border:1px solid;" alt="Locations of visitors to this page" title="Locations of visitors to this page" id="clustrMapsImg" onError="this.onError=null; this.src='http://clustrmaps.com/images/clustrmaps-back-soon.jpg'; document.getElementById('clustrMapsLink').href='http://clustrmaps.com'" />
&lt;/a>
</pre><br /><br />设置天气预报<br /><pre name="code" class="html">
&lt;iframe frameborder='0' scrolling='no' style='width:160px; height:210px; border:black solid 1px;' src='http://api.51ditu.com/iframe/blogmap.html?lng=12144243&amp;lat=3119369&amp;zoom=0&amp;txt=I'm here！&amp;msg=2006111811543508500'>&lt;/iframe>
&lt;IFRAME style="WIDTH: 177px; HEIGHT: 200px" src="http://weather.qq.com/inc/ss252.htm" frameBorder=0 width=170 scrolling=no height=200>&lt;/IFRAME>
</pre><br /><br />添加QQ联系方式<br /><pre name="code" class="html">
&lt;a target=blank href=tencent://message/?uin=565355525&amp;Site=http://blog.csdn.net/success_dream&amp;Menu=yes>&lt;img border="0" SRC=http://wpa.qq.com/pa?p=1:565355525:13 alt="随时联系我">&lt;/a>
</pre><br /><br />添加留言板<br />http://www.cbox.ws/
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/177381#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Mar 2008 17:55:53 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/177381</link>
        <guid>http://itren.javaeye.com/blog/177381</guid>
      </item>
          <item>
        <title>EXT教程</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/175406" style="color:red;">http://itren.javaeye.com/blog/175406</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Ext 2 Overview (EXT2.0概述,来自官方)<a href="http://www.dojochina.com/?q=node/548" target="_blank">http://www.dojochina.com/?q=node/548</a><br />ext 2.0 Combos 使用指南<a href="http://www.dojochina.com/?q=node/526" target="_blank">http://www.dojochina.com/?q=node/526</a><br />EXT 树的拖放<a href="http://www.dojochina.com/?q=node/522" target="_blank">http://www.dojochina.com/?q=node/522</a><br />EXT 的继承 Manual:Intro:Inheritance<a href="http://www.dojochina.com/?q=node/506" target="_blank">http://www.dojochina.com/?q=node/506</a><br />Javascript中的作用域（scope）<a href="http://www.dojochina.com/?q=node/508" target="_blank">http://www.dojochina.com/?q=node/508</a><br />Manual:Core:Ext.Ajax 类<a href="http://www.dojochina.com/?q=node/518" target="_blank">http://www.dojochina.com/?q=node/518</a><br />Manual:Core:Working with JSON (EXT 与json的交互)<a href="http://www.dojochina.com/?q=node/520" target="_blank">http://www.dojochina.com/?q=node/520</a><br />Manual:Ext Source Overview (EXT 学习原始资料)<a href="http://www.dojochina.com/?q=node/521" target="_blank">http://www.dojochina.com/?q=node/521</a><br />Manual:Utilities:Function(EXT 内建函数对象)<a href="http://www.dojochina.com/?q=node/519" target="_blank">http://www.dojochina.com/?q=node/519</a><br />Tutorial: Grid组件的简易分页<a href="http://www.dojochina.com/?q=node/514" target="_blank">http://www.dojochina.com/?q=node/514</a><br />Tutorial:Application Layout for Beginners (布局的初级入门)<a href="http://www.dojochina.com/?q=node/509" target="_blank">http://www.dojochina.com/?q=node/509</a><br />Tutorial:Building Ext From Source(制定自己的EXT版本)<a href="http://www.dojochina.com/?q=node/549" target="_blank">http://www.dojochina.com/?q=node/549</a><br />Tutorial:DomQuery Basics(DomQuery的基础)<a href="http://www.dojochina.com/?q=node/510" target="_blank">http://www.dojochina.com/?q=node/510</a><br />Tutorial:Ext Menu Widget (EXT 菜单组件)<a href="http://www.dojochina.com/?q=node/515" target="_blank">http://www.dojochina.com/?q=node/515</a><br />Tutorial:Extending Ext Class (EXT 的类继承概念)<a href="http://www.dojochina.com/?q=node/511" target="_blank">http://www.dojochina.com/?q=node/511</a><br />Tutorial:Getting Started with Templates(模板)<a href="http://www.dojochina.com/?q=node/516" target="_blank">http://www.dojochina.com/?q=node/516</a><br />Tutorial:Introduction to Ext (EXT 介绍入门)<a href="http://www.dojochina.com/?q=node/507" target="_blank">http://www.dojochina.com/?q=node/507</a><br />Tutorial:Playing With Ext The Easy Way (玩EXT简单方法)--firebug下调试ext<a href="http://www.dojochina.com/?q=node/622" target="_blank">http://www.dojochina.com/?q=node/622</a><br />Tutorial:TabPanel Basics (TabPanel 类的基础)<a href="http://www.dojochina.com/?q=node/577" target="_blank">http://www.dojochina.com/?q=node/577</a><br />Tutorial:Using Layouts with Ext - Part 1 (ext 的布局)<a href="http://www.dojochina.com/?q=node/513" target="_blank">http://www.dojochina.com/?q=node/513</a><br />Tutorial:Utilizing Format Features of Templates (模板引擎的应用)<a href="http://www.dojochina.com/?q=node/517" target="_blank">http://www.dojochina.com/?q=node/517</a><br />Tutorial:What is that Scope all about(关于作用域的问题)<a href="http://www.dojochina.com/?q=node/543" target="_blank">http://www.dojochina.com/?q=node/543</a><br /><br />本系列文章来自DOJO中国<a href="http://www.dojochina.com" target="_blank">http://www.dojochina.com</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/175406#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 13:57:03 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/175406</link>
        <guid>http://itren.javaeye.com/blog/175406</guid>
      </item>
          <item>
        <title>（转）Hibernate的各种保存方式的区别</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/172855" style="color:red;">http://itren.javaeye.com/blog/172855</a>&nbsp;
          发表时间: 2008年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hibernate对于对象的保存提供了太多的方法，他们之间有很多不同，这里细说一下，以便区别：<br /><br />　　一、预备知识：<br /><br />　　在所有之前，说明一下，对于hibernate，它的对象有三种状态，transient、persistent、detached<br /><br />　　下边是常见的翻译办法：<br /><br />　　transient：瞬态或者自由态<br /><br />　　persistent：持久化状态<br /><br />　　detached：脱管状态或者游离态<br /><br />　　脱管状态的实例可以通过调用save（）、persist（）或者saveOrUpdate（）方法进行持久化。<br /><br />　　持久化实例可以通过调用 delete（）变成脱管状态。通过get（）或load（）方法得到的实例都是持久化状态的。<br /><br />　　脱管状态的实例可以通过调用 update（）、0saveOrUpdate（）、lock（）或者replicate（）进行持久化。<br /><br />　　save（）和persist（）将会引发SQL的INSERT，delete（）会引发SQLDELETE，<br /><br />　　而update（）或merge（）会引发SQLUPDATE.对持久化（persistent）实例的修改在刷新提交的时候会被检测到，<br /><br />　　它也会引起SQLUPDATE.saveOrUpdate（）或者replicate（）会引发SQLINSERT或者UPDATE<br /><br />　　二、save 和update区别<br /><br />　　把这一对放在第一位的原因是因为这一对是最常用的。<br /><br />　　save的作用是把一个新的对象保存<br /><br />　　update是把一个脱管状态的对象保存<br /><br />　　三，update 和saveOrUpdate区别<br /><br />　　这个是比较好理解的，顾名思义，saveOrUpdate基本上就是合成了save和update<br /><br />　　引用hibernate reference中的一段话来解释他们的使用场合和区别<br /><br />　　通常下面的场景会使用update（）或saveOrUpdate（）：<br /><br />　　程序在第一个session中加载对象<br /><br />　　该对象被传递到表现层<br /><br />　　对象发生了一些改动<br /><br />　　该对象被返回到业务逻辑层<br /><br />　　程序调用第二个session的update（）方法持久这些改动<br /><br />　　saveOrUpdate（）做下面的事：<br /><br />　　如果对象已经在本session中持久化了，不做任何事<br /><br />　　如果另一个与本session关联的对象拥有相同的持久化标识（identifier），抛出一个异常<br /><br />　　如果对象没有持久化标识（identifier）属性，对其调用save（）<br /><br />　　如果对象的持久标识（identifier）表明其是一个新实例化的对象，对其调用save（）<br /><br />　　如果对象是附带版本信息的（通过&lt;version>或&lt;timestamp>） 并且版本属性的值表明其是一个新实例化的对象，save（）它。否则update（） 这个对象.<br /><br />&nbsp;&nbsp;&nbsp; 四，persist和save区别<br /><br />　　这个是最迷离的一对，表面上看起来使用哪个都行，在hibernate reference文档中也没有明确的区分他们。<br /><br />　　这里给出一个明确的区分。（可以跟进src看一下，虽然实现步骤类似，但是还是有细微的差别）<br /><br />　　这里参考http://opensource.atlassian.com/projects/hibernate/browse/HHH-1682中的一个说明：<br /><br />---------------------------------------------------------------------------------<br /><br />　　I found that a lot of people have the same doubt. To help to solve this issue<br /><br />　　I'm quoting Christian Bauer：<br /><br />　　"In case anybody finds this thread……<br /><br />　　persist（） is well defined. It makes a transient instance persistent. However，<br /><br />　　it doesn't guarantee that the identifier value will be assigned to the persistent<br /><br />　　instance immediately， the assignment might happen at flush time. The spec doesn't say<br /><br />　　that， which is the problem I have with persist（）。<br /><br />　　persist（） also guarantees that it will not execute an INSERT statement if it is<br /><br />　　called outside of transaction boundaries. This is useful in long-running conversations<br /><br />　　with an extended Session/persistence context.A method like persist（） is required.<br /><br />　　save（） does not guarantee the same， it returns an identifier， and if an INSERT<br /><br />　　has to be executed to get the identifier （e.g. "identity" generator， not "sequence"），<br /><br />　　this INSERT happens immediately， no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context."<br /><br />---------------------------------------------------------------------------------<br /><br />　　简单翻译一下上边的句子的主要内容：<br /><br />　　1，persist把一个瞬态的实例持久化，但是并"不保证"标识符被立刻填入到持久化实例中，标识符的填入可能被推迟<br /><br />　　到flush的时间。<br /><br />　　2，persist"保证"，当它在一个transaction外部被调用的时候并不触发一个Sql Insert，这个功能是很有用的，<br /><br />　　当我们通过继承Session/persistence context来封装一个长会话流程的时候，一个persist这样的函数是需要的。<br /><br />　　3，save"不保证"第2条，它要返回标识符，所以它会立即执行Sql insert，不管是不是在transaction内部还是外部<br /><br />五，saveOrUpdateCopy，merge和update区别<br /><br />　　首先说明merge是用来代替saveOrUpdateCopy的，这个详细见这里<br /><br />　　http://www.blogjava.net/dreamstone/archive/2007/07/28/133053.html<br /><br />　　然后比较update和merge<br /><br />　　update的作用上边说了，这里说一下merge的<br /><br />　　如果session中存在相同持久化标识（identifier）的实例，用用户给出的对象的状态覆盖旧有的持久实例<br /><br />　　如果session没有相应的持久实例，则尝试从数据库中加载，或创建新的持久化实例，最后返回该持久实例<br /><br />　　用户给出的这个对象没有被关联到session上，它依旧是脱管的<br /><br />　　重点是最后一句：<br /><br />　　当我们使用update的时候，执行完成后，我们提供的对象A的状态变成持久化状态<br /><br />　　但当我们使用merge的时候，执行完成，我们提供的对象A还是脱管状态，hibernate或者new了一个B，或者检索到<br /><br />　　一个持久对象B，并把我们提供的对象A的所有的值拷贝到这个B，执行完成后B是持久状态，而我们提供的A还是托管状态<br /><br />　　六，flush和update区别<br /><br />　　这两个的区别好理解<br /><br />　　update操作的是在脱管状态的对象<br /><br />　　而flush是操作的在持久状态的对象。<br /><br />　　默认情况下，一个持久状态的对象是不需要update的，只要你更改了对象的值，等待hibernate flush就自动保存到数据库了。hibernate flush发生再几种情况下：<br /><br />　　1，调用某些查询的时候<br /><br />　　2，transaction commit的时候<br /><br />　　3，手动调用flush的时候<br /><br />　　七，lock和update区别<br /><br />　　update是把一个已经更改过的脱管状态的对象变成持久状态<br /><br />　　lock是把一个没有更改过的脱管状态的对象变成持久状态<br /><br />　　对应更改一个记录的内容，两个的操作不同：<br /><br />　　update的操作步骤是：<br /><br />　　（1）更改脱管的对象->调用update<br /><br />　　lock的操作步骤是：<br /><br />　　（2）调用lock把对象从脱管状态变成持久状态——>更改持久状态的对象的内容——>等待flush或者手动flush
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/172855#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Mar 2008 10:30:13 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/172855</link>
        <guid>http://itren.javaeye.com/blog/172855</guid>
      </item>
          <item>
        <title>在Dom4j中使用xpath</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/163901" style="color:red;">http://itren.javaeye.com/blog/163901</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在使用Dom4j解析xml文档时,我们很希望有一种类似正则表达式的东西来规范查询条件,而xpath正是这样一种很便利的规则吧.<br />&nbsp;&nbsp;&nbsp; 以下是本人用写的一个类,摘取部分代码;<br /><pre name="code" class="java">String xmlName = path + "/" + userName + ".xml";
		// 定义需要返回的第一级菜单的名字集合
		List firstNames = new ArrayList();
		// Attribute的属性集合
		List attrs = new ArrayList();
		// 声明SAXReader
		SAXReader saxReader = new SAXReader();
		try {
			Document doc = saxReader.read(xmlName);
			// 获得所有grade=1的Element的text的值
			String xpath = "/tree/item";
			List list = doc.selectNodes(xpath);
			Iterator it = list.iterator();
			while (it.hasNext()) {
				Element elt = (Element) it.next();
				Attribute attr = elt.attribute("grade");
				System.out.println(attr.getValue());
				if (new Integer(attr.getValue()).intValue() == 1) {
					attr = elt.attribute("text");
					attrs.add(attr.getValue());
					System.out.println(attr.getValue());
				}
			}

		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return attrs;</pre><br /><br />还有一个是获取某个节点下面里的所有第一级子节点,而不是所有的节点(包括子节点和孙节点).<br /><pre name="code" class="java">public static List getSecondMenuNames(String textName, String path,
			String userName) {
		String xmlName = path + "/" + userName + ".xml";
		String name = textName;
		// 定义需要返回的第二级菜单的名字集合
		List firstNames = new ArrayList();
		// Attribute的属性集合
		List attrs = new ArrayList();
		// 声明SAXReader
		SAXReader saxReader = new SAXReader();
		try {
			Document doc = saxReader.read(xmlName);
			// 这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点
			String xpath = "//item[@text='" + name + "']/child::*";

			List list = doc.selectNodes(xpath);
			Iterator it = list.iterator();
			while (it.hasNext()) {
				Element elt = (Element) it.next();

				Attribute attr = elt.attribute("grade");
				System.out.println(attr.getValue());

				attr = elt.attribute("text");
				System.out.println(attr.getValue());
				attrs.add(attr.getValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return attrs;
	}</pre><br /><br />注意看其中的xpath的写法,正是因为有了xpath,我们才能如此简单灵活的对xml进行操作.<br />刚刚使用xpath的时候可能会报一个错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException<br />这时我们应该往CLASSPATH导入一个jar包,叫jaxen-1.1.1.jar,可从网上下载.<br /><br />以下附上xpath的部分语法,具体可查看我的BOLG的链接,有一个叫xpath的.呵呵!<br /><br />&lt;?xml version="1.0" encoding="ISO-8859-1"?><br />&lt;bookstore><br />&lt;book><br />&nbsp; &lt;title lang="eng">Harry Potter&lt;/title><br />&nbsp; &lt;price>29.99&lt;/price><br />&lt;/book><br />&lt;book><br />&nbsp; &lt;title lang="eng">Learning XML&lt;/title><br />&nbsp; &lt;price>39.95&lt;/price><br />&lt;/book><br />&lt;/bookstore><br />表达式	描述<br />节点名	 选择所有该名称的节点集<br />/	 选择根节点<br />//	 选择当前节点下的所有节点<br />.	 选择当前节点<br />..	 选择父节点<br />@	 选择属性<br />示例<br />表达式	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述<br />bookstore 	选择所有bookstore子节点<br />/bookstore	选择根节点bookstore<br />bookstore/book	在bookstore的子节点中选择所有名为book的节点<br />//book	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择xml文档中所有名为book的节点<br />bookstore//book	选择节点bookstore下的所有名为book为节点<br />//@lang	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择所有名为lang的属性<br />断言<br />在方括号中[],用来更进一步定位选择的元素<br />表达式	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述<br />/bookstore/book[1]	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择根元素bookstore的book子元素中的第一个<br />注意: IE5以上浏览器中第一个元素是0<br />/bookstore/book[last()]	选择根元素bookstore的book子元素中的最后一个<br />/bookstore/book[last()-1]	选择根元素bookstore的book子元素中的最后第二个<br />/bookstore/book[position()&lt;3]	选择根元素bookstore的book子元素中的前两个<br />//title[@lang]	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择所有拥有属性lang的titile元素<br />//title[@lang='eng']	选择所有属性值lang为eng的title元素<br />/bookstore/book[price>35.00]	选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的<br />/bookstore/book[price>35.00]/title	选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素<br />选择位置的节点<br />通配符	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述<br />*	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配所有元素<br />@*	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配所有属性节点<br />node()	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何类型的节点<br />示例<br />表达式	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述<br />/bookstore/*	&nbsp;&nbsp; 选择根元素bookstore的下的所有子元素<br />//*	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择文档中所有元素<br />//title[@*]	&nbsp;&nbsp; 选择所有拥有属性的title元素<br /><br />使用操作符“|”组合选择符合多个path的表达式
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/163901#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Feb 2008 14:33:41 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/163901</link>
        <guid>http://itren.javaeye.com/blog/163901</guid>
      </item>
          <item>
        <title>如何正确申请Ubuntu光盘,个人原创</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/163413" style="color:red;">http://itren.javaeye.com/blog/163413</a>&nbsp;
          发表时间: 2008年02月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ubuntu的出现,对喜欢linux的朋友来说是一件很幸福的事情.终于有了一个可以媲美MS WINDOWS的桌面版的Linux操作系统了,鼓舞~~~<br /><br />ubuntu的安装很容易,直接去官方网站下载就可以了,然后刻盘,即可进行光盘安装;如果没有刻录机要安装也可以啊,可以使用硬盘安装,不过得先去下载一些引导文件,在ubuntu的官方论坛有很多;如果没刻录机有不想使用硬盘安装,那么可以尝试申请Ubuntu光盘.以下为我的地址填写方式,<br /><br />&nbsp;&nbsp;&nbsp; Room 454,No 455,Road XXX,Haidian Beijing China<br />翻译过来就是:<br />&nbsp;&nbsp;&nbsp; 中国北京市海淀区XXX路455号454室.<br /><br />一般写外语地址是先写小的,后写大的地名.不过也可以直接书写汉语拼音,什么什么Lu(路),<br />什么什么Qu(区),等等<br /><br />呵呵,就这么多了,一般要等3-4一个星期就有了,好高兴,赶紧装去
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/163413#comments" style="color:red;">已有 <strong>13</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Feb 2008 16:33:03 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/163413</link>
        <guid>http://itren.javaeye.com/blog/163413</guid>
      </item>
          <item>
        <title>Dom4j使用小结</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/161007" style="color:red;">http://itren.javaeye.com/blog/161007</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Dom4j小结<br />1．	至于如何用DOM4J创建xml文件我就不加多说了,先讲下如何修改xml文件中的属性值假设有xml文件如下：<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;books>
     &lt;!--This is a test for dom4j, holen, 2004.9.11-->
     &lt;book show="yes">
          &lt;title>Dom4j Tutorials&lt;/title>
     &lt;/book>
     &lt;book show="yes">
          &lt;title>Lucene Studing&lt;/title>
     &lt;/book>
     &lt;book show="no">
          &lt;title>Lucene in Action&lt;/title>
     &lt;/book>
     &lt;owner>O'Reilly&lt;/owner>
&lt;/books>
</pre><br />在该xml文件中查找show属性，并将值等于yes的改成no。<br /><pre name="code" class="java">
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(“***.xml”):
/**
*	注意属性用@来表示
*/
List list = doc.selectNodes(“/books/book/@show”);
Iterator it = list.iterator();
while(it.hasNext())
{
		Attribute attr = (Attribute)it.next();
		if(attr.getValue().equalse(“yes”))
		{
	attr.setValue(“no”);
}
}

</pre><br />修改owner节点，并添加子节点及属性<br /><pre name="code" class="java">
list = doc.selectNodes(“/books/owner”);
it = list.iterator();
while(it.hasNext())
{
		Element elt = (Element)it.next();
		elt.setText(“机械工业出版社”);
		Element dataElement = elt.addElement(“data”);
		dataElement.setText(“2008-1-31”);
		dataElement.addAttribute(“category”,”IT类”);
}

保存修改后的xml文件
OutputFormat outFmt = new OutputFormat(“		”,true);
//或者改成缩进式
//OutputFormat outFmt = OutputFormat.createPrettyPrint();
outFmt.setEncoding(“gb2312”);
try
{
		XMLWriter xmlWriter = new XMLWriter(new FileWriter(“***.xml”),outFmt);
		xmlWriter.write(doc);
		xmlWriter.flush();
}
catch(Exception e)
{
		e.printStackTrace();
}
</pre><br /><br />同理，我们也可以做到删除节点或属性的操作<br />2．未完待续...(以后讲下Visitor和ElementHandler,感觉自己是班门弄斧,汗颜啊- -#,各位大大请赐教啊)
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/161007#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 15:44:30 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/161007</link>
        <guid>http://itren.javaeye.com/blog/161007</guid>
      </item>
          <item>
        <title>使用dhtmlxtree时所遇到的问题及对应策略</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/160367" style="color:red;">http://itren.javaeye.com/blog/160367</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          小弟水平不高,所以一直努力中,请前辈们不吝赐教<img src="/images/smiles/icon_smile.gif"/><br />----------------------------------------------------------------------<br /><br />1．	在action中调用service类，并将xml文件写入对应的xml文件夹<br /><br /><pre name="code" class="java">
String path = this.servlet.getServletContext().getRealPath(“/”)+”xml”;
</pre><br />然后将这个path传递过去，作为生成xml文件的一个参数，指出其应当存储的位置。<br /><pre name="code" class="java">OutputFormat outFmt = new OutputFormat(“		”,true);
XMLWriter xmlWriter = new XMLWriter(new FileWriter(path+”\\tee.xml”),outFmt);
</pre><br /><br />2．	在登录的时候需要对xml文件夹进行遍历，查看是否有以用户名命名的xml文件是否存在，如果存在则解析该xml文件，并将其显示为一棵动态树。如果没有则调用service方法获得该用户的功能权限或其他的权限，将其生成为一个xml文件，并保存在对应的xml文件夹。<br />如果改动了用户的权限，则也要更改对应的xml文件，并将其重新保存。<br /><br /><pre name="code" class="java">
File dir = new File(path);
File[] files = dir.listFiles();
//然后遍历这个目录，找到以某个用户名命名的xml文件
</pre><br />3．	困扰2天的dhtmlxtree树图标不显示的问题终于搞定了。<br /><br />由于系统结构如下<br /><div class="quote_title">doc 写道</div><div class="quote_div"><br />---WebRoot<br />		---codebase<br />		---imgs<br />		---privmanag<br />			---inc<br />				---treemenu.jsp<br /> </div><br /><br />	Treemenu.jsp页面中的设置如下<br /><pre name="code" class="html">
&lt;link rel="STYLESHEET" type="text/css" href="codebase/dhtmlxtree.css">
		&lt;script src="codebase/dhtmlxcommon.js">&lt;/script>
		&lt;script src="codebase/dhtmlxtree.js">&lt;/script>
		
	&lt;script>
		tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0);
		//set the image's path
		//默认使用dhtmlxtree的winstyle风格
		tree.setImagePath("imgs/");
		...
</pre><br />4．	在给包含富选框的树进行操作的时候，需要使用什么样的dhtmlxtree函数以及如何将已经被checked的节点的ID传递出来<br /><br />首先在javascript里使用dhtmlxtree的函数来获取一个选中节点的ID的数组。<br />// 获得所有选中的节点的id<br />tree.getAllChecked();<br />//获得所有选中的那个节点的分支<br />tree.getAllCheckedBranches();<br /><br />然后我们解决怎么将这个数组变量传递出来，提供给Action类来使用呢？ <br />&nbsp; <br />找来找去，发现是不可能的，因为javascript是运行在客户端的，而servlet是运行在服务端的，是无法进行通信的，除非用到AJAX技术进行异步的通信，但是我又不会。还有2种手段能达到相同的效果，一个是使用一个隐藏域，将JAVASCRIPT的变量赋给它，然后提交，在另一个jsp页面里使用request.getParameter();来获得；另一个是将获得的变量作为参数通过URL的形式传递出去。结合实际项目的情况，我选择了后者，唯一可能麻烦的是，不知道这个参数的长度是多少？如果太多了就麻烦了。<br /><pre name="code" class="js">
function getIdArray()
			{
				var aa = new Array();
				var ss = openURL();
				aa = ss.split(",");
				//alert(aa[0]);
				//alert(aa.length-1);
				alert(aa);
				var sss="****.do?";
				for(var i=0;i&lt;aa.length-1;i++)
				{
					//var str = parseInt(aa[i]);
					var str = aa[i];
					if(i==(aa.length-2))
					{
						sss = sss+"str"+i+"="+str;
					}
					else
					{
						alert(str);
						sss = sss+"str"+i+"="+str+"&amp;";
					}
					
					alert(sss);
				}
				alert(sss);
				//alert(aa);
			}
</pre><br />	最后就能得到了正确的URL了，然后调用对应的action处理类来进行处理就可以了。<br />【扩充点是可以同时把共有多少选项的个数传递出去。】<br />这只是我的一些做项目时的遇到的问题,请前辈们给出一些更好的解决方案,谢谢!!!
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/160367#comments" style="color:red;">已有 <strong>3</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 13:37:52 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/160367</link>
        <guid>http://itren.javaeye.com/blog/160367</guid>
      </item>
          <item>
        <title>SQL PLUS命令使用大全(转,特有用)</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/160283" style="color:red;">http://itren.javaeye.com/blog/160283</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中，可以运行sql*plus命令与sql*plus语句。 <br />&nbsp;&nbsp; 我们通常所说的DML、DDL、DCL语句都是sql*plus语句，它们执行完后，都可以保存在一个被称为sql buffer的内存区域中，并且只能保存一条最近执行的sql语句，我们可以对保存在sql buffer中的sql 语句进行修改，然后再次执行，sql*plus一般都与数据库打交道。 <br />&nbsp;&nbsp; 除了sql*plus语句，在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后，不保存在sql buffer的内存区域中，它们一般用来对输出的结果进行格式化显示，以便于制作报表。 <br />&nbsp;&nbsp; 下面就介绍一下一些常用的sql*plus命令： <br />&nbsp; <br />1. 执行一个SQL脚本文件 <br />SQL>start file_name <br />SQL>@ file_name <br />我们可以将多条sql语句保存在一个文本文件中，这样当要执行这个文件中的所有的sql语句时，用上面的任一命令即可，这类似于dos中的批处理。 <br /><br />@与@@的区别是什么？<br />@等于start命令，用来运行一个sql脚本文件。<br />@命令调用当前目录下的，或指定全路径，或可以通过SQLPATH环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径，否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。<br />@@用在sql脚本文件中，用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下，而不用指定要执行sql脚本文件的全路径，也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件，该命令一般用在脚本文件中。<br />如：在c:\temp目录下有文件start.sql和nest_start.sql，start.sql脚本文件的内容为：<br />@@nest_start.sql&nbsp;&nbsp;&nbsp;&nbsp; - - 相当于@ c:\temp\nest_start.sql<br />则我们在sql*plus中，这样执行：<br />SQL> @ c:\temp\start.sql <br /><br /><br />2. 对当前的输入进行编辑 <br />SQL>edit <br />&nbsp; <br />3. 重新运行上一次运行的sql语句 <br />SQL>/ <br />&nbsp; <br />4. 将显示的内容输出到指定文件 <br />SQL> SPOOL file_name <br />&nbsp;&nbsp; 在屏幕上的所有内容都包含在该文件中，包括你输入的sql语句。 <br />&nbsp; <br />5. 关闭spool输出 <br />SQL> SPOOL OFF <br />&nbsp;&nbsp; 只有关闭spool输出，才会在输出文件中看到输出的内容。 <br />&nbsp; <br />6．显示一个表的结构 <br />SQL> desc table_name <br />&nbsp; <br />7. COL命令： <br />主要格式化列的显示形式。 <br />该命令有许多选项，具体如下： <br />COL[UMN] [{ column|expr} [ option ...]] <br />Option选项可以是如下的子句: <br />ALI[AS] alias <br />CLE[AR] <br />FOLD_A[FTER] <br />FOLD_B[EFORE] <br />FOR[MAT] format <br />HEA[DING] text <br />JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br />LIKE { expr|alias} <br />NEWL[INE] <br />NEW_V[ALUE] variable <br />NOPRI[NT]|PRI[NT] <br />NUL[L] text <br />OLD_V[ALUE] variable <br />ON|OFF <br />WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] <br />&nbsp; <br />1). 改变缺省的列标题 <br />COLUMN column_name HEADING column_heading <br />For example: <br />Sql>select * from dept; <br />&nbsp;&nbsp;&nbsp;&nbsp; DEPTNO DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOC <br />---------- ---------------------------- --------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NEW YORK <br />sql>col&nbsp; LOC heading location <br />sql>select * from dept; <br />&nbsp;&nbsp;&nbsp; DEPTNO DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location <br />--------- ---------------------------- ----------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NEW YORK <br />&nbsp; <br />2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上： <br />Sql>select * from emp <br />Department&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Salary <br />---------- ---------- ---------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 aaa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />SQL> COLUMN ENAME HEADING ’Employee|Name’ <br />Sql>select * from emp <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Employee <br />Department&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Salary <br />---------- ---------- ----------&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 aaa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11 <br />note: the col heading turn into two lines from one line. <br />&nbsp; <br />3). 改变列的显示长度： <br />FOR[MAT] format <br />Sql>select empno,ename,job from emp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />---------- ----------&nbsp;&nbsp;&nbsp;&nbsp; --------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369 SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLERK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7499 ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SALESMAN&nbsp;&nbsp; <br />7521 WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SALESMAN&nbsp;&nbsp; <br />Sql> col ename format a40 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO ENAME&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;&nbsp;&nbsp; JOB <br />----------&nbsp;&nbsp; ----------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369 SMITH&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;&nbsp;&nbsp; CLERK <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7499 ALLEN&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;&nbsp;&nbsp; SALESMAN <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7521 WARD&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;&nbsp;&nbsp; SALESMAN <br />&nbsp; <br />4). 设置列标题的对齐方式 <br />JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br />SQL> col ename justify center <br />SQL> / <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOB <br />----------&nbsp;&nbsp; ----------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369 SMITH&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;&nbsp;&nbsp; CLERK <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7499 ALLEN&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;&nbsp;&nbsp; SALESMAN <br />7521 WARD&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;&nbsp;&nbsp;&nbsp; SALESMAN <br />对于NUMBER型的列，列标题缺省在右边，其它类型的列标题缺省在左边 <br />&nbsp; <br />5). 不让一个列显示在屏幕上 <br />NOPRI[NT]|PRI[NT] <br />SQL> col job noprint <br />SQL> / <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENAME <br />----------&nbsp;&nbsp;&nbsp;&nbsp; ---------------------------------------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369 SMITH <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7499 ALLEN <br />7521 WARD <br />&nbsp; <br />6). 格式化NUMBER类型列的显示： <br />SQL> COLUMN SAL FORMAT $99,990 <br />SQL> / <br />Employee <br />Department Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Salary&nbsp;&nbsp;&nbsp; Commission <br />---------- ---------- --------- ---------- <br />30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $1,600&nbsp;&nbsp;&nbsp; 300 <br />&nbsp; <br />7). 显示列值时，如果列值为NULL值，用text值代替NULL值 <br />COMM NUL[L] text <br />SQL>COL COMM NUL[L] text <br />&nbsp; <br />8). 设置一个列的回绕方式 <br />WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COL1 <br />-------------------- <br />HOW ARE YOU? <br />&nbsp; <br />SQL>COL COL1 FORMAT A5 <br />SQL>COL COL1 WRAPPED <br />COL1 <br />----- <br />HOW A <br />RE YO <br />U? <br />&nbsp; <br />SQL> COL COL1 WORD_WRAPPED <br />COL1 <br />----- <br />HOW <br />ARE <br />YOU? <br />&nbsp; <br />SQL> COL COL1 WORD_WRAPPED <br />COL1 <br />----- <br />HOW A <br />&nbsp; <br />9). 显示列的当前的显示属性值 <br />SQL> COLUMN column_name <br />&nbsp; <br />10). 将所有列的显示属性设为缺省值 <br />SQL> CLEAR COLUMNS <br />&nbsp; <br />8. 屏蔽掉一个列中显示的相同的值 <br />BREAK ON break_column <br />SQL> BREAK ON DEPTNO <br />SQL> SELECT DEPTNO, ENAME, SAL <br />FROM EMP <br />&nbsp; WHERE SAL &amp;lt; 2500 <br />&nbsp; ORDER BY DEPTNO; <br />DEPTNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAL <br />---------- ----------- --------- <br />10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2450 <br />MILLER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1300 <br />20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 800 <br />ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100 <br />&nbsp; <br />9. 在上面屏蔽掉一个列中显示的相同的值的显示中，每当列值变化时在值变化之前插入n个空行。 <br />BREAK ON break_column SKIP n <br />&nbsp; <br />SQL> BREAK ON DEPTNO SKIP 1 <br />SQL> / <br />DEPTNO ENAME SAL <br />---------- ----------- --------- <br />10 CLARK 2450 <br />MILLER 1300 <br />&nbsp; <br />20 SMITH 800 <br />ADAMS 1100 <br />&nbsp; <br />10. 显示对BREAK的设置 <br />SQL> BREAK <br />&nbsp; <br />11. 删除6、7的设置 <br />SQL> CLEAR BREAKS <br />&nbsp; <br />12. Set 命令： <br />该命令包含许多子命令： <br />SET system_variable value <br />system_variable value 可以是如下的子句之一： <br />APPI[NFO]{ON|OFF|text} <br />ARRAY[SIZE] {15|n} <br />AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n} <br />AUTOP[RINT] {ON|OFF} <br />AUTORECOVERY [ON|OFF] <br />AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] <br />BLO[CKTERMINATOR] {.|c} <br />CMDS[EP] {;|c|ON|OFF} <br />COLSEP {_|text} <br />COM[PATIBILITY]{V7|V8|NATIVE} <br />CON[CAT] {.|c|ON|OFF} <br />COPYC[OMMIT] {0|n} <br />COPYTYPECHECK {ON|OFF} <br />DEF[INE] {&amp;|c|ON|OFF} <br />DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}] <br />ECHO {ON|OFF} <br />EDITF[ILE] file_name[.ext] <br />EMB[EDDED] {ON|OFF} <br />ESC[APE] {\|c|ON|OFF} <br />FEED[BACK] {6|n|ON|OFF} <br />FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL} <br />FLU[SH] {ON|OFF} <br />HEA[DING] {ON|OFF} <br />HEADS[EP] {||c|ON|OFF} <br />INSTANCE [instance_path|LOCAL] <br />LIN[ESIZE] {80|n} <br />LOBOF[FSET] {n|1} <br />LOGSOURCE [pathname] <br />LONG {80|n} <br />LONGC[HUNKSIZE] {80|n} <br />MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL <br />{ON|OFF}] [PRE[FORMAT] {ON|OFF}] <br />NEWP[AGE] {1|n|NONE} <br />NULL text <br />NUMF[ORMAT] format <br />NUM[WIDTH] {10|n} <br />PAGES[IZE] {24|n} <br />PAU[SE] {ON|OFF|text} <br />RECSEP {WR[APPED]|EA[CH]|OFF} <br />RECSEPCHAR {_|c} <br />SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_ <br />WRAPPED]|TRU[NCATED]}] <br />SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]} <br />SHOW[MODE] {ON|OFF} <br />SQLBL[ANKLINES] {ON|OFF} <br />SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]} <br />SQLCO[NTINUE] {> |text} <br />SQLN[UMBER] {ON|OFF} <br />SQLPRE[FIX] {#|c} <br />SQLP[ROMPT] {SQL>|text} <br />SQLT[ERMINATOR] {;|c|ON|OFF} <br />SUF[FIX] {SQL|text} <br />TAB {ON|OFF} <br />TERM[OUT] {ON|OFF} <br />TI[ME] {ON|OFF} <br />TIMI[NG] {ON|OFF} <br />TRIM[OUT] {ON|OFF} <br />TRIMS[POOL] {ON|OFF} <br />UND[ERLINE] {-|c|ON|OFF} <br />VER[IFY] {ON|OFF} <br />WRA[P] {ON|OFF} <br />&nbsp; <br />1). 设置当前session是否对修改的数据进行自动提交 <br />SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n} <br />&nbsp; <br />2)．在用start命令执行一个sql脚本时，是否显示脚本中正在执行的SQL语句 <br />SQL> SET ECHO {ON|OFF} <br />&nbsp; <br />3).是否显示当前sql语句查询或修改的行数 <br />SQL> SET FEED[BACK] {6|n|ON|OFF} <br />&nbsp;&nbsp; 默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ，则不管查询到多少行都返回。当为off 时，一律不显示查询的行数 <br />&nbsp; <br />4).是否显示列标题 <br />SQL> SET HEA[DING] {ON|OFF} <br />当set heading off 时，在每页的上面不显示列标题，而是以空白行代替 <br />&nbsp; <br />5).设置一行可以容纳的字符数 <br />SQL> SET LIN[ESIZE] {80|n} <br />&nbsp;&nbsp; 如果一行的输出内容大于设置的一行可容纳的字符数，则折行显示。 <br />&nbsp; <br />6).设置页与页之间的分隔 <br />SQL> SET NEWP[AGE] {1|n|NONE} <br />当set newpage 0 时，会在每页的开头有一个小的黑方框。 <br />当set newpage n 时，会在页和页之间隔着n个空行。 <br />当set newpage none 时，会在页和页之间没有任何间隔。 <br />&nbsp; <br />7).显示时，用text值代替NULL值 <br />SQL> SET NULL text <br />&nbsp; <br />8).设置一页有多少行数 <br />SQL> SET PAGES[IZE] {24|n} <br />如果设为0，则所有的输出内容为一页并且不显示列标题 <br />&nbsp; <br />9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。 <br />SQL> SET SERVEROUT[PUT] {ON|OFF}&nbsp; <br />在编写存储过程时，我们有时会用dbms_output.put_line将必要的信息输出，以便对存储过程进行调试，只有将serveroutput变量设为on后，信息才能显示在屏幕上。 <br />&nbsp; <br />10).当SQL语句的长度大于LINESIZE时，是否在显示时截取SQL语句。 <br />SQL> SET WRA[P] {ON|OFF} <br />&nbsp;&nbsp; 当输出的行的长度大于设置的行的长度时（用set linesize n命令设置），当set wrap on时，输出行的多于的字符会另起一行显示，否则，会将输出行的多于字符切除，不予显示。 <br />&nbsp; <br />11).是否在屏幕上显示输出的内容，主要用与SPOOL结合使用。 <br />SQL> SET TERM[OUT] {ON|OFF} <br />&nbsp;&nbsp; 在用spool命令将一个大表中的内容输出到一个文件中时，将内容输出在屏幕上会耗费大量的时间，设置set termspool off后，则输出的内容只会保存在输出文件中，不会显示在屏幕上，极大的提高了spool的速度。 <br />&nbsp; <br />12).将SPOOL输出中每行后面多余的空格去掉 <br />SQL> SET TRIMS[OUT] {ON|OFF}&nbsp; <br />&nbsp;&nbsp;&nbsp; <br />13)显示每个sql语句花费的执行时间 <br />set TIMING&nbsp; {ON|OFF} <br /><br />14). 遇到空行时不认为语句已经结束，从后续行接着读入。<br />SET SQLBLANKLINES ON<br />Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:<br />select deptno, empno, ename<br />from emp<br /><br />where empno = '7788';<br />如果拷贝到sql*plus中执行, 就会出现错误。这个命令可以解决该问题<br /><br />15).设置DBMS_OUTPUT的输出<br />SET SERVEROUTPUT ON BUFFER 20000<br />用dbms_output.put_line('strin_content');可以在存储过程中输出信息，对存储过程进行调试<br />如果想让dbms_output.put_line('&nbsp;&nbsp;&nbsp;&nbsp; abc');的输出显示为：<br />SQL>&nbsp;&nbsp;&nbsp;&nbsp; abc，而不是SQL>abc，则在SET SERVEROUTPUT ON后加format wrapped参数。<br /><br />16). 输出的数据为html格式<br />set markup html<br />在8.1.7版本(也许是816? 不太确定)以后, sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.<br />注意其中的spool on, 当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候, 会看到spool文件中出现了等tag.<br /><br /><br />14．修改sql buffer中的当前行中，第一个出现的字符串 <br />C[HANGE] /old_value/new_value <br />SQL> l <br />&nbsp;&nbsp; 1* select * from dept <br />SQL> c/dept/emp <br />&nbsp;&nbsp; 1* select * from emp <br />&nbsp; <br />15．编辑sql buffer中的sql语句 <br />EDI[T] <br />&nbsp; <br />16．显示sql buffer中的sql语句，list n显示sql buffer中的第n行，并使第n行成为当前行 <br />L[IST] [n] <br />&nbsp; <br />17．在sql buffer的当前行下面加一行或多行 <br />I[NPUT] <br />&nbsp; <br />18．将指定的文本加到sql buffer的当前行后面 <br />A[PPEND] <br />SQL> select deptno, <br />&nbsp;&nbsp; 2&nbsp; dname <br />&nbsp;&nbsp; 3&nbsp; from dept; <br />&nbsp;&nbsp;&nbsp;&nbsp; DEPTNO DNAME <br />---------- -------------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 ACCOUNTING <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 RESEARCH <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 SALES <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40 OPERATIONS <br />&nbsp; <br />SQL> L 2 <br />&nbsp;&nbsp; 2* dname <br />SQL> a ,loc <br />&nbsp;&nbsp; 2* dname,loc <br />SQL> L <br />&nbsp;&nbsp; 1&nbsp; select deptno, <br />&nbsp;&nbsp; 2&nbsp; dname,loc <br />&nbsp;&nbsp; 3* from dept <br />SQL> / <br />&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; DEPTNO DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOC <br />---------- -------------- ------------- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp; NEW YORK <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 RESEARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DALLAS <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 SALES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHICAGO <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40 OPERATIONS&nbsp;&nbsp;&nbsp;&nbsp; BOSTON <br />&nbsp; <br />19．将sql buffer中的sql语句保存到一个文件中 <br />SAVE file_name <br />&nbsp; <br />20．将一个文件中的sql语句导入到sql buffer中 <br />GET file_name <br />&nbsp; <br />21．再次执行刚才已经执行的sql语句 <br />RUN <br />or <br />/ <br />&nbsp; <br />22．执行一个存储过程 <br />EXECUTE procedure_name <br />&nbsp; <br />23．在sql*plus中连接到指定的数据库 <br />CONNECT user_name/passwd@db_alias <br />&nbsp; <br />24．设置每个报表的顶部标题 <br />TTITLE <br />&nbsp; <br />25．设置每个报表的尾部标题 <br />BTITLE <br />&nbsp; <br />26．写一个注释 <br />REMARK [text] <br />&nbsp; <br />27．将指定的信息或一个空行输出到屏幕上 <br />PROMPT [text] <br />&nbsp; <br />28．将执行的过程暂停，等待用户响应后继续执行 <br />PAUSE [text] <br />&nbsp; <br />Sql>PAUSE Adjust paper and press RETURN to continue. <br />&nbsp; <br />29．将一个数据库中的一些数据拷贝到另外一个数据库（如将一个表的数据拷贝到另一个数据库） <br />COPY {FROM database | TO database | FROM database TO database} <br />{APPEND|CREATE|INSERT|REPLACE} destination_table <br />[(column, column, column, ...)] USING query <br />&nbsp; <br />sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST&nbsp; <br />create emp_temp <br />USING SELECT * FROM EMP <br />&nbsp; <br />30．不退出sql*plus，在sql*plus中执行一个操作系统命令： <br />HOST <br />&nbsp; <br />Sql> host hostname <br />该命令在windows下可能被支持。 <br />&nbsp; <br />31．在sql*plus中，切换到操作系统命令提示符下，运行操作系统命令后，可以再次切换回sql*plus： <br />! <br />&nbsp; <br />sql>! <br />$hostname <br />$exit <br />sql> <br />&nbsp; <br />该命令在windows下不被支持。 <br />&nbsp; <br />32．显示sql*plus命令的帮助 <br />HELP <br />如何安装帮助文件： <br />Sql>@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql <br />Sql>help index <br />&nbsp; <br />33．显示sql*plus系统变量的值或sql*plus环境变量的值 <br />Syntax <br />SHO[W] option <br />where option represents one of the following terms or clauses: <br />system_variable <br />ALL <br />BTI[TLE] <br />ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY| <br />TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name] <br />LNO <br />PARAMETERS [parameter_name] <br />PNO <br />REL[EASE] <br />REPF[OOTER] <br />REPH[EADER] <br />SGA <br />SPOO[L] <br />SQLCODE <br />TTI[TLE] <br />USER <br />&nbsp; <br />1) . 显示当前环境变量的值： <br />Show all <br />&nbsp; <br />2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息 <br />Show error <br />当创建一个函数、存储过程等出错时，变可以用该命令查看在那个地方出错及相应的出错信息，进行修改后再次进行编译。 <br />&nbsp; <br />3) . 显示初始化参数的值： <br />show PARAMETERS [parameter_name] <br />&nbsp; <br />4) . 显示数据库的版本： <br />show REL[EASE] <br />&nbsp; <br />5) . 显示SGA的大小 <br />show SGA <br />&nbsp; <br />6). 显示当前的用户名 <br />show user<br /><br />34.查询一个用户下的对象<br />SQL>select * from tab;<br />SQL>select * from user_objects;<br /><br />35.查询一个用户下的所有的表<br />SQL>select * from user_tables;<br /><br />36.查询一个用户下的所有的索引<br />SQL>select * from user_indexes;<br /><br /><br />37. 定义一个用户变量<br />方法有两个：<br />a. define<br />b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]<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; OLD_V[ALUE] variable&nbsp; [NOPRI[NT]|PRI[NT]]<br /><br />下面对每种方式给予解释：<br />a. Syntax<br />DEF[INE] [variable]|[variable = text]<br />定义一个用户变量并且可以分配给它一个CHAR值。<br /><br />assign the value MANAGER to the variable POS, type:<br />SQL> DEFINE POS = MANAGER<br /><br />assign the CHAR value 20 to the variable DEPTNO, type:<br />SQL> DEFINE DEPTNO = 20<br /><br />list the definition of DEPTNO, enter<br />SQL> DEFINE DEPTNO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ―――――――――――――――<br />DEFINE DEPTNO = ”20” (CHAR)<br /><br />定义了用户变量POS后，就可以在sql*plus中用&amp;POS或&amp;&amp;POS来引用该变量的值，sql*plus不会再提示你给变量输入值。<br /><br />b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]<br />NEW_V[ALUE] variable<br />指定一个变量容纳查询出的列值。<br />例:column col_name new_value var_name noprint<br />&nbsp;&nbsp; select col_name from table_name where ……..<br />将下面查询出的col_name列的值赋给var_name变量.<br /><br />一个综合的例子:<br />得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):<br />column redo_writes new_value commit_count<br /><br />select sum(stat.value) redo_writes<br />from v$sesstat stat, v$statname sn<br />where stat.statistic# = sn.statistic#<br />and sn.name = 'user commits';<br /><br />-- 等待一会儿(此处为10秒);<br />execute dbms_lock.sleep(10);<br /><br />set veri off<br />select sum(stat.value) - &amp;commit_count commits_added<br />from v$sesstat stat, v$statname sn<br />where stat.statistic# = sn.statistic#<br />and sn.name = 'user commits';<br /><br /><br />38. 定义一个绑定变量<br />VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]<br />定义一个绑定变量，该变量可以在pl/sql中引用。<br />可以用print命令显示该绑定变量的信息。<br />如：<br />column inst_num&nbsp; heading "Inst Num"&nbsp; new_value inst_num&nbsp; format 99999;<br />column inst_name heading "Instance"&nbsp; new_value inst_name format a12;<br />column db_name&nbsp;&nbsp; heading "DB Name"&nbsp;&nbsp; new_value db_name&nbsp;&nbsp; format a12;<br />column dbid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading "DB Id"&nbsp;&nbsp;&nbsp;&nbsp; new_value dbid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format 9999999999 just c;<br /><br />prompt<br />prompt Current Instance<br />prompt ~~~~~~~~~~~~~~~~<br /><br />select d.dbid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbid<br />&nbsp;&nbsp;&nbsp;&nbsp; , d.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db_name<br />&nbsp;&nbsp;&nbsp;&nbsp; , i.instance_number inst_num<br />&nbsp;&nbsp;&nbsp;&nbsp; , i.instance_name&nbsp;&nbsp; inst_name<br />&nbsp; from v$database d,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v$instance i;<br /><br />variable dbid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number;<br />variable inst_num&nbsp;&nbsp; number;<br />begin<br />&nbsp; :dbid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :=&nbsp; &amp;dbid;<br />&nbsp; :inst_num&nbsp; :=&nbsp; &amp;inst_num;<br />end;<br />/<br />说明：<br />在sql*plus中，该绑定变量可以作为一个存储过程的参数，也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值，可以用print命令<br /><br />注意：<br />绑定变量不同于变量：<br />1．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义方法不同<br />2．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引用方法不同<br />绑定变量：:variable_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量：&amp;variable_name or &amp;&amp;variable_name<br />3.在sql*plus中，可以定义同名的绑定变量与用户变量，但是引用的方法不同。<br /><br />39. &amp;与&amp;&amp;的区别<br />&amp;用来创建一个临时变量，每当遇到这个临时变量时，都会提示你输入一个值。<br />&amp;&amp;用来创建一个持久变量，就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&amp;&amp;命令引用这个变量时，不会每次遇到该变量就提示用户键入值，而只是在第一次遇到时提示一次。<br /><br />如，将下面三行语句存为一个脚本文件，运行该脚本文件，会提示三次，让输入deptnoval的值：<br />select count(*) from emp where deptno = &amp;deptnoval;<br />select count(*) from emp where deptno = &amp;deptnoval;<br />select count(*) from emp where deptno = &amp;deptnoval;<br /><br />将下面三行语句存为一个脚本文件，运行该脚本文件，则只会提示一次，让输入deptnoval的值：<br />select count(*) from emp where deptno = &amp;&amp;deptnoval;<br />select count(*) from emp where deptno = &amp;&amp;deptnoval;<br />select count(*) from emp where deptno = &amp;&amp;deptnoval;<br /><br />40．在输入sql语句的过程中临时先运行一个sql*plus命令(摘自www.itpub.com)<br />#<br />有没有过这样的经历? 在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.<br /><br />比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:<br /><br />SQL> select deptno, empno, ename<br />2 from emp<br />3 where<br />这时, 你发现你想不起来工资的列名是什么了.<br /><br />这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入<br /><br />SQL>> select deptno, empno, ename<br />2 from emp<br />3 where<br />6 #desc emp<br />Name Null? Type<br />----------------------------------------- -------- --------------<br />EMPNO NOT NULL NUMBER(4)<br />ENAME VARCHAR2(10)<br />JOB VARCHAR2(9)<br />MGR NUMBER(4)<br />HIREDATE DATE<br />SAL NUMBER(7,2)<br />COMM NUMBER(7,2)<br />DEPTNO NUMBER(2)<br /><br />6 sal > 4000;<br /><br />DEPTNO EMPNO ENAME<br />---------- ---------- ----------<br />10 7839 KING<br /><br />41. SQLPlus中的快速复制和粘贴技巧(摘自www.cnoug.org)<br />1) 鼠标移至想要复制内容的开始 <br />2) 用右手食指按下鼠标左键 <br />3) 向想要复制内容的另一角拖动鼠标，与Word中选取内容的方法一样 <br />4) 内容选取完毕后（所选内容全部反显），鼠标左键按住不动，用右手中指按鼠标右键 <br />5) 这时，所选内容会自动复制到SQL*Plus环境的最后一行
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/160283#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 10:49:59 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/160283</link>
        <guid>http://itren.javaeye.com/blog/160283</guid>
      </item>
          <item>
        <title>知道JavaEye有BLOG，但是今天是第一次写文章</title>
        <author>laitaogood</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://itren.javaeye.com">laitaogood</a>&nbsp;
                    链接：<a href="http://itren.javaeye.com/blog/94852" style="color:red;">http://itren.javaeye.com/blog/94852</a>&nbsp;
          发表时间: 2007年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>早知道JavaEye有BLOG，但是今天是第一次写文章！</p>
<p>马上就要真正进入到社会了，去参加工作了，但是有时候感觉很迷茫，没有个前辈来指点迷津！！</p>
<p>呵呵，今天算是报个到吧，以后接着写~~~~~~~~~~</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://itren.javaeye.com/blog/94852#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Jun 2007 21:32:54 +0800</pubDate>
        <link>http://itren.javaeye.com/blog/94852</link>
        <guid>http://itren.javaeye.com/blog/94852</guid>
      </item>
      </channel>
</rss>