<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>xo_tobacoo</title>
    <description></description>
    <link>http://xo-tobacoo.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>java执行批更新</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/211530" style="color:red;">http://xo-tobacoo.javaeye.com/blog/211530</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-outline-level: 2"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">Statement, PreparedStatement</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">和<span lang="EN-US"> CallableStatement </span>都有<span lang="EN-US">addBatch()</span>方法用来把<span lang="EN-US">sql</span>加入待处理的队列中。<span lang="EN-US"></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">executeBatch() </span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">用来执行批处理，它返回一个数组，反映了每次更新的数据情况，由下面三个值：<span lang="EN-US"></span></span></p>
<ul type="disc" style="MARGIN-TOP: 0cm">
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">EXECUTE_FAILED:</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">抛出了一场，批处理过程出错<span lang="EN-US">.</span></span></li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">SUCCESS_NO_INFO:</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">语句没有返回相关被更新的数据数目<span lang="EN-US">.</span></span></li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">0&nbsp;或者 更多:</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">更新的数目<span lang="EN-US">.</span></span></li>
</ul>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">看下面例子，如果批处理过程出错则会回滚所有：<span lang="EN-US"> </span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">Listing 7-11: Performing Batch Updates</span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">// batch updates</span></p>
<p><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">
<div class="quote_title">例子：</div>
<div class="quote_div">import java.sql.*; <br /><br />import java.io.*; <br /><br />class SimpleExample <br /><br />{ <br /><br />static DataInputStream stdin = new DataInputStream(System.in); <br /><br /><br /><br />public static void main(String args[]) <br /><br />{ <br /><br />String url = "jdbc:odbc:mysource"; <br /><br />try <br /><br />{ <br /><br />Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <br /><br />Connection myConnection = <br /><br />DriverManager.getConnection(url, "javauser", "hotjava"); <br /><br />myConnection.setAutoCommit(false); <br /><br /><br /><br />Statement stmt = myConnection.createStatement(); <br /><br /><br /><br />String record = null; <br /><br />try { <br /><br />while ((record = stdin.readLine()) != null) { <br /><br />String currency = record.substring(0, <br /><br />record.indexOf(",")); <br /><br />String rate = <br /><br />record.substring(record.indexOf(",") + 1); <br /><br /><br /><br />String sql = "UPDATE currencies SET <br /><br />rate = " + <br /><br />rate + " WHERE currency = &lsquo;" + <br /><br />currency + "&lsquo;"; <br /><br />stmt.addBatch(sql); <br /><br />} <br /><br />stmt.executeBatch(); <br /><br />myConnection.commit(); <br /><br />} catch (BatchUpdateException e) { <br /><br />System.out.println("An exception occurred after <br /><br />" + e.getUpdateCounts() + " updates."); <br /><br />myConnection.rollback(); <br /><br />} <br /><br />myConnection.close(); <br /><br />} <br /><br />catch(java.lang.Exception ex) <br /><br />{ <br /><br />ex.printStackTrace(); <br /><br />} <br /><br />} <br /><br />} <br /><br /><br /></div>
<font face="宋体" style="mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt;">
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan">&nbsp;</p>
</font></span>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan">&nbsp;</p>
</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan">&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/211530#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 13:53:20 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/211530</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/211530</guid>
      </item>
      <item>
        <title>JAVA中各种格式化</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/211046" style="color:red;">http://xo-tobacoo.javaeye.com/blog/211046</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一、保留小数位</p>
