﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-yutian727</title><link>http://www.blogjava.net/yutian727/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 09:50:34 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 09:50:34 GMT</pubDate><ttl>60</ttl><item><title>loadrunner监控linux和weblogic安装文档</title><link>http://www.blogjava.net/yutian727/archive/2008/02/25/181932.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Mon, 25 Feb 2008 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2008/02/25/181932.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/181932.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2008/02/25/181932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/181932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/181932.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很久没上来活动了，一来没什么新的学习东西，这一年有些堕落了，二来嘛，工作就是重复，可能是太笨了，没什么新的领悟<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过这两天有意思了，我学习了一下压力测试的东西，loadRunner，以前听同事们说过，感觉是个很有意思的东西，可是一直没有机会学。现在好了，给别人做了回助手，也了解了一下loadRunner的一些使用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不想在这里讨论使用，我还不够资格，讲些安装吧，说一下如何用lr来监控linux和weblogic，这可是我自己的安装心得哦。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对linux的安装有些来自网上，出处有些记不清了，反正查了很多，可是多少有些问题，我做了下说明，可以参考。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>一、loadrunner监控linux安装文档</p>
<p>1．安装rsh，和rsh-server两个服务包。<br />
a.&nbsp;&nbsp;&nbsp; 卸载rsh<br />
rpm &#8211;q rsh----------查看版本号</p>
<p>说明：如果版本存在，则直接安装rpc.rstatd-4.0.1.tar.gz<br />
　　　如果版本不存在，则在linux安装包下找rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm<br />
　　　可能版本不一致，但是均可使用</p>
<p>B．安装</p>
<p>rpm &#8211;ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm</p>
<p><br />
2． 下载并安装rstatd（这个包在我的共享目录下也有）<br />
gunzip rpc.rstatd-4.0.1.tar.gz </p>
<p>tar &#8211;cvf rpc.rstatd-4.0.1.tar</p>
<p>./configure ---配置<br />
make ---编译</p>
<p>说明：a.如果在linux下不能解压，则在window下解压，然后拷到linux下，目录不定，用户为root用户<br />
　　　b.修改configure文件的使用权限<br />
　　　&nbsp; chmod 777 configure<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.按照上面的步骤操作</p>
<p>3。 打开/etc/xinetd.conf <br />
里面内容是：<br />
# Simple configuration file for xinetd<br />
#<br />
# Some defaults, and include /etc/xinetd.d/<br />
defaults<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instances&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 60<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = SYSLOG authpriv<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_on_success&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = HOST PID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_on_failure&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = HOST<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 25 30<br />
}<br />
includedir /etc/xinetd.d</p>
<p>4．重启xinetd：</p>
<p>A:<br />
service xinetd reload</p>
<p>说明：可能会有提示出现，不用处理，直接进入下一步</p>
<p>6．在启动rstatd：<br />
　　进入你rpc.rstatd-4.0.1.tar.gz的解压文件目录<br />
　　rpc.rstatd</p>
<p>7.查看rstatd是否启动：</p>
<p>rpcinfo &#8211;p</p>
<p>如果能看到：&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100001&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; 618 rstatd</p>
<p>&nbsp;&nbsp;&nbsp; 100001&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; 618 rstatd</p>
<p>&nbsp;&nbsp;&nbsp; 100001&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; 618 rstatd</p>
<p>&nbsp;&nbsp;&nbsp; 100001&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; 618 rstatd</p>
<p>就说明rstatd服务已经启动。可以用LR去监视了。</p>
<p>&nbsp;</p>
<p>二、loadrunner监控weblogic8.1</p>
<p>1.拷贝weblogic.jar到${lr_home}/classes下，同时，删除jmxri.jar或者修改jmxri.jar为任何名称<br />
2.修改${lr_home}/dat/monitors下的WebLogicMon.ini文件，内容如下：<br />
&nbsp; 原始内容为：JVM=javaw.exe JavaVersion=1.4;JavaVendor=Sun Microsystems Inc.<br />
　修改后内容为：JVM=D:\bea\jdk141_03\bin\javaw.exe JavaVersion=1.4;JavaVendor=Sun Microsystems Inc.<br />
　其中D:\bea\jdk141_03\bin\javaw.exe为自己本地weblogic的jdk所在位置<br />
　javaVersion为weblogic所用的jdk版本号<br />
　<br />
　在网上有的要求修改Weblogic=weblogic.jar　Port=1112，要求把PORT修改为7001，但在这里的实际安装过程中，没有做修改。<br />
3.配置如何监控lr的weblogic(jmx)<br />
　打开weglogic(jmx),添加度量<br />
　其中监控的计算机名称为：ip:7001，如192.168.1.88:7001，平台选择所写ip的OS<br />
&nbsp; 然后点击下面的资源度量的添加，输入登录的用户名和密码，此处的用户名和密码为：ip所在OS上的weblogic的登录用户名和密码<br />
　在点击确定后会出现需要监控的资源信息，可以选择自己感兴趣的方面进行监控<br />
</p>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/yutian727/aggbug/181932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2008-02-25 11:10 <a href="http://www.blogjava.net/yutian727/archive/2008/02/25/181932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.String中，match()的用法，即String.match(String pattern)</title><link>http://www.blogjava.net/yutian727/archive/2007/12/03/164959.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Mon, 03 Dec 2007 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/12/03/164959.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/164959.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/12/03/164959.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/164959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/164959.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: String.match()方法&nbsp;&nbsp;<a href='http://www.blogjava.net/yutian727/archive/2007/12/03/164959.html'>阅读全文</a><img src ="http://www.blogjava.net/yutian727/aggbug/164959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-12-03 18:04 <a href="http://www.blogjava.net/yutian727/archive/2007/12/03/164959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]</title><link>http://www.blogjava.net/yutian727/archive/2007/11/12/159888.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Mon, 12 Nov 2007 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/11/12/159888.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/159888.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/11/12/159888.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/159888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/159888.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <div twffan="done">
            <p>１、如何将java.util.Date转化为java.sql.Date?<br />
            转化：<br />
            <br />
            java.sql.Date sd;<br />
            java.util.Date ud;<br />
            //initialize the ud such as ud = new java.util.Date();<br />
            <br />
            sd = new java.sql.Date(ud.getTime());<br />
            <br />
            ２、如果要插入到数据库并且相应的字段为Date类型<br />
            那么可以用PreparedStatement.setDate(int ,java.sql.Date)方法<br />
            其中的java.sql.Date可以用上面的方法得到<br />
            <br />
            也可以用数据库提供TO_DATE函数<br />
            比如 现有 ud<br />
            TO_DATE(new SimpleDateFormat().format(ud,"yyyy-MM-dd HH:mm:ss"),<br />
            "YYYY-MM-DD HH24:MI:SS")<br />
            注意java中表示格式和数据库提供的格式的不同<br />
            </p>
            <p>一个实际的例子 </p>
            <p>sql="update tablename set timer=to_date('"+t+"','yyyymmddhh24miss') where ....." </p>
            <p>这里的t为变量为类似:20051211131223</p>
            <p>&nbsp;</p>
            </div>
            <p>３、如何将"yyyy-mm-dd"格式的字符串转换为java.sql.Date</p>
            <p>方法１</p>
            <p>SimpleDateFormat bartDateFormat =&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new SimpleDateFormat("yyyy-MM-dd");&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dateStringToParse = "2007-7-12";&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Date date = bartDateFormat.parse(dateStringToParse);&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date sqlDate = new java.sql.Date(date.getTime());<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(sqlDate.getTime());&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex) {&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ex.getMessage());&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>------------------------------------------------------------<br />
            方法２<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp; strDate&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "2002-08-09";&nbsp;&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer&nbsp;&nbsp;&nbsp;&nbsp; st&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer(strDate,&nbsp;&nbsp;&nbsp;&nbsp; "-");&nbsp;&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date&nbsp;&nbsp;&nbsp;&nbsp; date&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date(Integer.parseInt(st.nextToken()),<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt(st.nextToken()),<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt(st.nextToken()));</p>
            &nbsp;&nbsp;
            <div twffan="done">java.util.Date和java.sql.Date的异同</div>
            <div twffan="done"></div>
            <div twffan="done">java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类（包装类）。
            <div twffan="done"><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是为什么java.sql.Date类型的值插入到数据库中Date字段中会发生数据截取呢？</div>
            <div twffan="done"><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date是为了配合SQL DATE而设置的数据类型。&#8220;规范化&#8221;的java.sql.Date只包含年月日信息，时分秒毫秒都会清零。格式类似：YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时，java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此，如果数据库中存在的非规范化部分的信息将会被劫取。</div>
            <br />
            <div twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在sun提供的ResultSet.java中这样对getDate进行注释的：<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #6b8e23" twffan="done">Retrieves the of the designated column in the current row of this &lt;code&gt;ResultSet&lt;/code&gt; object as a &#8220;java.sql.Date&#8221; object in the Java programming language.</span></div>
            
            <div twffan="done"><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同理。如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时，java程序会对传入的java.sql.Date规范化，非规范化的部分将会被劫取。然而，我们java.sql.Date一般由java.util.Date转换过来，如：java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).<br />
            显然，这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值，<br />
            我们需要利用java.sql.Timestamp.<br />
            </div>
            <div twffan="done"><strong>Calendar</strong></div>
            <div twffan="done"><br />
            Calendar&nbsp;&nbsp; calendar=Calendar.getInstance();&nbsp;&nbsp;<br />
            //获得当前时间，声明时间变量&nbsp;&nbsp;<br />
            int&nbsp;&nbsp; year=calendar.get(Calendar.YEAR);&nbsp;&nbsp;<br />
            //得到年<br />
            int&nbsp;&nbsp; month=calendar.get(Calendar.MONTH);&nbsp;&nbsp;<br />
            //得到月，但是，月份要加上1&nbsp;&nbsp;<br />
            month=month+1; <br />
            int&nbsp;&nbsp; date=calendar.get(Calendar.DATE);&nbsp;&nbsp;<br />
            //获得日期&nbsp;&nbsp;<br />
            String&nbsp;&nbsp; today=""+year+"-"+month+"-"+date+"";<br />
            </div>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/yutian727/aggbug/159888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-11-12 10:16 <a href="http://www.blogjava.net/yutian727/archive/2007/11/12/159888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JSF的学习笔记提纲</title><link>http://www.blogjava.net/yutian727/archive/2007/09/28/149172.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Fri, 28 Sep 2007 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/09/28/149172.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/149172.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/09/28/149172.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/149172.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/149172.html</trackback:ping><description><![CDATA[最近开始学习JSF了，有网上找了一个学习的提纲，以为不错<br />
<br />
<strong>使用JSF</strong><br />
一、入门<br />
1. hello world<br />
2. Navigation<br />
3. Navigation rules configuration<br />
4. JSF Expression Language<br />
&nbsp;&nbsp;&nbsp;#{param.name}&nbsp;&nbsp;&nbsp;隐含对象<br />
5. I18N<br />
<br />
二、Managed Beans<br />
1. Backing Bean（Glue Bean）<br />
2. Beans的状态与设置<br />
3. Beans上的List、Map<br />
<br />
三、数据转换与验证<br />
1. 标准转换器<br />
&nbsp;&nbsp;&nbsp;&lt;f: convertDateTime&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;h: message for="dateField" style="color: red"/&gt;<br />
2. 自定义转换器<br />
3. 标准验证器<br />
&nbsp;&nbsp;&nbsp;语法检验、语意检验<br />
&nbsp;&nbsp;&nbsp;&lt;f: validateLength minimum="6"/&gt;<br />
4. 自定义验证器<br />
5. 错误信息处理<br />
&nbsp;&nbsp;&nbsp;messages.properties<br />
6. 自定义转换、验证标签<br />
&nbsp;&nbsp;&nbsp;Tag Library<br />
<br />
四、事件处理<br />
1. 动作事件<br />
&nbsp;&nbsp;&nbsp;ActionEvent<br />
&nbsp;&nbsp;&nbsp;actionListener<br />
2. 即时事件<br />
&nbsp;&nbsp;&nbsp;immediate="true"<br />
3. 值变事件<br />
&nbsp;&nbsp;&nbsp;valueChangeListener<br />
4. phase（分阶段）事件<br />
<br />
<br />
<strong>JSF标签</strong><br />
一、标签入门<br />
1. 简介JSF标准标签<br />
2. 输出类标签<br />
&nbsp;&nbsp;&nbsp;1) outputLabel<br />
&nbsp;&nbsp;&nbsp;2) outputLink<br />
&nbsp;&nbsp;&nbsp;3) outputFormat<br />
&nbsp;&nbsp;&nbsp;4) outputText<br />
3. 输入类标签<br />
&nbsp;&nbsp;&nbsp;1) inputText<br />
&nbsp;&nbsp;&nbsp;2) inputTextarea<br />
&nbsp;&nbsp;&nbsp;3) inputSecret<br />
&nbsp;&nbsp;&nbsp;4) inputHidden<br />
4. 命令类标签<br />
&nbsp;&nbsp;&nbsp;1) commandButton<br />
&nbsp;&nbsp;&nbsp;2) commandLink<br />
5. 选择类标签<br />
&nbsp;&nbsp;&nbsp;1) &lt;h: selectBooleanCheckbox&gt;<br />
&nbsp;&nbsp;&nbsp;2) &lt;h: selectOneRadio&gt;、&lt;h: selectOneListbox&gt;、&lt;h: selectOneMenu&gt;<br />
&nbsp;&nbsp;&nbsp;3) &lt;h: selectManyCheckbox&gt;、&lt;h: selectManyListbox&gt;、&lt;h: selectManyMenu&gt;<br />
&nbsp;&nbsp;&nbsp;4) &lt;f: selectItem&gt;、&lt;f: selectItems&gt;<br />
<br />
二、表格处理<br />
1. 简单的表格<br />
&nbsp;&nbsp;&nbsp;&lt;h: dataTable&gt;、&lt;h: column&gt;<br />
2. 表头、表尾<br />
&nbsp;&nbsp;&nbsp;&lt;f: facetname="header"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;f: facetname="footer"&gt;<br />
&nbsp;&nbsp;&nbsp;CSS<br />
3. TableModel类别<br />
&nbsp;&nbsp;&nbsp;数组<br />
&nbsp;&nbsp;&nbsp;java.util.List<br />
&nbsp;&nbsp;&nbsp;java.sql.ResultSet<br />
&nbsp;&nbsp;&nbsp;javax.servlet.jsp.jstl.sql.Result<br />
&nbsp;&nbsp;&nbsp;javax.faces.model.DataModel<br />
<br />
<br />
<br />
参考资料：<br />
<a href="http://caterpillar.onlyfun.net/Gossip/JSF/JavaServerFaces.htm">http://caterpillar.onlyfun.net/Gossip/JSF/JavaServerFaces.htm</a> 
<img src ="http://www.blogjava.net/yutian727/aggbug/149172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-09-28 16:03 <a href="http://www.blogjava.net/yutian727/archive/2007/09/28/149172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作（二）</title><link>http://www.blogjava.net/yutian727/archive/2007/09/20/146714.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Thu, 20 Sep 2007 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/09/20/146714.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/146714.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/09/20/146714.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/146714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/146714.html</trackback:ping><description><![CDATA[<strong>二、Jakarta&nbsp;Commons&nbsp;dbutils：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;用JDBC&nbsp;API时最令人讨厌的就是异常处理，也很烦琐，而且很容易出错，本人曾考虑过利用模板进行处理，后来看到了dbutils，之后就采用那个dbutils，采用模板的方式各位朋友可以参考Spring，Spring的JdbcTemplate不灵活而强大，呵呵，说句闲话，实在太佩服Rod&nbsp;Johnson了，Rod&nbsp;Johnson真的很令人尊敬。<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dbutils的QueryRunner把大多数与关闭资源相关的封装起来，另外，你也可以使用DbUtils进行关闭，当然DbUtils提供的功能当然不止这些，它提过了几个常用的静态方法，除了上述的关闭资源外，DbUtils.&nbsp;commitAndClose(Connection&nbsp;conn)还提供事务提及等操作。<br />
还是以一个例子来说说吧，毕竟我不是搞业务的，小嘴巴吧嗒吧哒不起来啊，呵呵。<br />
&nbsp;&nbsp;&nbsp;&nbsp;为了和采用Beanutils更好的进行对比，这个例子还是实现同样的功能，数据库同样采用前一篇文章中提到的publish。<br />
同样的，用你喜欢的编辑器建立一个类DbutilsJDBCTest，示例代码如下所示:<br />
package&nbsp;cn.qtone.test;<br />
import&nbsp;java.sql.Connection;<br />
import&nbsp;java.sql.DriverManager;<br />
import&nbsp;java.sql.SQLException;<br />
import&nbsp;java.util.List;<br />
import&nbsp;java.util.Map;<br />
import&nbsp;org.apache.commons.dbutils.DbUtils;<br />
import&nbsp;org.apache.commons.dbutils.QueryRunner;<br />
import&nbsp;org.apache.commons.dbutils.handlers.MapListHandler;<br />
public&nbsp;class&nbsp;DbutilsJDBCTest{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jdbcURL&nbsp;=&nbsp;"jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&amp;characterEncoding=GBK";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jdbcDriver&nbsp;=&nbsp;"com.mysql.jdbc.Driver";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbUtils.loadDriver(jdbcDriver);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Username&nbsp;"root".&nbsp;Password&nbsp;"root"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(jdbcURL,&nbsp;"root",&nbsp;"root");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryRunner&nbsp;qRunner&nbsp;=&nbsp;new&nbsp;QueryRunner();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("***Using&nbsp;MapListHandler***");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以下部分代码采用Map存储方式，可以采用Bean的方式代替进行处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;lMap&nbsp;=&nbsp;(List)&nbsp;qRunner.query(conn,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"select&nbsp;title,authors&nbsp;&nbsp;from&nbsp;books",&nbsp;new&nbsp;MapListHandler());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以下是处理代码，可以抽取出来<br />
System.out.println("title&nbsp;-------------&nbsp;authors&nbsp;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;lMap.size();&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;vals&nbsp;=&nbsp;(Map)&nbsp;lMap.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(vals.get("title")+"-------------"+&nbsp;vals.get("authors"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(SQLException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbUtils.closeQuietly(conn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
怎么样?是不是比采用Beanutils的ResultSetDynaTrial和RowSetDynaClass好多了？采用Beanutils令人难缠的是关闭那些资源以及处理那些异常，而这里采用Dbutils显然代码量减少了很多。<br />
上例在处理结果集时，它把数据库中的每一行映射成一个Map，其中列名作为Key，该列对应的值作为Value存放，查询的所有的数据一起放在一个List里，然后进行处理，当然，一个更明智的处理是直接返回List然后再单独进行处理。<br />
事实上上例返回的结果集中的每一行不必放在一个Map里，你可以放在一个Bean里，当然如果你真的很懒，你也可以使用Beanutils的LazyDynaClass和LazyDynaBean，不过也许没有必要那么做，至于原因请看下文。<br />
<br />
如果使用Bean而不是用Map，那么，你也许需要建立一个Bean，如下：<br />
package&nbsp;cn.qtone.test;<br />
public&nbsp;class&nbsp;Book&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;title;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;authors&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;StudentBean()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getAuthors()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;authors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAuthors(String&nbsp;authors)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.authors&nbsp;=&nbsp;authors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(int&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getTitle()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;title;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setTitle(String&nbsp;title)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.title&nbsp;=&nbsp;title;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
然后简单修改一下DbutilsJDBCTest&nbsp;中的部分代码即可，代替之后的源代码如下：<br />
<br />
package&nbsp;cn.qtone.test;<br />
<br />
import&nbsp;java.sql.Connection;<br />
import&nbsp;java.sql.DriverManager;<br />
import&nbsp;java.sql.SQLException;<br />
import&nbsp;java.util.List;<br />
import&nbsp;java.util.Map;<br />
import&nbsp;org.apache.commons.dbutils.DbUtils;<br />
import&nbsp;org.apache.commons.dbutils.QueryRunner;<br />
import&nbsp;org.apache.commons.dbutils.handlers.BeanListHandler;<br />
<br />
public&nbsp;class&nbsp;DbutilsJDBCTest{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jdbcURL&nbsp;=&nbsp;"jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&amp;characterEncoding=GBK";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jdbcDriver&nbsp;=&nbsp;"com.mysql.jdbc.Driver";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbUtils.loadDriver(jdbcDriver);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Username&nbsp;"root".&nbsp;Password&nbsp;"root"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(jdbcURL,&nbsp;"root",&nbsp;"root");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryRunner&nbsp;qRunner&nbsp;=&nbsp;new&nbsp;QueryRunner();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("***Using&nbsp;BeanListHandler&nbsp;***");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以下部分代码采用Map存储方式，可以采用Bean的方式代替进行处理<br />
List&nbsp;lBeans&nbsp;=&nbsp;(List)&nbsp;qRunner.query(conn,"&nbsp;select&nbsp;title,authors&nbsp;from&nbsp;books&nbsp;",&nbsp;new&nbsp;BeanListHandler(Book.class));<br />
&nbsp;&nbsp;&nbsp;&nbsp;//以下是处理代码，可以抽取出来<br />
System.out.println("title&nbsp;-------------&nbsp;authors&nbsp;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;lBeans.size();&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Book&nbsp;vals&nbsp;=&nbsp;(Book)&nbsp;lBeans.get(i);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(vals.getTitle&nbsp;()+"-------------"+&nbsp;vals.&nbsp;getAuthors&nbsp;());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(SQLException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbUtils.closeQuietly(conn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;这两种法输出的结果应该是一样的。两种处理方式都差不多，但我更愿意采用第一种，因为第一种少写一个bean，而且我测试过采用Map的方式即第一种方式性能要好的多，采用Bean性能比较低可能是因为采用反射的缘故，采用反射的东东性能和不采用反射的还是有点差距。也是这个原因，不推荐采用LazyDynaClass和LazyDynaBean，因为采用这二者是在运行期动态创建Bean类和Bean属性，然后再创建Bean对象的，其性能可想而知了（不过我没有测试过啊，所以我说这个话可说是没有根据的，感兴趣的朋友自己测试一下，记得告诉我结果哦，呵呵），除了MapListHandler以及BeanListHandler之外，DButils还提供了其他的Handler，如果这些不能满足你的需求，你也可以自己实现一个Handler。<br />
&nbsp;&nbsp;&nbsp;&nbsp;最后，也是最大的体会,也许是最大的收获吧，那就是:对于每一个项目,在根据每一个需求获取相应解决方案时,先寻找开源组件,看是否已经有满足某些功能需求的开源组件,如果没有,再考虑自主开发或者向第三方购买，否则尽量采用开源组件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;请尽量享用开源的魅力，尽情的拥抱开源吧。<br />
<img src ="http://www.blogjava.net/yutian727/aggbug/146714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-09-20 11:09 <a href="http://www.blogjava.net/yutian727/archive/2007/09/20/146714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作（一）</title><link>http://www.blogjava.net/yutian727/archive/2007/09/20/146712.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Thu, 20 Sep 2007 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/09/20/146712.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/146712.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/09/20/146712.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/146712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/146712.html</trackback:ping><description><![CDATA[好久没有写过blog了，因为这段时间做的也就是这些，job,dblink,procedure,view等等吧，项目刚刚做完，我有幸调到金融行情的服务器部门工作，现在正在学习JAKARTA的东西．现在网上找了一下相关资料，现放在此处，以后常学习<br />
<br />
关键字：beanutils、dbutils、JDBC&nbsp;数据库<br />
摘要：本文简单介绍了Jakarta&nbsp;Commons旗下beanutils、dbutils在基于JDBC&nbsp;API数据库存取操作中的运用。<br />
&nbsp;&nbsp;&nbsp;虽然现在出现了很多ORM框架，可是还是有很多朋友也许还在使用JDBC，就像我现在一样，除了学习的时候在使用Hibernate、Spring类似这些优秀的框架，工作时一直都在使用JDBC。本文就简单介绍一下利用Jakarta&nbsp;Commons旗下beanutils、dbutils简化JDBC数据库操作，以抛砖引玉，希望对像我一样在使用JDBC的朋友有所帮助。<br />
&nbsp;&nbsp;&nbsp;&nbsp;下面就分两部分简单介绍beanutils、dbutils在基于JDBC&nbsp;API数据库存取操作中的运用。第一部分显介绍beanutils在JDBC数据库存取操作中的运用，第二部分介绍dbutils在JDBC数据库存取操作中的运用，最后看看他们的优缺点，谈谈本人在项目运用过程中对他们的一点心得体会，仅供参考，其中有错误的地方希望大虾不吝赐教，大家多多交流共同进步。<br />
一、Jakarta&nbsp;Commons&nbsp;beanutils<br />
&nbsp;&nbsp;&nbsp;&nbsp;Beanutils是操作Bean的锐利武器，其提过的BeanUtils工具类可以简单方便的读取或设置Bean的属性，利用Dyna系列，还可以在运行期创建Bean，符合懒人的习惯，正如LazyDynaBean，LazyDynaClass一样，呵呵。这些用法已经有很多文章提及，也可以参考apache的官方文档。<br />
&nbsp;&nbsp;&nbsp;&nbsp;对于直接利用JDBC&nbsp;API访问数据库时（这里针对的是返回结果集ResultSet的查询select），大多数都是采用两种方式，一种是取出返回的结果集的数据存于Map中，另一种方式是Bean里。针对第二种方式，Beanutils里提供了ResultSetDynaClass结合DynaBean以及RowSetDynaClass结合DynaBean来简化操作。下面用以个简单的例子展示一下beanutils的这两个类在JDBC数据库操作中的运用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;请在本机建立数据库publish，我用的是MySQL，在publish数据库中建立表book,脚本如下：<br />
CREATE&nbsp;TABLE&nbsp;book(<br />
&nbsp;&nbsp;id&nbsp;int(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment,<br />
&nbsp;&nbsp;title&nbsp;varchar(50)&nbsp;character&nbsp;set&nbsp;latin1&nbsp;NOT&nbsp;NULL,<br />
&nbsp;&nbsp;authors&nbsp;varchar(50)&nbsp;character&nbsp;set&nbsp;latin1&nbsp;default&nbsp;NULL,&nbsp;<br />
&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;&nbsp;(id)<br />
)&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;然后用你喜欢的编辑器建立一个类BeanutilsJDBCTest，我们先用ResultSetDynaClass来处理，然后再用RowSetDynaClass来实现同样的类，之后看看他们之间有什么不同，用ResultSetDynaClass处理的源代码如下所示:<br />
&nbsp;&nbsp;&nbsp;&nbsp;然后用你喜欢的编辑器建立一个类BeanutilsJDBCTest，我们先用ResultSetDynaClass来处理，然后再用RowSetDynaClass来实现同样的类，之后看看他们之间有什么不同，用ResultSetDynaClass处理的源代码如下所示:<br />
package&nbsp;cn.qtone.test;<br />
<br />
import&nbsp;java.sql.Connection;<br />
import&nbsp;java.sql.DriverManager;<br />
import&nbsp;java.sql.ResultSet;<br />
import&nbsp;java.sql.Statement;<br />
import&nbsp;java.util.Iterator;&nbsp;<br />
import&nbsp;org.apache.commons.beanutils.DynaBean;<br />
import&nbsp;org.apache.commons.beanutils.PropertyUtils;<br />
import&nbsp;org.apache.commons.beanutils.ResultSetDynaClass;&nbsp;<br />
public&nbsp;class&nbsp;BeanutilsJDBCTest{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;st&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("com.mysql.jdbc.Driver");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;=&nbsp;"jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&amp;characterEncoding=GBK";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con&nbsp;=&nbsp;DriverManager.getConnection(url,&nbsp;"root",&nbsp;"hyys");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;=&nbsp;con.createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;st.executeQuery("select&nbsp;*&nbsp;from&nbsp;book");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSetDynaClass&nbsp;rsDynaClass&nbsp;=&nbsp;new&nbsp;ResultSetDynaClass(rs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;itr&nbsp;=&nbsp;rsDynaClass.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("title-------------authors");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(itr.hasNext())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DynaBean&nbsp;dBean&nbsp;=&nbsp;(DynaBean)&nbsp;itr.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(PropertyUtils.getSimpleProperty(dBean,"title")+&nbsp;"-------"+&nbsp;PropertyUtils.getSimpleProperty(dBean,&nbsp;"authors"));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rs&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(st&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(con&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}&nbsp;<br />
<br />
用RowSetDynaClass处理的源代码如下所示:&nbsp;<br />
<br />
package&nbsp;cn.qtone.test;&nbsp;<br />
<br />
import&nbsp;java.sql.Connection;<br />
import&nbsp;java.sql.DriverManager;<br />
import&nbsp;java.sql.ResultSet;<br />
import&nbsp;java.sql.Statement;<br />
import&nbsp;java.util.Iterator;<br />
import&nbsp;java.util.List;&nbsp;<br />
import&nbsp;org.apache.commons.beanutils.DynaBean;<br />
import&nbsp;org.apache.commons.beanutils.PropertyUtils;<br />
import&nbsp;org.apache.commons.beanutils.RowSetDynaClass;&nbsp;<br />
<br />
public&nbsp;class&nbsp;BeanutilsJDBCTest{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;rsDynaClass&nbsp;=&nbsp;rsTest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("title&nbsp;-------------&nbsp;authors&nbsp;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;itr&nbsp;=&nbsp;rsDynaClass.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(itr.hasNext())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DynaBean&nbsp;dBean&nbsp;=&nbsp;(DynaBean)&nbsp;itr.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(PropertyUtils.getSimpleProperty(dBean,"name")&nbsp;&nbsp;+&nbsp;"-----"+&nbsp;PropertyUtils.getSimpleProperty(dBean,&nbsp;"mobile"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成&nbsp;catch&nbsp;块<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;List&nbsp;rsTest()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;st&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("com.mysql.jdbc.Driver");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;=&nbsp;"jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&amp;characterEncoding=GBK";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con&nbsp;=&nbsp;DriverManager.getConnection(url,&nbsp;"root",&nbsp;"hyys");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;=&nbsp;con.createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;=&nbsp;st.executeQuery("select&nbsp;*&nbsp;from&nbsp;book");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RowSetDynaClass&nbsp;rsdc&nbsp;=&nbsp;new&nbsp;RowSetDynaClass(rs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rsdc.getRows();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rs&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(st&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(con&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这两个方法输出的结果应该是一样的。但是很显然第二种方式比第一种方式要好，它把数据访问部分抽取出来放到一个方法中，显得简单清晰。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实在利用ResultSetDynaClass时，必须在ResultSet等数据库资源关闭之前，处理好那些数据，你不能在资源关闭之后使用DynaBean，否则就会抛出异常，异常就是说不能在ResultSet之后存取数据（具体的异常名我也忘了），当然你也可以采用以前的方式一个一个的把数据放到Map里，如果你一定要那样做，建议还是别用Beanutils，因为这没带给你什么好处。总之利用ResultSetDynaClass你的程序的扩展性非常部好。<br />
&nbsp;&nbsp;&nbsp;&nbsp;从第二中方式可以看出，利用RowSetDynaClass可以很好的解决上述ResultSetDynaClass遇到的问题，RowSetDynaClass的getRows()方法，把每一行封装在一个DynaBean对象里，然后，把说有的行放到一个List里，之后你就可以对返回的List里的每一个DynaBean进行处理，此外对于DynaBean你还可以采用标准的get/set方式处理，当然你也可以用PropertyUtils.&nbsp;getSimpleProperty(Object&nbsp;bean,&nbsp;String&nbsp;name)进行处理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;从上面的分析中，你应该可以决定你应该使用ResultSetDynaClass还是RowSetDynaClass了。<br />
<br />
<br />
未完待续&#8230;&#8230;<br />
<img src ="http://www.blogjava.net/yutian727/aggbug/146712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-09-20 11:08 <a href="http://www.blogjava.net/yutian727/archive/2007/09/20/146712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程生成临时表用从临时表中取数据</title><link>http://www.blogjava.net/yutian727/archive/2007/07/06/128617.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Fri, 06 Jul 2007 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/07/06/128617.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/128617.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/07/06/128617.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/128617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/128617.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">这两天工作还行,工作的内容就是写存储过程,对于我这个没有写过存储近程的人来说,还是有一定困难的.不过还好,在众多资源的帮助下,万事OK呀,哈哈.下面就是我写的两个存储过程.</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其一:对数据库中的原表进行每天的备份;</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其二:通过对最新的备份表进行取值操作,通过判断,向原表中插入数据.</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实这两个存储过程也没有什么难的,一方面我是这方面的新手,另一方面要操作一个临时表,而且要从中取得数据(没有传入值),我在网上找了一下,没有什么成功的例子,所以,把我这两天的成果晒一下.</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先说几个关键词(我用的时候,没少为这几个词费脑子)</p>
<p style="FONT-SIZE: 12pt">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; execute Immediate,一个执行动态SQL的东东,在每天生成备份表时,立下了汉马功劳.我的表名为:原表名+yyyymmdd<o:p></o:p></p>
<p style="FONT-SIZE: 12pt">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; creat table 表名 as select * from 已有表.这是一个创建表,我认为最快的一种方法,在创建表的同时,也可以直接把已有表中的数据也一起copy过来,呵呵,很是神奇<o:p></o:p></p>
<p style="FONT-SIZE: 12pt">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys_refcursor,这是一个cursor,很怪异的一个cursor,能够生成动态的cursor,可以多用一些,</p>
<p style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></p>
<p style="FONT-SIZE: 12pt">下面我写的存储过程,主要地业务逻辑去掉了,主要说一下过程<o:p></o:p></p>
<p style="FONT-SIZE: 12pt">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每天生成表备份的存储过程<o:p></o:p></p>
<p style="FONT-SIZE: 12pt">create or replace procedure P_HOLD_COPY Is<br>--每天结算时,为当天的持股做备份<br>--得到表名为原表名+yyyymmdd的格式<br>table_name Varchar2(20) := 'test'||To_char(Sysdate,'yyyymmdd');<br>Begin<br>&nbsp;&nbsp;&nbsp;<span style="COLOR: red"> execute Immediate 'Create Table '||table_name||' As Select * From T_STOC_HOLD';</span><br>&nbsp; Commit;<br>end P_HOLD_COPY;<br><br><o:p></o:p></p>
<p style="FONT-SIZE: 12pt">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从备份表中取得数据,然后根据数据,对原表进行操作</p>
create or replace procedure P__SHARE&nbsp; is<br>--******************************************************************<br>--存储过程名称：P_SHARE<br>--功能描述：对备份表进行数据操作<br>--******************************************************************<br>&nbsp;balance Number;<br>&nbsp;totalmoney Number;<br>&nbsp;h_amount Number;<br>&nbsp;<br>&nbsp;allot_stock Number;<br>&nbsp;allot_money Number;<br>&nbsp;<br>&nbsp;str Varchar2(1);<br>&nbsp;v_product_oid Varchar2(32);<br>&nbsp;<br>table_name Varchar2(20);<br>sqlstr Varchar2(1000);<br>&nbsp;<br>&nbsp;v_allot_row t_stoc_allot%rowtype;<br>&nbsp;v_hold_row t_stoc_hold%rowtype;<br><br><span style="COLOR: red">&nbsp;Cursor c_allot is select * from t_stoc_allot where to_char(t_stoc_allot.regdate,'yymmdd') &lt; to_char(sysdate+1,'yymmdd') And (t_stoc_allot.is_allot Is Null Or t_stoc_allot.is_allot='1');<br><br>&nbsp;c_hold sys_refcursor&nbsp; ;</span> <br>Begin<br><br>&nbsp; open c_allot;<br>&nbsp; loop<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch c_allot into v_allot_row;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">table_name :=&nbsp; 'T_STOC_HOLD'||To_char(v_allot_row.regdate,'yyyymmdd');</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_product_oid := v_allot_row.product_oid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">sqlstr := 'select * from '||table_name||' where stock_code='||v_product_oid;<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit when c_allot%NOTFOUND;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red"> open c_hold For sqlstr ;<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch c_hold into v_hold_row;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit when c_hold%NOTFOUND;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end loop;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close c_hold;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end loop;<br>&nbsp; close c_allot;<br>&nbsp; <br>&nbsp; Commit;<br>end P_SHARE;<br><br>
<img src ="http://www.blogjava.net/yutian727/aggbug/128617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-07-06 16:37 <a href="http://www.blogjava.net/yutian727/archive/2007/07/06/128617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse的远程调试(jboss+tomcat),已成功</title><link>http://www.blogjava.net/yutian727/archive/2007/07/06/128591.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Fri, 06 Jul 2007 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/07/06/128591.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/128591.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/07/06/128591.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/128591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/128591.html</trackback:ping><description><![CDATA[<p>何为远程调试？我们一般调试一个web项目的java代码时，需要将你的web服务器和你的开发工具（比如eclipse）集成，或需要工具的一些插件支持(比如Eclipse下的myclipse等)，这些方式都是在本地进行，即你的开发工具和web服务器运行在同一台服务器上，如果你的开发工具和服务器不再一台机器上那就需要实现远程调试功能了。</p>
<p>下面说明一下在tomcat中的远程调试实现:</p>
<p>在tomcat的catalina.bat文件中加入下面的设置，当然SET CATALINA_OPTS 变量应该在使用它之前。这是在tomcat启动时设置一些虚拟机参数，使服务器允许远程连接功能，address=5888表示远程连接的端口号，可以设置成任意其他不冲突端口。<br>SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888 </p>
<p>然后说明一下在jboss中的远程调试实现:<br><br>在jobss中配置远程调试比较简单,他的原理和tomcat一样,也是修改一下他的虚拟机参数,形式为:端口为8787,注意端口不要重复<br>JAVA_OPTS="$JAVA_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"<br></p>
<p>这样就Ok了，重启动web服务器,可以直接独立启动，而不用在eclipes的插件中启动。打开eclipse中的debug设置窗口，选择Remote Java Application ，新建一个debug项，输入服务器IP和刚才设置端口号，点ok就可以进入debug状态了。Jbuilder中同样可以设置Remote Java Application。</p>
<img src ="http://www.blogjava.net/yutian727/aggbug/128591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-07-06 15:22 <a href="http://www.blogjava.net/yutian727/archive/2007/07/06/128591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util.TimeTask例子</title><link>http://www.blogjava.net/yutian727/archive/2007/06/01/121380.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Fri, 01 Jun 2007 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/06/01/121380.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/121380.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/06/01/121380.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/121380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/121380.html</trackback:ping><description><![CDATA[<p>java.util.Timer定时器，实际上是个线程，定时调度所拥有的TimerTasks。 &nbsp; <br>&nbsp; 一个TimerTask实际上就是一个拥有run方法的类，需要定时执行的代码放到run方法体内，TimerTask一般是以匿名类的方式创建。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 一个完整的Timer： &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; java.util.Timer &nbsp; timer &nbsp; = &nbsp; new &nbsp; java.util.Timer(true); &nbsp; <br>&nbsp; &nbsp; &nbsp; // &nbsp; true &nbsp; 说明这个timer以daemon方式运行（优先级低， &nbsp; <br>&nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp; 程序结束timer也自动结束），注意，javax.swing &nbsp; <br>&nbsp; &nbsp; &nbsp; // &nbsp; 包中也有一个Timer类，如果import中用到swing包， &nbsp; <br>&nbsp; &nbsp; &nbsp; // &nbsp; 要注意名字的冲突。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; TimerTask &nbsp; task &nbsp; = &nbsp; new &nbsp; TimerTask() &nbsp; { &nbsp; <br>&nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; run() &nbsp; { &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ... &nbsp; //每次需要执行的代码放到这里面。 &nbsp; <br>&nbsp; &nbsp; &nbsp; } &nbsp; <br>&nbsp; }; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; //以下是几种调度task的方法： &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; timer.schedule(task, &nbsp; time); &nbsp; &nbsp; <br>&nbsp; // &nbsp; time为Date类型：在指定时间执行一次。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; timer.schedule(task, &nbsp; firstTime, &nbsp; period); &nbsp; <br>&nbsp; // &nbsp; firstTime为Date类型,period为long &nbsp; <br>&nbsp; // &nbsp; 从firstTime时刻开始，每隔period毫秒执行一次。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; timer.schedule(task, &nbsp; delay) &nbsp; <br>&nbsp; // &nbsp; delay &nbsp; 为long类型：从现在起过delay毫秒执行一次 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; timer.schedule(task, &nbsp; delay, &nbsp; period) &nbsp; <br>&nbsp; // &nbsp; delay为long,period为long：从现在起过delay毫秒以后，每隔period &nbsp; <br>&nbsp; // &nbsp; &nbsp; 毫秒执行一次。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; <br><br>下面是一个完整的例子,由两个类组成,一个定制任务,一个调用java.util.Timer<br><br>定制任务:<br>import java.util.Timer;</p>
<p>public class TimerTaskTest extends java.util.TimerTask{</p>
<p>&nbsp;@Override<br>&nbsp;public void run() {<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;System.out.println("start");<br>&nbsp;}<br>}<br>2.调用java.util.Timer<br>import java.util.Timer;</p>
<p>public class Test {<br>&nbsp;public static void main(String[] args){<br>&nbsp;&nbsp;Timer timer = new Timer();<br>&nbsp;&nbsp;timer.schedule(new TimerTaskTest(), 1000, 2000);<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br>&nbsp;&nbsp;}catch(Exception ex){<br>&nbsp;&nbsp;&nbsp;timer.cancel();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>根据上面的介绍,便可以在1秒后,每隔2秒执行一次程序<br>建议:在使用Timer timer = new Timer()时,不要用Timer timer = new Timer(true).因为这样,在程序结束后,timer也自动结束了,不利于使用<br></p>
<img src ="http://www.blogjava.net/yutian727/aggbug/121380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-06-01 16:30 <a href="http://www.blogjava.net/yutian727/archive/2007/06/01/121380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定时执行任务的三种方法(转)</title><link>http://www.blogjava.net/yutian727/archive/2007/06/01/121372.html</link><dc:creator>牛宝雷</dc:creator><author>牛宝雷</author><pubDate>Fri, 01 Jun 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/yutian727/archive/2007/06/01/121372.html</guid><wfw:comment>http://www.blogjava.net/yutian727/comments/121372.html</wfw:comment><comments>http://www.blogjava.net/yutian727/archive/2007/06/01/121372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yutian727/comments/commentRss/121372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yutian727/services/trackbacks/121372.html</trackback:ping><description><![CDATA[<p>1）java.util.Timer<br>这个方法应该是最常用的，不过这个方法需要手工启动你的任务：<br>Timer timer=new Timer();<br>timer.schedule(new ListByDayTimerTask(),10000,86400000);<br>这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。</p>
<p>2）ServletContextListener<br>这个方法在web容器环境比较方便，这样，在web server启动后就可以<br>自动运行该任务，不需要手工操作。<br>将ListByDayListener implements ServletContextListener接口，在<br>contextInitialized方法中加入启动Timer的代码，在contextDestroyed<br>方法中加入cancel该Timer的代码；然后在web.xml中，加入listener:<br>&lt;listener&gt;<br>&lt;listener-class&gt;com.qq.customer.ListByDayListener&lt;/listener-class&gt;<br>&lt;/listener&gt;</p>
<p>3)org.springframework.scheduling.timer.ScheduledTimerTask<br>如果你用spring，那么你不需要写Timer类了，在schedulingContext-timer<br>.xml中加入下面的内容就可以了：<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd"><u><font color=#0000ff>http://www.springframework.org/dtd/spring-beans.dtd</font></u></a>"&gt;</p>
<p>&lt;beans&gt;<br>&lt;bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="scheduledTimerTasks"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="MyTimeTask1"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>&lt;/bean&gt;</p>
<p>&lt;bean id="MyTimeTask" class="com.qq.timer.ListByDayTimerTask"/&gt;</p>
<p>&lt;bean id="MyTimeTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask"&gt;<br>&nbsp;&nbsp; &lt;property name="timerTask"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="MyTimeTask"/&gt;<br>&nbsp;&nbsp; &lt;/property&gt;<br>&nbsp;&nbsp; &lt;property name="delay"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10000&lt;/value&gt;<br>&nbsp;&nbsp; &lt;/property&gt;<br>&nbsp;&nbsp; &lt;property name="period"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;86400000&lt;/value&gt;<br>&nbsp;&nbsp; &lt;/property&gt;<br>&lt;/bean&gt;<br>&lt;/beans&gt;</p>
<img src ="http://www.blogjava.net/yutian727/aggbug/121372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yutian727/" target="_blank">牛宝雷</a> 2007-06-01 15:49 <a href="http://www.blogjava.net/yutian727/archive/2007/06/01/121372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>