<p>1.<strong>(double) (Math.round(sd3*10000)/10000.0);&nbsp;</strong></p>
<p>这样为保持4位</p>
<p><strong>(double) (Math.round(sd3*100)/100.0);</strong></p>
<p>这样为保持2位.</p>
<p>&nbsp;</p>
<p>&nbsp;2.另一种办法</p>
<p><strong>import java.text.DecimalFormat; </strong></p>
<p><strong>DecimalFormat df2&nbsp; = new DecimalFormat("###.00");</strong></p>
<p><strong>DecimalFormat df2&nbsp; = new DecimalFormat("###.000");</strong></p>
<p><strong>System.out.println(df2.format(doube_var));</strong></p>
<p>第一个为2位,第二个为3位.</p>
<p>&nbsp;</p>
<p>二、日期格式化</p>
<p>public String DoFormatDate(java.util.Date dt_in, boolean bShowTimePart_in) {</p>
<p>&nbsp;if (bShowTimePart_in) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; return (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(dt_in);</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;else return (new SimpleDateFormat("yyyy-MM-dd")).format(dt_in); </p>
<p>} </p>
<p>&nbsp;</p>
<p>三、字符串：使用正则表达式</p>
<p>........</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/211046#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 14:14:26 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/211046</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/211046</guid>
      </item>
      <item>
        <title>ResultSet参数设置和更新（翻译总结）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/210933" style="color:red;">http://xo-tobacoo.javaeye.com/blog/210933</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ResultSet参数设置和更新</p>
<p>ResultSet中保存了 query查询语句执行的结果，因此被用来扫描（检索，定位）数据。不过，也可以用来导航数据和进行个别的更新。接下来我们来看下细节：</p>
<p>一、导航 ResultSet数据</p>
<p>只要数据库允许这些操作，JDBC提供了下面几个方法都可以用来导航ResultSet中数据。</p>
<p>ResultSet&rsquo;s Methods for Navigating Rows </p>
<p>boolean next();</p>
<p>boolean previous();</p>
<p>boolean first();</p>
<p>boolean last();</p>
<p>void beforeFirst();</p>
<p>void afterLast();</p>
<p>boolean relative(int n);</p>
<p>boolean absolute(int n);</p>
<p>boolean next()游标位置后移一个，如果当前是最后一行了，那么返回false</p>
<p>boolean previous()游标位置前移一个，如果当前是第一行，则返回false</p>
<p>oolean first() 游标位置返回第一行，如果不存在（查询结果为空），那么返回false</p>
<p>boolean last()游标位置返回最后一行，如果不存在（查询结果为空），那么返回fals</p>
<p>void beforeFirst()返回到最开始，它的下一行是第一行数据。</p>
<p>void afterLast()返回到最后，它的上一行是最后一行数据</p>
<p>boolean relative(int n) 以当前位置为基准，跳n个位置，如果n为正那么往后移动n行，如果为负那往前移动n行。</p>
<p>boolean absolute(int n)为正，则以第一行为基准，跳到第n行，为负，则从最后一行往前跳n行.</p>
<p>二、ResultSet的三种类型参数</p>
<p>缺省情况下创建的ResultSet 是一种只能访问一次（one-time-through），只能向前访问（forward-only），只读的对象。您只能访问数据一次，如果再次需要该数据，必须重新查询数据库。</p>
<p>ResultSet.TYPE_SCROLL_SENSITIVE</p>
<p>双向滚动，并及时跟踪数据库的更新,以便更改ResultSet中的数据。允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录，那个记录将从 ResultSet 中消失。类似的，对数据值的更改也将反映在 ResultSet 中。(其它人对记录的修改会反应到你打开的记录集&nbsp;&nbsp; 敏感)</p>
<p>ResultSet.TYPE_SCROLL_INSENSITIVE</p>
<p>双向滚动，但不及时更新，就是如果数据库里的数据修改过，并不在ResultSet中反应出来。允许在列表中向前或向后移动，甚至可以进行特定定位，例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。(其它人对记录的修改不会反应到你打开的记录集&nbsp;&nbsp; 不敏感)</p>
<p>TYPE_FORWORD_ONLY</p>
<p>只可向前滚动。缺省类型,不会受到其他用户对该数据库所作更改的影响。只允许向前访问一次，并且不会受到其他用户对该数据库所作更改的影响。</p>
<p>.<br />三、ResultSet 和事务处理参数</p>
<p>ResultSet 一般会被关闭，在事务的commit 或者 rollback被执行后.但是有时候你要保留ResultSet继续被使用怎么办？看下面参数:</p>
<p>HOLD_CURSORS_OVER_COMMIT: ResultSet的数据仍然可以被存取在commit 或者 rollback之后.<br />CLOSE_CURSORS_AT_COMMIT: ResultSet的数据被抛弃在 commits 或者 rollbacks执行后.<br />四、 并发性参数 </p>
<p>ResultSet 的数据可以被更新的，为了达到这个目的要做的一件事情就是和数据库保持连接，然后就是使用一些锁机制在更新期间保护数据。并发等级参数有下面两个:</p>
<p>CONCUR_READ_ONLY: 不允许更新<br />CONCUR_UPDATABLE: 允许并发同步更新数据 <br />五、参数的设置方法：</p>
<p>java.sql.Connection 在使用createStatement(), prepareStatement(), 和 prepareCall() 方法的时候设置参数:</p>
<p>Statement createStatement(int resultSetType, int concurrencyLevel)</p>
<p>Statement createStatement(int resultSetType, int concurrencyLevel,</p>
<p>&nbsp;int resultSetHoldability)</p>
<p>PreparedStatement prepareStatement(String sql, int resultSetType,</p>
<p>&nbsp;int concurrencyLevel)</p>
<p>PreparedStatement prepareStatement(String sql, int resultSetType,</p>
<p>&nbsp;int concurrencyLevel, int resultSetHoldability)</p>
<p>CallableStatement prepareCall(String sql, int resultSetType, int concurrencyLevel)</p>
<p>CallableStatement prepareCall(String sql, int resultSetType,</p>
<p>&nbsp;int concurrencyLevel, int resultSetHoldability)</p>
<p>六、不使用游标更新数据</p>
<p>Listing 7-8: Updating a ResultSet without Using Cursors </p>
<p><br />&nbsp;</p>
<p>// updating resultsets</p>
<p>import java.sql.*;</p>
<p>class SimpleExample</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[])</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String url = "jdbc:odbc:mysource";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p>
<p>&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; Connection myConnection =</p>
<p>&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; DriverManager.getConnection(url, "javauser", </p>
<p>&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; "hotjava");</p>
<p>&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; Statement stmt = myConnection.createStatement(</p>
<p>ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);</p>
<p>&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; ResultSet rs = stmt.executeQuery("SELECT phone FROM </p>
<p>&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; employees WHERE location = &lsquo;Paris&rsquo;");</p>
<p>&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; while (rs.next()) {</p>
<p>&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; String phone = rs.getString(1);</p>
<p>&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; if (!phone.equals("")) {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // add a telephone prefix</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.updateString("phone", "+31 " + </p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phone);</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.updateRow();</p>
<p>&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; }</p>
<p>&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; }</p>
<p>&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; rs.close();</p>
<p>&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; stmt.close();</p>
<p>&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; myConnection.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(java.lang.Exception ex)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>也可以删除更新数据。</p>
<p>It is also possible to delete rows and insert rows using the ResultSet interface. Deleting a row is performed with ResultSet.deleteRow(). The current position within the ResultSet will be set after the row just deleted. Inserting a row is performed with ResultSet.moveToInsertRow(), which actually creates a logical row in the result set. Using the updateXXX() methods on this row sets values for each column in that row. ResultSet.insertRow() is then used to physically send that row to the database.</p>
<p>七、使用游标更新数据</p>
<p>使用游标的条件：</p>
<p>有SELECT语句<br />有一个名字<br />有一个位置<br />根据游标的名字来更新和删除ResultSet中的数据<br /><span style="color: #ff0000;">游标机制 Figure 7-1.见附件</span></p>
<p><br />Figure 7-1: The cursor mechanism. </p>
<p>怎么样使用游标</p>
<p>void ResultSet.setCursorName(String name);</p>
<p>String ResultSet.getCursorName();</p>
<p>boolean DatabaseMetaData.supportsPositionedDelete();</p>
<p>boolean DatabaseMetaData.supportsPositionedUpdate();</p>
<p>supportsPositionedDelete()：如果支持位置的delete语句，那么返回true</p>
<p>supportsPositionedUpdate()：如果支持位置的update语句，那么返回true. </p>
<p>例子：</p>
<p>Listing 7-9: A Positioned Delete </p>
<p><br />&nbsp;</p>
<p>// cursors: positioned delete</p>
<p>import java.sql.*;</p>
<p>class SimpleExample</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[])</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String url = "jdbc:odbc:mysource";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection myConnection =</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DriverManager.getConnection(url, "javauser", "hotjava");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement firstStmt = myConnection.createStatement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement secondStmt = myConnection.createStatement();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = firstStmt.executeQuery(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "SELECT * FROM employees FOR UPDATE");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cursor = rs.getCursorName();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // scan the resultset </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (rs.next())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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; String phone = rs.getString("phone");</p>
<p>&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; // activate positioned delete</p>
<p>&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; // for employees outside of Belgium and France</p>
<p>&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; if (!phone.startsWith("+31") || </p>
<p>&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; !phone.startsWith("+32"))</p>
<p>&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; {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondStmt.executeUpdate(</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "DELETE employees WHERE CURRENT OF " + </p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cursor);</p>
<p>&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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; firstStmt.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondStmt.close();</p>
<p>&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; myConnection.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(java.lang.Exception ex)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><br />&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<br />&nbsp;</p>
<p>Listing 7-10: A Positioned Update </p>
<p><br />&nbsp;</p>
<p>// cursors: positioned update</p>
<p>import java.sql.*;</p>
<p>class SimpleExample</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[])</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String url = "jdbc:odbc:mysource";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection myConnection = </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DriverManager.getConnection(url,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "javauser", "hotjava");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement firstStmt = myConnection.createStatement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement secondStmt = myConnection.createStatement();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = firstStmt.executeQuery("SELECT * FROM </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; employees FOR UPDATE");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cursor = rs.getCursorName();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // scan the resultset </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (rs.next())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&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; String phone = rs.getString("phone");</p>
<p>&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; // activate positioned update</p>
<p>&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; // to convert salary to EURO currency</p>
<p>&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; if (phone.startsWith("+31"))</p>
<p>&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; {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondStmt.executeUpdate(</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "UPDATE employees SET salary = salary / </p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.666 WHERE CURRENT OF " + cursor);</p>
<p>&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; }</p>
<p>&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; else if (phone.startsWith("+32"))</p>
<p>&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; {</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondStmt.executeUpdate(</p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "UPDATE employees SET salary = salary / </p>
<p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40.000 WHERE CURRENT OF " + cursor);</p>
<p>&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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; firstStmt.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondStmt.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myConnection.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(java.lang.Exception ex)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/210933#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 10:29:54 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/210933</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/210933</guid>
      </item>
      <item>
        <title>JSF的各种框架实现（对目前JSF群雄一个了解）(转)</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/208098" style="color:red;">http://xo-tobacoo.javaeye.com/blog/208098</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2>还不懂为什么要用JSF,企业开发能从中得到什么好处？不过国外似乎火得不得了。。。面向组件，也似乎很诱人。</h2>
<div class="t_msgfont" id="postmessage_251"><span class="t_tag" onclick="tagshow(event)">JSF</span>的各种框架实现<br /><br />JSF官方主页：<a href="http://java.sun.com/javaee/javaserverfaces/" target="_blank">http://java.<span class="t_tag" onclick="tagshow(event)">sun</span>.com/javaee/javaserverfaces/</a><br />JSF开发主页：<a href="https://javaserverfaces.dev.java.net/" target="_blank">https://javaserverfaces.dev.java.net/</a><br />JSF Sandbox主页（jsf-ri的一个扩展组件库）：<a href="https://javaserverfaces.dev.java.net/sandbox/" target="_blank">https://javaserverfaces.dev.java.net/sandbox/</a><br />JSF Templating主页（jsf 的一种模板语言）：<a href="https://jsftemplating.dev.java.net/" target="_blank">https://jsftemplating.dev.java.net/</a><br /><span class="t_tag" onclick="tagshow(event)">Facelets</span>主页（jsf的tiles，比tiles更加优秀）：<a href="https://facelets.dev.java.net/" target="_blank">https://facelets.dev.java.net/</a><br /><br />Myfaces主页：<a href="http://myfaces.apache.org/" target="_blank">http://<span class="t_tag" onclick="tagshow(event)">myfaces</span>.apache.org/</a><br />Myfaces tomahawk 主页（myfaces的扩展组件库，支持myfaces和jsf-ri）：<a href="http://myfaces.apache.org/tomahawk/index.html" target="_blank">http://myfaces.apache.org/tomahawk/index.html</a><br />Myfaces Sandbox主页（tomahawk的扩展库，成熟以后的sandbox组件将加入tomahawk中）：<a href="http://myfaces.apache.org/sandbox/index.html" target="_blank">http://myfaces.apache.org/sandbox/index.html</a><br />Myfaces wiki主页：<a href="http://wiki.apache.org/myfaces/" target="_blank">http://wiki.apache.org/myfaces/</a><br />Myfaces Trinidad(ADF) wiki主页（Oracle ADF 捐赠给了Apache社区， 成了myfaces的一个扩展库，名字也改为Trinidad，拥有100多个组件， 是目前最完整的jsf组件库， 部分组件库具有ajax效果，后继<span class="t_tag" onclick="tagshow(event)">版本</span>将增加更多的ajax支持，支持皮肤更换）：<a href="http://wiki.apache.org/myfaces/Trinidad" target="_blank">http://wiki.apache.org/myfaces/Trinidad</a><br />MyFaces Components主页：<a href="http://wiki.apache.org/myfaces/MyFacesComponents" target="_blank">http://wiki.apache.org/myfaces/MyFacesComponents</a><br />Myfaces showcase主页（一个专门支持jsf的网站，提供各种组件库的最新演示）：<a href="http://www.irian.at/myfaces.jsf" target="_blank">http://www.irian.at/myfaces.jsf</a><br /><br />Ajax4jsf 主页（目前基于jsf的最优雅的ajax实现，可以在不改变原有应用的基础上，为jsf添加ajax效果； 原来是exadel公司开发， 现被jboss 合并， 称为 JBoss Ajax4jsf）：<a href="http://labs.jboss.com/jbossajax4jsf/" target="_blank">http://labs.jboss.com/jboss<span class="t_tag" onclick="tagshow(event)">ajax4jsf</span>/</a><br />Richfaces主页（原来是商业的VCP，属于exadel公司，后被jboss合并， 改为JBoss richfaces，并开源了， 是基于ajax4jsf的一个扩展组件库，非常漂亮，预置了多种皮肤， 还支持自定义皮肤）：<a href="http://labs.jboss.com/jbossrichfaces/" target="_blank">http://labs.jboss.com/jbossrichfaces/</a><br />Apache Shale （Struts的后继框架， 基于jsf， 沿用了struts的诸多优点， 同时做了很多扩展，支持ajax， 分成多个部分组成， 可以根据项目情况灵活选择）主页：<a href="http://shale.apache.org/" target="_blank">http://shale.apache.org/</a><br />Seam主页（基于JSF和EJB3的优秀框架， 吸收了Ruby的思想， 非常简洁， 是目前最优秀的jsf框架， 但是其最大缺点是与中间件有关， 缺乏对商业中间件，如<span class="t_tag" onclick="tagshow(event)">web</span>logic，oracle as的支持）：<a href="http://www.jboss.com/products/seam" target="_blank">http://www.jboss.com/products/<span class="t_tag" onclick="tagshow(event)">seam</span></a><br /><br />QuipuKit主页（一个jsf的扩展组件库，支持jsf-ri和myfaces，能与ajax4jsf结合， 很多组件都内置ajax特性， 效果非常不错， 是商业的）：<a href="http://www.teamdev.com/quipukit/index.jsf" target="_blank">http://www.teamdev.com/quipukit/index.jsf</a><br />ICEFaces主页（曾经是商业的，后来开源了， 采用一种新颖的&ldquo;推&rdquo;技术实现ajax， 交互速度非常快， 而且还提供了企业版，企业版是收费的， 提供了一些企业级特性， 如集群支持等）：<a href="http://www.icefaces.org/main/home/index.jsp" target="_blank">http://www.icefaces.org/main/home/index.jsp</a><br />RCFaces主页（一个开源的组件库， 内置ajax支持， 组建库较为完善， 但是缺乏文档和社区支持）：<a href="http://www.rcfaces.org/" target="_blank">http://www.rcfaces.org/</a><br /><br />Sun Blueprints主页（sun提供的一个开源扩展组建库，内置ajax支持，组建实现效果非常好， 部分组建支持j2ee1.4，基于jsf1.1， 部分组建基于jsf1.2，只支持java ee 5环境）：<a href="https://blueprints.dev.java.net/" target="_blank">https://blueprints.dev.java.net/</a><br />Sun Jsf-Extentsions主页（sun 公司实现的一个类似于ajax4jsf的扩展库，为应用提供ajax支持，同时这个项目也参考了一些apache shale的特点， 将项目分为多个部分， 可以根据情况灵活选择，目前已经有不少组件库是基于jsf-<span class="t_tag" onclick="tagshow(event)">ext</span>entions实现，比如woodstock）：<a href="https://jsf-extensions.dev.java.net/nonav/mvn/" target="_blank">https://jsf-extensions.dev.java.net/nonav/mvn/</a><br />Sun WoodStock 主页(sun 提供的一个jsf组件库，目前非常活跃， 更新速度较快， 支持ajax， 支持皮肤， 非常漂亮， 还实现了一些其他组件库没有实现过的组建， 值得关注)：<a href="https://woodstock.dev.java.net/index.html" target="_blank">https://woodstock.dev.java.net/index.html</a></div>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/208098#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jun 2008 09:30:12 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/208098</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/208098</guid>
      </item>
      <item>
        <title>使用异步Servlet处理挂起线程</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/207505" style="color:red;">http://xo-tobacoo.javaeye.com/blog/207505</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="h1b"><span style="color: #000000;">使用异步Servlet处理挂起线程</span></span></p>
<p><span class="h1b">AJAX应用程序的典型容量规划数可能会是标准Web应用程序的3到4倍。 　　有人可能会问：这对WebLogic Server有何影响?每个发送给WebLogic的HTTP请求都要使用一个执行线程。根据AJAX编程的性质以及许多短期的请求会以轮询的形式不断发送的情况，该行为模式可能造成大量客户端请求不断冲击服务器的局面。多年来，WebLogic都将这一问题考虑在内，并构建了一个相当棒的特性，即FutureResponseServlet。该范型构建于异步servlet理念的基础之上..............</span></p>
<p>&nbsp;</p>
<p><span class="h1b">本人菜鸟，不知道这种服务器异步的处理概念是否解决了一些实际问题？</span></p>
<p>&nbsp;</p>
<p>在网上搜到的几篇参考文献地址：</p>
<p>官方原文：<a href="http://dev2dev.bea.com.cn/techdoc/2008/3/asynchron">http://dev2dev.bea.com.cn/techdoc/2008/3/asynchron</a></p>
<p>&nbsp;</p>
<p><a href="http://www.theserverside.com/news/thread.tss?thread_id=40560">http://www.theserverside.com/news/thread.tss?thread_id=40560</a></p>
<p>&nbsp;</p>
<p><a href="http://www.miiceic.org.cn/01/200605291750074.asp">http://www.miiceic.org.cn/01/200605291750074.asp</a></p>
<p>&nbsp;</p>
<p><a href="http://www.netinter.cn/info/html/chengxusheji/Javajishu/20080225/34675.html">http://www.netinter.cn/info/html/chengxusheji/Javajishu/20080225/34675.html</a></p>
<p>&nbsp;</p>
<p>我们javaeye的旧一篇<a href="http://pipboy.group.javaeye.com/group/topic/3367">http://pipboy.group.javaeye.com/group/topic/3367</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>请路过评论！谢谢</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/207505#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 14:58:13 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/207505</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/207505</guid>
      </item>
      <item>
        <title>JDBC3.0 的excute()</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/207103" style="color:red;">http://xo-tobacoo.javaeye.com/blog/207103</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1、&nbsp;SQL queries&nbsp;返回 result sets; SQL updates 返回被更新的数据数目. 有时候我们可能不知道执行的SQL将使查询还是更新或者混合两种混合类型！这时候excute出场了。</p>
<p class="para"><strong class="bold">Statement提供了下面的方法用来处理返回类型的多样化问题。</strong> </p>
<pre class="programlisting">boolean execute(String sql);
ResultSet getResultSet();
int getUpdateCount();
boolean getMoreResults();
boolean getMoreResults(int current);</pre>
<p>2、Excute（）方法可以返回的是多个result组成的results集合，result可以是ResultSet ，整数或者两者混合（result相当于一个数组里面存有ResultSet 和整数）。注意到excute()方法的返回式布尔型，如果执行成功返回的是True，如果是失败是False。</p>
<p>第二个方法getResultSet();测试当前的result，如果是集合，那么返回一个ResultSet,如果是Null那么说明当前的结果集是一个整数 ，可以使用第三个方法getUpdateCount();获得更新的数目。</p>
<p>第三和第四个方法用来移动到下一个result.如果下一个result是ResultSet那么返回true,如果null或者证书那么返回的是false.</p>
<p>第四个方法有三个参数，分别意义如下：</p>
<li class="first-listitem">
<p class="first-para"><span class="fixed">CLOSE_CURRENT_RESULT</span>: 只要返回下一个result，那么关闭当前的result</p>
</li>
<li class="listitem">
<p class="first-para"><span class="fixed">KEEP_CURRENT_RESULT</span>: 当取下一个result时不关闭当前的result</p>
</li>
<li class="listitem">
<p class="first-para"><span class="fixed">CLOSE_ALL_RESULTS</span>: 关闭前面所有的result当开始下一个时.当<span class="fixed">(!getMoreResults() &amp;&amp; (getUpdateCount() == -1))时已经移动到了集合的最后一个</span>.</p>
</li>
<li class="listitem">
<pre name="code" class="java">...
Connection myConnection = DriverManager.getConnection(url,
                          "javauser", "hotjava");
Statement myStatement = myConnection.createStatement();
ResultSet rs;
if (myStatement.execute(sqlStatement))
{
         // we have a ResultSet
         rs = myStatement.getResultSet();
         while (rs.next())
         {
                 // process the rows
         }
}
else
{
         // we have an update count
         System.out.println(myStatement.getUpdateCount());
}
myStatement.close();
myConnection.close();
...
...</pre>
<p class="first-para">&nbsp;</p>
</li>
<li class="listitem">
<p class="first-para">处理多种返回类型&nbsp;</p>
</li>
<li class="listitem">
<pre name="code" class="java">...
...
Connection myConnection = DriverManager.getConnection(url,
    "javauser", "hotjava");
Statement myStatement = myConnection.createStatement();
boolean resultSetIsAvailable;
boolean moreResultsAvailable;
int i = 0;
int res=0;
resultSetIsAvailable = myStatement.execute(sqlText);
ResultSet rs = null;
for (moreResultsAvailable = true; moreResultsAvailable; )
{
         if (resultSetIsAvailable)
         {
                 if ((rs = myStatement.getResultSet()) != null) {
                          // we have a resultset
                          ResultSetMetaData rsmd = rs.getMetaData();
                          int numCols = rsmd.getColumnCount();
                          // display column headers
                          for (i = 1; i &lt;= numCols; i++)
                          {
                                  if (i &gt; 1) System.out.print(", ");
                                  System.out.print(
                                  rsmd.getColumnLabel(i));
                          }
                          System.out.println("");
                          // step through the rows
                          while (rs.next())
                          {
                                  // process the columns
                                  for (i = 1; i &lt;= numCols; i++)
                                  {
                                           if (i &gt; 1)
                                           System.out.print(", ");
                                           System.out.print(rs.getString(i));
                                  }
                                  System.out.println("");
                          }
                 }
         }
         else
         {
                 if ((res = curStmt.getUpdateCount()) != -1)
                 {
                          // we have an updatecount
                          System.out.println(res + " row(s) affected.");
                 }
                 // else no more results
                 else
                 {
                          moreResultsAvailable = false;
                 }
         }
         if (moreResultsAvailable)
         {
                 resultSetIsAvailable = 
                    myStatement.getMoreResults(Statement.CLOSE_ALL_RESULTS);
         }
}
if (rs != null) rs.close();
myStatement.close();
...
...</pre>
<p class="first-para">&nbsp;</p>
3、另外两个常用的方法：</li>
<p class="para"><strong class="bold">Statement的Cancel&nbsp;方法：</strong> </p>
<pre class="programlisting">void cancel();</pre>
<p>&nbsp;</p>
<pre name="code" class="java">...
java.sql.Statement myStatement =
myConnection.createStatement();
ResultSet rs = myStatement.executeQuery("SELECT name, title, salary FROM
employees");
int i = 0;
while (rs.next()) {
         // increment the counter
         i++;
         // print the columns of the row that was retrieved
         String empName = rs.getString("name");
         String empTitle = rs.getString("title");
         long empSalary = rs.getLong("salary");
         System.out.println("Employee " + empName + " is " + empTitle + " 
                          and earns $" + empSalary);
         // cancel all results if 100 rows of data were already
         // retrieved
         if (i &gt;= 100) myStatement.cancel();
}
...
...</pre>
<p>&nbsp;</p>
<p class="para"><strong class="bold">ResultSet的Close 方法：ResultSet不需要使用了</strong></p>
<pre class="programlisting">void close();</pre>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/207103#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Jun 2008 14:26:26 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/207103</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/207103</guid>
      </item>
      <item>
        <title> JTA事务与JDBC事务的区别(转)</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/205781" style="color:red;">http://xo-tobacoo.javaeye.com/blog/205781</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="bright-message-list">JTA事物是一个容器级事物,JTA提供了跨Session的事务管理能力。这一点是与JDBC 事物的最大差异。<br />
JDBC事务由Connnection管理，也就是说，事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期之类。<br />
同样，对于基于JDBC事物的Hibernate事务管理机制而言，事务管理在Session 所依托的JDBC Connection中实现，事务周期限于Session的生命周期。<br />
<br />
 <br />
<br />
JTA事务则由容器实现,JTA容器对当前加入事务的众多Connection进行调度,实现其事务性要求.JTA的事务周期可横跨多个JDBC Connection生命周期。<br />
<br />
同样对于基于JTA事务的Hibernate而言，JTA事务横跨可横跨多个Session。</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/205781#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 14:26:28 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/205781</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/205781</guid>
      </item>
      <item>
        <title>好书：大话设计模式</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/205629" style="color:red;">http://xo-tobacoo.javaeye.com/blog/205629</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>绝对好书！刚工作几个月！设计模式老早就在学，可是一直似懂非懂！最近看了一下大话设计模式，果如其说，通俗易懂！好书！</p>
<p>虽然是c#实现，不过代码简单，很容易懂！</p>
<p>建议对设计模式还处于似懂非懂的同志看看，肯定有质变</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/205629#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 09:46:24 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/205629</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/205629</guid>
      </item>
      <item>
        <title>org.apache.commons.logging基础</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/205210" style="color:red;">http://xo-tobacoo.javaeye.com/blog/205210</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>从应用观点，首先需要的就是装载一个引用LogFactory实例的对象以便为这个应用创建一个Log实例。这通常通过调用静态的getFactory()方法完成。这个方法实现了如下的<span><a href="http://clk.qunsee.com/click/click.php?cpid=12&amp;ads_id=849&amp;pid=99000176&amp;cid=180&amp;url=http%3A//www.luxee.com&amp;k=%u53D1%u73B0&amp;s=http%3A//www.cn-teacher.com/fuwu/dn/bcjs/javajc/200704/192177_2.html&amp;rn=898216&amp;v=1&amp;ref=http%3A//www.cn-teacher.com/fuwu/dn/bcjs/javajc/200704/192177_3.html&amp;province=%u4E0A%u6D77&amp;city=%u4E0A%u6D77" class="qs_highlight1" id="hl_4" onmouseover="window.clearTimeout(_ht[4]);qs_show_frame(event,this,4);" onclick="_write_cookie('click849',4);" target="_blank" onmouseout="_on_div[4]=false;_ht[4]=window.setTimeout('qs_is_on_div(4)',500);" style="font-size: 1em;">发现</a>
</span>
算法来选择LogFactory实现类的名字并在应用中使用它：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; &middot;检查org.apache.commons.logging.LogFactory的系统属性。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; &middot;使用JDK 1.3 JAR服务发现机制（参见</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;">&nbsp;&nbsp;&nbsp;
<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html" target="_blank">http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html</a>获得更多信息）来查找名为META-
INF/services/org.apache.commons.logging.LogFactory的资源，其中第一行既包含了需要的类名。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 10.5pt;">&nbsp; &middot;在应用程序的classpath中查找名为common-logging.properties的属性文件，其中的org.apache.commons.logging.LogFactory属性定义了期望的实现类的名字。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; &middot;回到到默认的实现中，这个接下来会介绍。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; 如果<span><a href="http://clk.qunsee.com/click/click.php?cpid=510&amp;ads_id=723&amp;pid=99000176&amp;cid=180&amp;url=http%3A//www.qunsee.com/promotion.php&amp;k=%u627E%u5230&amp;s=http%3A//www.cn-teacher.com/fuwu/dn/bcjs/javajc/200704/192177_2.html&amp;rn=161043&amp;v=1&amp;ref=http%3A//www.cn-teacher.com/fuwu/dn/bcjs/javajc/200704/192177_3.html&amp;province=%u4E0A%u6D77&amp;city=%u4E0A%u6D77" class="qs_highlight1" id="hl_1" onmouseover="window.clearTimeout(_ht[1]);qs_show_frame(event,this,1);" onclick="_write_cookie('click723',1);" target="_blank" onmouseout="_on_div[1]=false;_ht[1]=window.setTimeout('qs_is_on_div(1)',500);" style="font-size: 1em;">找到</a>
</span>
commons-logging.properties文件，其中定义的所有属性将被用来配置LogFactory实例的属性。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp;
一旦选中一个实现类的类名，对应的类将从当前线程的类装载器（如果有）中被装载，或者从类装载器中装载LogFactory自己。这将允许在多个类装载器
（如servlet容器）中共享一份commons-logging.jar的拷贝，但仍然允许每个web应用程序提供自己的LogFactory的实
现，如果需要的话。该类的一个实例将被创建，并且</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">默认LogFactory实现</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; 日志包APIs中包含了一个默认的实现类</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">（org.apache.commons.logging.impl.LogFactoryImpl），当没有发现其他实现类时将选择他。他的主要目的是通过调用getInstance()方法创建（如果需要）并返回一个Log实例。默认实现使用如下规则：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">&middot;至多只有一个同名的Log实例被创建。以后的使用相同名字或类参数的getInstance()方法都将调用同一个LogFactory实例，并将返回同一个Log实例。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; &middot;当一个Log实例确实被创建后，默认的LogFactory实现使用如下的发现机制：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt;">&middot;查找org.apache.commons.logging.Log系统属性（为了和先前的1.0版的API兼容，org.apache.commons.logging.log的系统属性也别将被考虑）。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt;">&middot;查找名为org.apache.commons.logging.Log的工厂配置属性。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt;">&middot;如果Log4J日志系统在应用程序的classpath中是有效的，则使用对应的类包（Log4JcategoryLog）。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt;">&middot;如果应用程序使用JDK1.4系统，则使用Jdk14Logger包。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt;">&middot;如果都没有，则回到默认的不输出日志包（NoOpLog）。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; &middot;从线程类装载器（任何）中装载这个指定的类，或者从类装载器中装载LogFacory。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&middot;例示一个选定的Log实现类的实例，将此指定的名字作为唯一的参数传给它的构造方法。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">如果你想让当前的日志输出到System.out上，但没有安装任何三种提供的日志包中的任何一个，一个名为SimpleLog的简单的Log实现将生效。基于上述规则你可以选用它，在命令行包含一个系统属性定义来启动你的应用程序：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;&nbsp;&nbsp; java</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -D org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">MyApplication</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">参见SimpleLog的JavaDoc以获得此实现的详细的配置信息。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">配置日志系统的优先级</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;&nbsp;&nbsp; 基本原理是用户完全为优先的日志系统负责。Common-logging不会改变存在的配置。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;&nbsp;&nbsp; 每个单独的Log实现都可以提供他自己的配置属性。这在对应的实现类的类发布中说明。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">&nbsp;&nbsp;&nbsp; 最后，一些Log实现（如Log4J）需要为整个日志系统提供一个外部的配置文件。这个文件需要在实际的日志使用中用一个特别的方法来准备。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">使用日志包APIs</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">&nbsp;&nbsp;&nbsp; 按如下步骤在应用程序组件中使用日志APIs。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 45.75pt; text-indent: -24.75pt;">1．
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过调用工厂方法LogFactory.getInstance(String
name)获取一个org.apache.commons.logging.Log实例的引用，你的应用程序可以包含多种日志系统的引用以应付各种目的。
一个典型的方案是为服务程序的各个主要部件使用他们自己的Log实例。</p>
<p>2．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过调用适当的方法（debug(),info(),warn(),error(),和fatal()）等将信息记录起来（如果对应的级别是可用的）。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/205210#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 16:28:38 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/205210</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/205210</guid>
      </item>
      <item>
        <title>group by注意事项</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/204763" style="color:red;">http://xo-tobacoo.javaeye.com/blog/204763</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>select <span style="text-decoration: underline;">u1,sum(u2),u3,sum(u4)</span>
 from yu <span style="text-decoration: underline;">group by&nbsp; u2, u3</span>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A位置&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;&nbsp; B位置</p>
<p>A位置中没有出现在B位置的字段必须使用聚集函数，在B位置出现的字段分组，分组的含义就是这些字段都相等的合并为一条数据。</p>
<p>如上面sql的行已就是：把u2,u3相等的记录合并为一条，u2，u4的值为加总的。</p>
<p>&nbsp;</p>
<p>下面的sql我在分组里加上了u4，结果集就有很大的不同</p>
<p>select <span style="text-decoration: underline;">u1,sum(u2),u3,sum(u4)</span>
 from yu <span style="text-decoration: underline;">group by&nbsp; u2, u3,u4</span>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>主要是理解&ldquo;分组&rdquo;的含义</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/204763#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 17:47:37 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/204763</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/204763</guid>
      </item>
      <item>
        <title>js 操作XML，一次性解决（转贴自网络）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/204046" style="color:red;">http://xo-tobacoo.javaeye.com/blog/204046</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="cnt">
<p>精确掌握相关知识的学习网址 ：<a href="http://www.w3school.com.cn/xmldom/dom_nodes.asp">http://www.w3school.com.cn/xmldom/dom_nodes.asp</a></p>
<p>超经典</p>
<p>&lt;script language=javascript&gt;<br />var str = "&lt;input&gt;11112345&lt;/input&gt;";<br />var doc = new xml( str );<br />alert(doc);</p>
<p>//创建一个dom对象<br />function xml(str){<br />if(window.DOMParser)//firefox内核的浏览器<br />{<br />var p = new DOMParser();<br />return p.parseFromString( str, "text/xml" );<br />}<br />else if( window.ActiveXObject )//ie内核的浏览器<br />{<br />var doc = new ActiveXObject( "Msxml2.DOMDocument" );<br />doc.loadXML(str);<br />return doc;<br />}<br />else<br />return false;<br />}<br />&lt;/script&gt;</p>
<p>........................</p>
<p>if(!!document.all)<br />{<br />alert('当前浏览器为IE,IE兼容');<br />}<br />else<br />{<br />alert('当前浏览器为FireFox,FireFox兼容');<br />}</p>
<p>-------</p>
<p>一般情况下，将数据放到一个节点的属性上，这样最容易操作，</p>
<p>例如xml格式为：</p>
<p>&lt;photo attr1="1" attr2="2"&gt;&lt;/photo&gt;</p>
<p>如果得到photo节点后，可以如下操作：</p>
<p>node.getAttribute(''attr1'');</p>
<p>这样可以得到属性的值。</p>
<p>第二种情况，如果是放入的节点之间，比如:</p>
<p>&lt;photo&gt;这是我的照片&lt;/photo&gt;</p>
<p>这样可以用node.firstChild.data来获取数据，其中photo之间的内容被看作一个文本节点，因此必须用firstChild首先得到这个节点后，然后取其data信息。</p>
<p>第三种情况，如果信息包含一个html或者其他xml无法直接认识的内容，可以将其放入cdata中，这样js也可以很容易处理，跟第二种情况一样：xml代码如下：</p>
<p>&lt;photo&gt;&lt;![CDATA[&lt;a href="这是我的照片的连接"&gt;这是我的照片&lt;/a&gt;]]&gt;&lt;/photo&gt;</p>
<p><br />-------------<br />&lt;script language="JavaScript"&gt;<br />&lt;!--<br />var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM") <br />doc.loadXML('&lt;?xml version="1.0"?&gt;&lt;students&gt;&lt;name id="test"&gt;&lt;firstname&gt;王&lt;/firstname&gt;&lt;/name&gt;&lt;/students&gt;');</p>
<p>&nbsp;var newnode = doc.createNode(1,"name","");<br />&nbsp;&nbsp; var r = doc.createAttribute("id");&nbsp;&nbsp;&nbsp; //创建属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.value="test2";<br />&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newnode.setAttributeNode(r); //添加属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />var newelement=doc.createElement("sex");//创建元素</p>
<p><br />&nbsp;var r1 = doc.createAttribute("id");&nbsp;&nbsp;&nbsp; //创建属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r1.value="test2";<br />newelement.setAttributeNode(r1)<br />newnode.appendChild(newelement)<br />doc.lastChild.appendChild(newnode)<br />&nbsp;&nbsp; alert(doc.xml)//添加一个子节点后的ｘｍｌ<br />&nbsp;currNode=doc.documentElement.childNodes.item(0);//<br />doc.documentElement.removeChild(currNode)//删除节点</p>
<p>&nbsp;alert(doc.xml)//删除后的ｘｍｌ</p>
<p>//--&gt;<br />&lt;/script&gt;</p>
<p>------------------<br />&lt;script language="JavaScript"&gt;<br />&lt;!--<br />var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM") </p>
<p><br />//加载文档<br />//doc.load("b.xml");</p>
<p>//创建文件头<br />var p = doc.createProcessingInstruction("xml","version='1.0'&nbsp; encoding='gb2312'");</p>
<p>&nbsp;&nbsp;&nbsp; //添加文件头<br />&nbsp;&nbsp;&nbsp; doc.appendChild(p);</p>
<p>//用于直接加载时获得根接点<br />//var root = doc.documentElement;</p>
<p>//两种方式创建根接点<br />//&nbsp;&nbsp;&nbsp; var root = doc.createElement("students");<br />&nbsp;&nbsp;&nbsp; var root = doc.createNode(1,"students","");</p>
<p>&nbsp;&nbsp;&nbsp; //创建子接点<br />&nbsp;&nbsp;&nbsp; var n = doc.createNode(1,"ttyp","");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定子接点文本<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //n.text = " this is a test";<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //创建孙接点<br />&nbsp;&nbsp;&nbsp; var o = doc.createElement("sex");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.text = "男";&nbsp;&nbsp;&nbsp; //指定其文本</p>
<p>&nbsp;&nbsp;&nbsp; //创建属性<br />&nbsp;&nbsp;&nbsp; var r = doc.createAttribute("id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.value="test";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.setAttributeNode(r);</p>
<p>&nbsp;&nbsp;&nbsp; //创建第二个属性&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; var r1 = doc.createAttribute("class");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r1.value="tt";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.setAttributeNode(r1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除第二个属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.removeAttribute("class");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加孙接点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.appendChild(o);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加文本接点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.appendChild(doc.createTextNode("this is a text node."));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加注释<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n.appendChild(doc.createComment("this is a comment\n"));<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加子接点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.appendChild(n);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //复制接点<br />&nbsp;&nbsp;&nbsp; var m = n.cloneNode(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.appendChild(m);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除接点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.removeChild(root.childNodes(0));</p>
<p>&nbsp;&nbsp;&nbsp; //创建数据段<br />&nbsp;&nbsp;&nbsp; var c = doc.createCDATASection("this is a cdata");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.text = "hi,cdata";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加数据段<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.appendChild(c);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //添加根接点<br />&nbsp;&nbsp;&nbsp; doc.appendChild(root);</p>
<p>&nbsp;&nbsp;&nbsp; //查找接点<br />&nbsp;&nbsp;&nbsp; var a = doc.getElementsByTagName("ttyp");<br />&nbsp;&nbsp;&nbsp; //var a = doc.selectNodes("//ttyp");</p>
<p>&nbsp;&nbsp;&nbsp; //显示改接点的属性<br />&nbsp;&nbsp;&nbsp; for(var i= 0;i&lt;a.length;i++)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(a[i].xml);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var j=0;j&lt;a[i].attributes.length;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(a[i].attributes[j].name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //修改节点,利用XPATH定位节点<br />&nbsp;&nbsp;&nbsp; var b = doc.selectSingleNode("//ttyp/sex");<br />&nbsp;&nbsp;&nbsp; b.text = "女";</p>
<p>&nbsp;&nbsp;&nbsp; //alert(doc.xml);</p>
<p>&nbsp;&nbsp;&nbsp; //XML保存（需要在服务端，客户端用FSO）<br />&nbsp;&nbsp;&nbsp; //doc.save();<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //查看根接点XML<br />&nbsp;&nbsp;&nbsp; if(n)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(n.ownerDocument.xml);<br />&nbsp;&nbsp;&nbsp; }</p>
<p>//--&gt;<br />&lt;/script&gt;</p>
<p>-------------<br />&lt;script language="javascript"&gt;<br />&nbsp;function window.onload()<br />&nbsp;{<br />&nbsp; var domXML=new ActiveXObject("Microsoft.xmldom");<br />&nbsp; domXML.load("Sele.xml");<br />&nbsp; var myRoot=domXML.documentElement;<br />&nbsp; var myNodes2=myRoot.childNodes;<br />&nbsp; var myNode2=myNodes2.nextNode();<br />&nbsp; var tableStr="";<br />&nbsp; for(var i=0;i&lt;myNodes2.length;i++)<br />&nbsp; {<br />&nbsp;&nbsp; myNodes3=myNode2.childNodes;<br />&nbsp;&nbsp; myNode3=myNodes3.nextNode();<br />&nbsp;&nbsp; tableStr=tableStr+"&lt;tr&gt;";<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; for(var j=0;j&lt;myNodes3.length;j++)<br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; tableStr=tableStr+"&lt;td width=100 bgcolor='#F3432A'&gt;" + myNode3.text + "&lt;/td&gt;";<br />&nbsp;&nbsp;&nbsp; myNode3=myNodes3.nextNode();<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; myNode=myNodes2.nextNode();<br />&nbsp;&nbsp; tableStr=tableStr + "&lt;/tr&gt;";<br />&nbsp; }<br />&nbsp; tableStr="&lt;table width=800 border=1&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;内存&lt;/td&gt;&lt;td&gt;主板&lt;/td&gt;&lt;td&gt;硬盘&lt;/td&gt;&lt;/tr&gt;" + tableStr + "&lt;/table&gt;";<br />&nbsp; document.all.lideyongValue.innerHTML=tableStr;<br />&nbsp;}<br />&lt;/script&gt;</p>
<p>-------------</p>
<p>首先,我们需要加载这个xml文件,js中加载xml文件,是通过XMLDOM来进行的.<br />// 加载xml文档<br />loadXML&nbsp;&nbsp;&nbsp; = function(xmlFile)<br />{<br />&nbsp;&nbsp;&nbsp; var xmlDoc;<br />&nbsp;&nbsp;&nbsp; if(window.ActiveXObject)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc&nbsp;&nbsp;&nbsp; = new ActiveXObject('Microsoft.XMLDOM');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.async&nbsp;&nbsp;&nbsp; = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.load(xmlFile);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else if (document.implementation&amp;&amp;document.implementation.createDocument)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc&nbsp;&nbsp;&nbsp; = document.implementation.createDocument('', '', null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.load(xmlFile);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return xmlDoc;<br />}</p>
<p><br />xml文件对象出来了, 接下去我就要对这个文档进行操作了.<br />比如说,我们现在需要得到节点Login/Weapon/W的第一个节点的属性,那么我们可以如下进行.</p>
<p><br />// 首先对xml对象进行判断<br />checkXMLDocObj&nbsp;&nbsp;&nbsp; = function(xmlFile)<br />{<br />&nbsp;&nbsp;&nbsp; var xmlDoc&nbsp;&nbsp;&nbsp; = loadXML(xmlFile);<br />&nbsp;&nbsp;&nbsp; if(xmlDoc==null)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.location.href='/Index.aspx';<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return xmlDoc;<br />}</p>
<p>// 然后开始获取需要的Login/Weapon/W的第一个节点的属性值<br />var xmlDoc&nbsp;&nbsp;&nbsp; = checkXMLDocObj('/EBS/XML/Login.xml');<br />var v&nbsp;&nbsp;&nbsp; = xmlDoc.getElementsByTagName('Login/Weapon/W')[0].childNodes.getAttribute('Text')<br />而我在我的程序中的写法是这样子的,当然我在程序中的写法是已经应用到实际中的了.一并给出来,以供查看<br />initializeSelect&nbsp;&nbsp;&nbsp; = function(oid, xPath)<br />{<br />&nbsp;&nbsp;&nbsp; var xmlDoc&nbsp;&nbsp;&nbsp; = checkXMLDocObj('/EBS/XML/Login.xml');<br />&nbsp;&nbsp;&nbsp; var n;<br />&nbsp;&nbsp;&nbsp; var l;<br />&nbsp;&nbsp;&nbsp; var e&nbsp;&nbsp;&nbsp; = $(oid);<br />&nbsp;&nbsp;&nbsp; if(e!=null)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp; = xmlDoc.getElementsByTagName(xPath)[0].childNodes;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l&nbsp;&nbsp;&nbsp; = n.length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0; i&lt;l; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var option&nbsp;&nbsp;&nbsp; = document.createElement('option');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option.value&nbsp;&nbsp;&nbsp; = n[i].getAttribute('Value');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option.innerHTML&nbsp;&nbsp;&nbsp; = n[i].getAttribute('Text');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.appendChild(option);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}<br />上面的访问代码中,我们是通过xmlDoc.getElementsByTagName(xPath)来进行的.<br />还可以通过xmlDoc.documentElement.childNodes(1)..childNodes(0).getAttribute('Text')进行访问.<br />一些常用方法:<br />xmlDoc.documentElement.childNodes(0).nodeName,可以得到这个节点的名称.<br />xmlDoc.documentElement.childNodes(0).nodeValue,可以得到这个节点的值. 这个值是来自于这样子的xml格式:&lt;a&gt;b&lt;/b&gt;, 于是可以得到b这个值.<br />xmlDoc.documentElement.childNodes(0).hasChild,可以判断是否有子节点</p>
<p>根据我的经验,最好是使用getElementsByTagName(xPath)的方法对节点进行访问,因为这样子可以直接通过xPath来定位节点,这样子会有更好的性能. </p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/204046#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 11:43:47 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/204046</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/204046</guid>
      </item>
      <item>
        <title>ant bug </title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/193051" style="color:red;">http://xo-tobacoo.javaeye.com/blog/193051</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: x-small;">1)BUILD FAILED<br />java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.getFileUtils() Lorg/apache/tools/ant/util/FileUtils;<br />at org.apache.tools.ant.taskdefs.optional.dotnet.ImportTypelib.&lt;clinit&gt;(<br />ImportTypelib.java:48) </span></p>
<p><span style="font-size: x-small;">今天换jcreator做自己的小程序，运行ant文件发现错误如上，找了半天，原来是版本不对。把之前的ant包更新就好了！</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/193051#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 17:58:24 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/193051</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/193051</guid>
      </item>
      <item>
        <title>制作自己的java可运行程序（总结）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/192657" style="color:red;">http://xo-tobacoo.javaeye.com/blog/192657</a>&nbsp;
          发表时间: 2008年05月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p class="MsoNormal"><span style="font-family: 宋体;">最常见的可运行程序是</span> <span lang="EN-US">.exe</span> <span style="font-family: 宋体;">文件；在</span> <span lang="EN-US">unix</span> <span style="font-family: 宋体;">环境中可以使用</span> <span lang="EN-US">sh.</span> <span style="font-family: 宋体;">批处理命令，在</span> <span lang="EN-US">windows</span> <span style="font-family: 宋体;">下使用</span> <span lang="EN-US">.cmd</span> <span style="font-family: 宋体;">和</span> <span lang="EN-US">.bat</span> <span style="font-family: 宋体;">批处理命令（应该还有好多吧）。</span> </p>
<p class="MsoNormal"><span style="font-family: 宋体;">下面是我今天的作的练习：调用控制台打印&ldquo;</span> <span lang="EN-US">Hi</span> <span style="font-family: 宋体;">，</span> <span lang="EN-US">Hello World!</span> <span style="font-family: 宋体;">&rdquo;。使用了两种方法，批处理和</span> <span lang="EN-US">exe</span> <span style="font-family: 宋体;">文件。</span> </p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!-- [endif]--><span style="font-family: 宋体;">编写</span> <span lang="EN-US">HelloWorld.class,</span> <span style="font-family: 宋体;">编译</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">产生</span> <span lang="EN-US">*.class</span> <span style="font-family: 宋体;">文件</span> </p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!-- [endif]--><span style="font-family: 宋体;">编写一个</span> <span lang="EN-US">mf</span> <span style="font-family: 宋体;">文件</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">后缀名为</span> <span lang="EN-US">.mf,</span> <span style="font-family: 宋体;">格式如下</span> <span lang="EN-US">:</span> </p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>Manifest-Version: 1.0[</span> <span style="font-family: 宋体;">这里可有可无</span> <span lang="EN-US">]<br /><span>&nbsp;&nbsp;&nbsp; </span>Main-Class: HelloWorld.class [</span> <span style="font-family: 宋体;">这里填写你的程序的主类名</span> <span lang="EN-US">]<br /><span>&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> </p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp; </span>Class-Path: lib/appframework-1.0.3.jar lib/swing-worker-1.1.jar lib/sw[</span> <span style="font-family: 宋体;">非必须这里是要使用的外部部包</span> <span lang="EN-US">]</span> </p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">注：文件内容还有其他非必须选项，可以查百度。另外很多编编程工具编译运行时能直接生成mf文件，如idear,neatbeans...</span> </p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!-- [endif]--><span style="font-family: 宋体;">将</span> <span lang="EN-US">mf</span> <span style="font-family: 宋体;">文件和你的</span> <span lang="EN-US">*.class</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">jar.</span> <span style="font-family: 宋体;">方法如下</span> <span lang="EN-US">:<br /></span><span style="font-family: 宋体;">进入命令行</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">输入命令</span> <span lang="EN-US">:jar cvf [jar</span> <span style="font-family: 宋体;">名字</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">随便取</span> <span lang="EN-US">].jar [mf</span> <span style="font-family: 宋体;">文件名</span> <span lang="EN-US">].mf *.class<br /></span><span style="font-family: 宋体;">注：</span> <span lang="EN-US">jar</span> <span style="font-family: 宋体;">还有其他参数，可以参考百度</span> </p>
<p class="MsoNormal"><span lang="EN-US">5</span> <span style="font-family: 宋体;">．写一个批处理文件。</span> <span lang="EN-US">[</span> <span style="font-family: 宋体;">名字，任意</span> <span lang="EN-US">].cmd</span> <span style="font-family: 宋体;">，内容如下</span> </p>
<p class="MsoNormal" align="left" style="margin: 0cm 0.9pt 0.0001pt 13.6pt; text-align: left; text-indent: -7.5pt;"><span style="font-size: 9pt; color: #000000; font-family: &quot;MS Shell Dlg 2&quot;;">@echo off </span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0.9pt 0.0001pt 13.6pt; text-align: left;"><span style="font-size: 9pt; color: #000000; font-family: &quot;MS Shell Dlg 2&quot;;">java -jar hello.jar</span> </p>
<p class="MsoNormal" align="left" style="margin: 0cm 0.9pt 0.0001pt 13.6pt; text-align: left;"><span style="font-size: 9pt; color: #000000; font-family: &quot;MS Shell Dlg 2&quot;;">pause &amp; exit</span> </p>
<p class="MsoNormal" align="left" style="margin: 0cm 0.9pt 0.0001pt 13.6pt; text-align: left;"><span style="font-family: 宋体;">注：</span> <span style="font-size: 9pt; color: #000000; font-family: &quot;MS Shell Dlg 2&quot;;">@echo off</span> <span style="font-size: 9pt; color: #000000; font-family: 宋体;">程序开始，</span> <span style="font-size: 9pt; color: #000000; font-family: &quot;MS Shell Dlg 2&quot;;">pause &amp; exit</span> <span style="font-size: 9pt; color: #000000; font-family: 宋体;">暂停</span> </p>
<p class="MsoNormal"><span lang="EN-US"><!-- [if gte vml 1]><v:shapetype id="_x0000_t75"
 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
 filled="f" stroked="f">
 <v:stroke joinstyle="miter" />
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0" />
  <v:f eqn="sum @0 1 0" />
  <v:f eqn="sum 0 0 @1" />
  <v:f eqn="prod @2 1 2" />
  <v:f eqn="prod @3 21600 pixelWidth" />
  <v:f eqn="prod @3 21600 pixelHeight" />
  <v:f eqn="sum @0 0 1" />
  <v:f eqn="prod @6 1 2" />
  <v:f eqn="prod @7 21600 pixelWidth" />
  <v:f eqn="sum @8 21600 0" />
  <v:f eqn="prod @7 21600 pixelHeight" />
  <v:f eqn="sum @10 21600 0" />
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
 <o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:415.2pt;
 height:265.8pt" mce_style="width:415.2pt;
 height:265.8pt">
 <v:imagedata src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image001.png" mce_src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image001.png"
  o:title="QQ截图未命名" />
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--></span></p>
<p class="MsoNormal"><span lang="EN-US">6.</span> <span style="font-family: 宋体;">双击</span> <span lang="EN-US">cmd</span> <span style="font-family: 宋体;">文件运行，结果如</span> <span style="font-family: 宋体;">附件图</span> <span lang="EN-US">a0：</span> </p>
<p class="MsoNormal"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1026"
 type="#_x0000_t75" style="width:415.2pt;height:309.6pt" mce_style="width:415.2pt;height:309.6pt">
 <v:imagedata src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image003.png" mce_src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image003.png"
  o:title="a1" />
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--></span></p>
<p class="MsoNormal"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1027"
 type="#_x0000_t75" style="width:415.2pt;height:306.6pt" mce_style="width:415.2pt;height:306.6pt">
 <v:imagedata src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image005.png" mce_src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image005.png"
  o:title="a2" />
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--><!-- [if gte vml 1]><v:shape id="_x0000_i1028"
 type="#_x0000_t75" style="width:415.2pt;height:309pt" mce_style="width:415.2pt;height:309pt">
 <v:imagedata src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image007.png" mce_src="file:///C:\DOCUME~1\qi_liu\LOCALS~1\Temp\msohtml1\01\clip_image007.png"
  o:title="a3" />
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--></span></p>
<p class="MsoNormal"><span lang="EN-US"><br />7.</span> <span style="font-family: 宋体;">制作</span> <span lang="EN-US">exe</span> <span style="font-family: 宋体;">文件：打开</span> <span lang="EN-US">exe4j</span> <span style="font-family: 宋体;">这个软件</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">按照步骤即可包刚才的</span> <span lang="EN-US">jar</span> <span style="font-family: 宋体;">文件导入</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">制作成</span> <span lang="EN-US">exe</span> <span style="font-family: 宋体;">文件</span> <span lang="EN-US">. &nbsp;</span> <span lang="EN-US">主要设置参考如下，请注意红色提醒部分,附件图a1,a2,a3&nbsp;</span> </p>
<p class="MsoNormal">注：把java打包为exe执行的工具很多，察看baidu</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><span style="font-family: 宋体;">批处理教程网址：</span> <span lang="EN-US">http://hi.baidu.com/hksoobe/blog/item/77de0e36824a22dea2cc2bdb.html</span> </p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">后记：那些编程工具走的也是上面的过程吧？；批处理很重要的东西吧，公司用的是weblogic,要用cgwin,sh必不可少；我常见使用它的是操作系统管理员，但是批处理同时也可以用于自动化部署，但是不能跨平台，解决跨平台的可以学习ant,做一个ant文件，然后使用简单的.sh和.cmd在不同操作系统下调用即可!</p>
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/192657#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 17:39:36 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/192657</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/192657</guid>
      </item>
      <item>
        <title>提高css的可读性（翻译总结）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/190498" style="color:red;">http://xo-tobacoo.javaeye.com/blog/190498</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当你完成了项目后，非常可能马上就忘记了你的项目布局结构。为了在多年后仍然能够理解自己的代码你必须保证良好的代码组织结构。良好的结构降低复杂性，易于管理和维护。然而，怎么样才使良好的结构呢？下面介绍一些技巧供使用。<br /><br />很多开发者创造性的使用注释和文本格式提高css代码的可读性。这些方式结合css基本语法，更具有可读性的结构，并含有更多的隐含提示信息。<br /><br />本文介绍了5个技巧提高代码可管理性和可维护性。你可以把它们用到css中，也可以用到其它任何样式语言或者编程语言中。<br /><br />1.   分离你的样式<br /><br />按照标准把代码分成多个文件模块进行管理。所谓“标准”应该是从名字你能够一眼就看出此文件中代码的功能和作用范围。另外工程很大导致模块文件代码也很大，那么你可以进行再细分，把公共代码分离出来作为主样式表进行重用，虽然可能导致没有必要的服务请求，但是我们获得重用的好处。<br /><br />看下例：第一句注明是“核心样式”。接下来是版本信息，接下来是按功能分离出来的样式文件。<br /><br />/*------------------------------------------------------------------<br />[核心样式]<br /><br />Project: Smashing Magazine<br />Version: 1.1<br />Last change: 05/02/08 [fixed Float bug, vf]<br />Assigned to: Vitaly Friedman (vf), Sven Lennartz (sl)<br />Primary use: Magazine<br />-------------------------------------------------------------------*/<br />@import "reset.css";<br />@import "layout.css";<br />@import "colors.css";<br />@import "typography.css";<br />@import "flash.css";<br />/* @import "debugging.css"; */<br /><br /><br />2.定义页面结构的注释。<br /><br />为了便于他人和团队的浏览，理解，我们可以使用一些关键字，一些符号，定义一个页面整体结构视图。看下面的例子：通过注释结构我们就能了解布局结构。<br /><br />/*------------------------------------------------------------------<br />[布局设计]<br /><br />* body<br />    + Header / #header<br />    + Content / #content<br />        - Left column / #leftcolumn<br />        - Right column / #rightcolumn<br />        - Sidebar / #sidebar<br />            - RSS / #rss<br />            - Search / #search<br />            - Boxes / .box<br />            - Sideblog / #sideblog<br />    + Footer / #footer<br /><br />Navigation #navbar<br />Advertisements .ads<br />Content header h2<br />——————————————————————-*/<br /><br />…或者这样:<br /><br />/*------------------------------------------------------------------<br />[此样式的描述]<br /><br />1. Body<br />    2. Header / #header<br />        2.1. Navigation / #navbar<br />    3. Content / #content<br />        3.1. Left column / #leftcolumn<br />        3.2. Right column / #rightcolumn<br />        3.3. Sidebar / #sidebar<br />            3.3.1. RSS / #rss<br />            3.3.2. Search / #search<br />            3.3.3. Boxes / .box<br />            3.3.4. Sideblog / #sideblog<br />            3.3.5. Advertisements / .ads<br />    4. Footer / #footer<br />-------------------------------------------------------------------*/<br /><br /><br /><br />3.定义颜色和类型<br /><br /><br />定义了不易发生变化的样式之后接下来的任务就是可变或可选部分。如颜色，我们可以为颜色定义自己的颜色词典，以便快速的选择，替换。<br /><br />如下面按颜色风格定义颜色字典：<br /><br />/*------------------------------------------------------------------<br /># [关于此颜色样式风格的描述]<br /><br /># Dark grey (text): #333333<br /># Dark Blue (headings, links) #000066<br /># Mid Blue (header) #333399<br /># Light blue (top navigation) #CCCCFF<br /># Mid grey: #666666<br /># */<br /><br /><br />和上面例子稍有不同，我们可以按内容来定义颜色字典：<br /><br />/*------------------------------------------------------------------<br />[关于此颜色样式风格的描述]<br /><br />Background: #ffffff (white)<br />Content: #1e1e1e (light black)<br />Header h1: #9caa3b (green)<br />Header h2: #ee4117 (red)<br />Footer: #b5cede (dark black)<br /><br />a (standard): #0040b6 (dark blue)<br />a (visited): #5999de (light blue)<br />a (active): #cc0000 (pink)<br />-------------------------------------------------------------------*/<br /><br />类型可以使用同样的方法。如你要定义系统的字体使用。<br /><br />/*------------------------------------------------------------------<br />[此类型的描述]<br /><br />Body copy: 1.2em/1.6em Verdana, Helvetica, Arial, Geneva, sans-serif;<br />Headers: 2.7em/1.3em Helvetica, Arial, "Lucida Sans Unicode", Verdana, sans-serif;<br />Input, textarea: 1.1em Helvetica, Verdana, Geneva, Arial, sans-serif;<br />Sidebar heading: 1.5em Helvetica, Trebuchet MS, Arial, sans-serif;<br /><br />Notes: decreasing heading by 0.4em with every subsequent heading level<br />-------------------------------------------------------------------*/<br /><br /><br />4. 组织css属性：按统一的组织方式写属性，易于团队之间相互交流。<br /><br />按类型组织：<br /><br />body,<br />    h1, h2, h3,<br />    p, ul, li,<br />    form {<br />        border: 0;<br />        margin: 0;<br />        padding: 0;<br />    }<br /><br /><br />有些人按字母顺序组织：<br /><br />body {<br />    background: #fdfdfd;<br />    color: #333;<br />    font-size: 1em;<br />    line-height: 1.4;<br />    margin: 0;<br />    padding: 0;<br />}<br /><br /><br />5.使用友好的缩进风格 <br /><br />下面的缩进能表达“结构关系”：<br /><br />#main-column { display: inline; float: left; width: 30em; }<br />        #main-column h1 { font-family: Georgia, "Times New Roman", Times, serif; margin-bottom: 20px; }<br />        #main-column p { color: #333; }<br /><br /><br />下面的缩进加注释表达了“修改更新”的意思：<br /><br />#sidebar ul li a {<br />    display: block;<br />    background-color: #ccc;<br />        border-bottom: 1px solid #999; /* @new */<br />    margin: 3px 0 3px 0;<br />        padding: 3px; /* @new */<br />}<br /><br /><br />注意：过多的注释和空白会导致加载速度变慢，因此我们可以使用两个版本，一个是开发版本，一个是商业版本。商业版本使用工具进行压缩。另外我们可以根据这些注释更新需求文档。
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/190498#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 07 May 2008 10:33:15 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/190498</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/190498</guid>
      </item>
      <item>
        <title>富客户端领域sun将向adobe靠近</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/185373" style="color:red;">http://xo-tobacoo.javaeye.com/blog/185373</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          万岁！解放我吧！从那该死的js ,java,ajax的大粪中：<br /><br />大意是说： sun公司在富客户端领域将提高javaFx和adobe设计工具的互操作性，充分利用别人的优势，而不会效仿微软完全在富客户端领域重新建造自己的王国。<br /><br /><br />me: 也许这是sun公司抛的一个甜饼来引诱java程序员使用javaFX,但是仍然值得期待；或许压根不是真的，那就想象下吧。一个前端 ，一个后端，非常好的组合！期待合作，期待双赢，击败微软！<br />记得有本书：<br />Rich Internet Applications with Adobe® Flex™ & Java™<br /><br />原文：http://www.regdeveloper.co.uk/2008/01/24/javafx_tools_adobe/<br /><br />Sun Microsystems is working on interoperability between design tools from Adobe Systems and its upcoming JavaFX tools for application developers building rich application interfaces and rich-internet applications (RIAs).<br /><br />James Gosling, Sun vice president and fellow, told Register Developer that Sun is working to ensure interoperability - rather than provide its own design tools.<br /><br />"We are putting a lot of effort into interoperability with the Adobe tools - a lot of the Adobe tools are wired into the neurons of the artists of the world," he said. "We are not trying to be a completely isolated island that has all the tools for everybody."<br /><br />Unveiled last year at Sun's JavaOne, JavaFX currently comprises the Swing-based JavaFX script and JavaFX Mobile.<br /><br />JavaFX is not yet complete, and there's no word on when the suite will become available. Already, it's come in for criticism as "too little, too late".<br /><br />The rationale for JavaFX is to help content creators and developers work together when building interactive applications and interfaces running on devices including mobile phones, browsers and Blu-ray disc players.<br /><br />The JavaFX suite will deliver workflows for content creators and software programmers that are intended to be more effective than the traditional waterfall-based method of team collaboration.<br /><br />According to Gosling, analysis shows many tools generally force developers to use a waterfall-based workflow for design and development, with content or code handed off. This has problems as changes down the line mandate changes several steps back in either the design or development process.<br /><br />A big problem in digital content is things like artwork change more frequently than the code, yet changes in that artwork require re-coding, creating additional coding work and building in delay.<br /><br />Gosling said Sun's JavaFX tools are "turning the workflow sideways". He did not provide details but said: "Our architecture is more like the coder does this part and the artist does this part, and then the artist can do the plugging in [of the design] themselves. They can update the artwork and the [developer] guy can update the code, and they are talking to the tool together. It's not conditional on the other."<br /><br />JavaFX would be for both software programmers and creative types, he said.<br /><br />This sounds encouraging, but the jury remains out on Sun's ability to deliver a compelling suite in terms of features and functionality. Sun's track record is spotty at best; last month, for instance, it announced the incorporation of its most recently lauded tools effort - Java Studio Creator, plugged heavily prior to its launch - into NetBeans, and that it was stopping development of its own integrated Java tools suites.<br /><br />This time, at least, Sun looks like going straight to open source. "In the software development world, it's pretty much assumed all tools will be free," Gosling said. "We will almost certainly do the open source thing [on JavaFX tools]".<br /><br />Adobe and Microsoft are also rolling out tools and runtimes to create rich interfaces and RIAs that are also designed to close the lingering gap between developers of content and those who turn that content into software.<br /><br />Unlike Sun, Microsoft, is trying to own the entire design and code stack - witness the combo of Silverlight, Microsoft Expression, for content creators, and Visual Studio for application developers.<br /><br />The problem for Microsoft, though, is products from Adobe such as Illustrator and Photoshop are staples among creative types, while Adobe's ColdFusion and Dreamweaver segue into software development. Expression is relatively unknown and unproven while Visual Studio is comparatively unused by those creating media content.
          <br/>
          <span style="color:red;">
            <a href="http://xo-tobacoo.javaeye.com/blog/185373#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Apr 2008 11:27:01 +0800</pubDate>
        <link>http://xo-tobacoo.javaeye.com/blog/185373</link>
        <guid>http://xo-tobacoo.javaeye.com/blog/185373</guid>
      </item>
      <item>
        <title>ant 的 javac标签 （归纳）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
          链接：<a href="http://xo-tobacoo.javaeye.com/blog/185019" style="color:red;">http://xo-tobacoo.javaeye.com/blog/185019</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;javac>任务和javac命令是相似，它编译两种类型的java文件1）没有被编译的java文件2）曾经编译过，但是class文件版本和当前对应的java文件版本不匹配的java文件。<br /><br /><br />1)javac命令支持的参数：<br /><br /><br />Attributes	Description<br /><br />srcdir  ：必须的，除非嵌套有&lt;src>标签。包含源文件的文件夹<br /><br />bootclasspath：编译过程中需要导入class文件会被导入<br /><br />bootclasspathref：编译过程中需要引用的class文件夹目录 <br /><br />classpath：The class path to use. 文件夹中class会被导入的jar包<br /><br />classpathref：文件夹中class文件会被引用的jar包<br /><br />compiler	：指定要使用的编译器。如果未设置该特性，将使用 build.compiler 属性的值（如果设置）。否则，将使用当前 VM 的默认编译器。<br />例子：设置环境变量 JIKESHOME 为 jikes 的路径 <br />设置 ANT_OPTS=-Dbuild.compiler=jikes <br />将 jikes 路径添加到系统 PATH 中 <br />然后在所有的ant任务就默认使用 jikes 了, 如果你想在单个工程中使用 ant, 就不要添加 ANT_OPTS 环境变量, 只需要修改 build.xml 中 javac 标签中的 compiler 为 jikes<br /><br />debug：	当值未为true时产生调试信息<br /><br />debuglevel：	相当于命令行中要追加到 -g 命令行开关后面的关键字列表。这将会被除 modern 和 classic(ver >= 1.2) 以外的所有实现忽略。合法值是 none 或下列关键字的逗号分隔列表：lines、vars 和 source。如果不指定 debuglevel，则默认情况下，将不会在 -g 的后面追加任何关键字。如果不打开 debug，该特性将被忽略。<br /><br />depend：	这个任务依赖的任务。当运行这个任务时，首先按照顺序依次执行完依赖的任务，如果出错将停止执行<br /><br />deprecation：	假如为真，将会给出不建议使用的API，默认值false<br /><br />destdir：	编译后文件存放的目标文件夹，默认是当前文件夹。<br /><br />encoding：指定编码格式<br /><br />excludes	：必须排除的文件模式的列表，以逗号或空格分隔。如果忽略，将不会排除任何文件（默认排除的文件除外）。<br /><br />excludesfile：	该文件的每一行都将作为一个 exclude 模式。<br />extdirs:	Specifies an alternative location of installed extensions that overrides the default.<br /><br />failonerror:	指定 clientgen Ant 任务在出现错误的情况下是否继续执行。 此特性的有效值为 True 或 False。默认值为 True，这意味着即使遇到错误也要继续执行。<br /><br />fork:	为true时在外部启用一个新的JDK 编译器进程执行编译。默认值是true,应用在需要配置编译器运行时环境时<br /><br />includeantruntime	:指出是否应在类路径中包括 Ant 运行时程序库，默认为 yes。<br /><br />includejavaruntime:	指出是否应在类路径中包括来自执行 VM 的默认运行时程序库，默认为 no。<br /><br />includes:	必须包括的文件模式的列表，以逗号或空格分隔。如果忽略，将包括所有文件。<br />includesfile:	文件名。该文件的每一行都将作为一个 include 模式。<br /><br />listfiles:	为