﻿<?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-liubijin</title><link>http://www.blogjava.net/liubijin/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:04:09 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:04:09 GMT</pubDate><ttl>60</ttl><item><title>Oracle数据库安装及配置</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320051.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320051.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320051.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320051.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320051.html</trackback:ping><description><![CDATA[<h2>1、安装</h2>
<p>Oracle 版本：<span class="topstoryhead">Oracle Database 10<em>g</em> Release 2 (10.2.0.1)</span> </p>
<p>下载地址：</p>
<p><a href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html">http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html</a> </p>
<p>安装设置：</p>
<p>1）这里的全局数据库名即为你创建的数据库名，以后在访问数据，创建&#8220;本地Net服务名&#8221;时用到；</p>
<p>2）数据库口令在登录和创建&#8220;本地Net服务名&#8221;等地方会用到。<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1.jpg" /></p>
<p>&nbsp;</p>
<h2>2、创建&#8220;本地Net服务名&#8221;</h2>
<p>1）通过【程序】-》【Oracle - OraDb10g_home1】-》【配置和移植工具】-》【Net Configuration Assistant】，运行&#8220;网络配置助手&#8221;工具：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/2.jpg" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2）选择&#8220;本地 Net 服务名配置&#8221;：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/3.jpg" /></p>
<p>&nbsp;</p>
<p>3）这里的&#8220;Net 服务名&#8221;我们输入安装数据库时的&#8220;全局数据库名&#8221;：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/4.jpg" /></p>
<p>&nbsp;</p>
<p>4）主机名我们输入本机的IP地址：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/5.jpg" /></p>
<p>&nbsp;</p>
<p>5）测试数据库连接，用户名/密码为：System/数据库口令（安装时输入的&#8220;数据库口令&#8221;）：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/6.jpg" /><br />
&nbsp;<br />
默认的用户名/密码错误： </p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/7.jpg" /></p>
<p>&nbsp;</p>
<p>更改登录，输入正确的用户名/密码：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/8.jpg" /></p>
<p>&nbsp;</p>
<p>测试成功：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/9.jpg" /></p>
<p>&nbsp;</p>
<h2>3、PLSQL Developer 连接测试</h2>
<p>输入正确的用户名/口令：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/10.jpg" /></p>
<p>&nbsp;</p>
<p>成功登陆：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/11.jpg" /><br />
<br />
</p>
<h2>4、创建表空间</h2>
<p>打开sqlplus工具：<br />
<br />
Sql代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span><span>&nbsp;sqlplus&nbsp;/nolog&nbsp;&nbsp;</span></span><br />
<br />
连接数据库：<br />
&nbsp;Sql代码&nbsp;&nbsp;&nbsp;&nbsp; <span><span>conn&nbsp;/</span><span class="keyword">as</span><span>&nbsp;sysdba<br />
<br />
创建表空间：<br />
<br />
&nbsp;Sql代码&nbsp;&nbsp; <span><span class="keyword">create</span><span>&nbsp;tablespace&nbsp;camds&nbsp;datafile&nbsp;</span><span class="string">'D:\oracle\product\10.2.0\oradata\camds\camds.dbf'</span><span>&nbsp;</span><span class="keyword">size</span><span>&nbsp;200m&nbsp;autoextend&nbsp;</span><span class="keyword">on</span><span>&nbsp;</span><span class="keyword">next</span><span>&nbsp;10m&nbsp;maxsize&nbsp;unlimited;&nbsp;&nbsp;</span></span></span></span><br />
<br />
5、创建新用户</p>
<p>运行&#8220;P/L SQL Developer&#8221;工具，以DBA（用户名：System）的身份登录：</p>
<p>&nbsp;</p>
<h3><span style="color: #0000ff"><strong>1）新建&#8220;User（用户）：</strong> </span></h3>
<p></p>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-1.jpg" /></p>
<h3><span style="color: #0000ff"><strong>2）设置用户名、口令、默认表空间（使用上面新建的表空间）和临时表空间：</strong> </span></h3>
<p>&nbsp;</p>
<p dir="ltr"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-2.jpg" /></p>
<h3><strong><span style="color: #0000ff">3）设置角色权限：</span> </strong></h3>
<p>&nbsp;</p>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-3.jpg" /></p>
<p>&nbsp;</p>
<h3><strong><span style="color: #0000ff">4）设置&#8221;系统权限&#8220;：</span> </strong></h3>
<p>&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-4.jpg" width="492" height="306" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong><span style="color: #0000ff">5）点击应用后，【应用】按钮变灰，新用户创建成功：</span> </strong></h3>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-5.jpg" width="671" height="837" /><br />
</p>
<p>&nbsp;</p>
<h3><strong><span style="color: #0000ff">6）新用户登录测试：</span> </strong></h3>
<p>输入新用户的&#8220;用户名/口令&#8221;：</p>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-6.jpg" width="437" height="286" /><br />
</p>
<p>新用户&#8220;testcamds&#8221;成功登陆：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-7.jpg" width="560" height="369" /></p>
<p>&nbsp;</p>
<h2>6、导入导出数据库</h2>
<p>先运行cmd命令，进入命令行模式，转到下面的目录：D:\oracle\product\10.2.0\db_1\BIN【该目录下有exp.exe文件】</p>
<h3><strong><span style="color: #0000ff">1）导入</span> </strong></h3>
<p>命令语法：<br />
<br />
Sql代码&nbsp;&nbsp; <span><span>imp&nbsp;userid/pwd@sid&nbsp;file=path/file&nbsp;fromuser=testcamds&nbsp;touser=userid&nbsp;&nbsp;</span></span><br />
<br />
<br />
命令实例：<br />
<br />
Sql代码&nbsp;&nbsp; <span><span>imp&nbsp;testcamds/123@camds&nbsp;file=c:\testcamds&nbsp;fromuser=testcamds&nbsp;touser=testcamds&nbsp;&nbsp;</span></span><br />
<br />
导入结果：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-8.jpg" /></p>
<p>&nbsp;</p>
<h3><span style="color: #0000ff"><strong>2）导出：</strong> </span></h3>
<p>命令语法：<br />
<br />
Sql代码&nbsp; <span><span>exp&nbsp;userid/pwd@sid&nbsp;file=path/file&nbsp;owner=userid&nbsp;&nbsp;</span></span><br />
&nbsp; <br />
命令实例： </p>
<pre style="display: none" class="sql" name="code">exp testcamds/123@camdsora file=c:\testcamds owner=testcamds</pre>
<p>导入结果：</p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/1-9.jpg" /></p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 15:36 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql教程：介绍TIMESTAMP时间戳的使用 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320043.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320043.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320043.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320043.html</trackback:ping><description><![CDATA[MySQL目前不支持列的Default 为函数的形式, <br />
　　如达到你某列的默认值为当前更新日期与时间的功能, <br />
　　你可以使用TIMESTAMP列类型
<p>　　<strong>下面就详细说明TIMESTAMP列类型</strong> <br />
　　 <br />
　　TIMESTAMP列类型 <br />
　　TIMESTAMP值可以从1970的某时的开始一直到2037年，精度为一秒，其值作为数字显示。 <br />
　　TIMESTAMP值显示尺寸的格式如下表所示： <br />
　　： <br />
　　+---------------+----------------+ <br />
　　| 列类型　　　　| 显示格式　　　 | <br />
　　| TIMESTAMP(14) | YYYYMMDDHHMMSS |　 <br />
　　| TIMESTAMP(12) | YYMMDDHHMMSS　 | <br />
　　| TIMESTAMP(10) | YYMMDDHHMM　　 &nbsp;| <br />
　　| TIMESTAMP(8)　| YYYYMMDD　　 　&nbsp;&nbsp;&nbsp;| <br />
　　| TIMESTAMP(6)　| YYMMDD　　　&nbsp;&nbsp;&nbsp; 　 | <br />
　　| TIMESTAMP(4)　| YYMM　　　　&nbsp;&nbsp; &nbsp; 　 | <br />
　　| TIMESTAMP(2)　| YY　　　　　　&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| <br />
　　+---------------+----------------+ <br />
　　&#8220;完整&#8221;TIMESTAMP格式是14位，但TIMESTAMP列也可以用更短的显示尺寸创造 <br />
　　最常见的显示尺寸是6、8、12、和14。 <br />
　　你可以在创建表时指定一个任意的显示尺寸，但是定义列长为0或比14大均会被强制定义为列长14。 <br />
　　列长在从1～13范围的奇数值尺寸均被强制为下一个更大的偶数。 <br />
　　 <br />
　　列如： <br />
　　定义字段长度　　 强制字段长度 <br />
　　TIMESTAMP(0) -&gt;　TIMESTAMP(14) <br />
　　TIMESTAMP(15)-&gt;　TIMESTAMP(14) <br />
　　TIMESTAMP(1) -&gt;　TIMESTAMP(2) <br />
　　TIMESTAMP(5) -&gt;　TIMESTAMP(6) <br />
　　 <br />
　　所有的TIMESTAMP列都有同样的存储大小， <br />
　　使用被指定的时期时间值的完整精度（14位）存储合法的值不考虑显示尺寸。 <br />
　　不合法的日期，将会被强制为0存储 <br />
　　 <br />
　　<strong>这有几个含意：</strong> </p>
<p>　　1、虽然你建表时定义了列TIMESTAMP(8)，但在你进行数据插入与更新时TIMESTAMP列实际上保存了14位的数据（包括年月日时分秒），只不过在你进行查询时MySQL返回给你的是8位的年月日数据。如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列，以前被&#8220;隐蔽&#8221;的信息将被显示。 <br />
　　2、同样，缩小一个TIMESTAMP列不会导致信息失去，除了感觉上值在显示时，较少的信息被显示出。 <br />
　　3、尽管TIMESTAMP值被存储为完整精度，直接操作存储值的唯一函数是UNIX_TIMESTAMP()；由于MySQL返回TIMESTAMP列的列值是进过格式化后的检索的值，这意味着你可能不能使用某些函数来操作TIMESTAMP列（例如HOUR()或SECOND()），除非 TIMESTAMP值的相关部分被包含在格式化的值中。例如，一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上时， TIMESTAMP列的HH部分才会被显示，因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果。 <br />
　　4、不合法TIMESTAMP值被变换到适当类型的&#8220;零&#8221;值(00000000000000)。（DATETIME,DATE亦然）　　　　 <br />
　　 <br />
　　你可以使用下列语句来验证： <br />
　　</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;test&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">id</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">INT</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">)&nbsp;UNSIGNED&nbsp;AUTO_INCREMENT,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">date1</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">TIMESTAMP</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">8</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">id</span><span style="color: #ff0000">'</span><span style="color: #000000">));&nbsp;<br />
　　</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">;&nbsp;<br />
　　</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;test;&nbsp;<br />
</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----+----------------+ <br />
　　| id&nbsp;&nbsp;&nbsp;&nbsp; | date1　　&nbsp;&nbsp; 　| <br />
　　+----+----------------+ <br />
　　|　1&nbsp; | 20021114　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
　　+----+----------------+ <br />
<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">　　</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;test&nbsp;CHANGE&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">date1</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">date1</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">TIMESTAMP</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">14</span><span style="color: #000000">);&nbsp;<br />
　　</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;test;&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----+----------------+ <br />
　　| id | date1　　　　　| <br />
　　+----+----------------+ <br />
　　| 1 | 20021114093723 | <br />
　　+----+----------------+ <br />
　　 <br />
　　你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。 <br />
　　如果你有多个TIMESTAMP列，只有第一个自动更新。</p>
<p>　　<strong>自动更新第一个TIMESTAMP列在下列任何条件下发生：</strong> <br />
　　 <br />
　　1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。 <br />
　　2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。（注意一个UPDATE设置一个列为它已经有的值，这将不引起TIMESTAMP列被更新，因为如果你设置一个列为它当前的值，MySQL为了效率而忽略更改。） <br />
　　3、你明确地设定TIMESTAMP列为NULL. <br />
　　4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间，只要将列设为NULL，或NOW()。 <br />
　　 <br />
　</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">　</span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;test&nbsp;(&nbsp;<br />
　　　　&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">id</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">INT</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">)&nbsp;UNSIGNED&nbsp;AUTO_INCREMENT,&nbsp;<br />
　　　　&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">date1</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">TIMESTAMP</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">14</span><span style="color: #000000">),&nbsp;<br />
　　　　&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">date2</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">TIMESTAMP</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">14</span><span style="color: #000000">),&nbsp;<br />
　　　　　</span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">id</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
　　　　　);&nbsp;<br />
　　&nbsp;<br />
　　</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;test&nbsp;(id,&nbsp;date1,&nbsp;date2)&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">&nbsp;(</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">);&nbsp;<br />
　　</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;id</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">2</span><span style="color: #000000">;&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----+----------------+----------------+ <br />
　　| id | date1　　　　　| date2　　　&nbsp;&nbsp;&nbsp; | <br />
　　+----+----------------+----------------+ <br />
　　|　1 | 20021114093723 | 20021114093723 | <br />
　　|　2 | 20021114093724 | 00000000000000 | <br />
　　+----+----------------+----------------+ <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;第一条指令因设date1、date2为NULL,所以date1、date2值均为当前时间 <br />
　　　第二条指令因没有设date1、date2列值，第一个TIMESTAMP列date1为更新为当前时间， 而二个TIMESTAMP列date2因日期不合法而变为&#8220;00000000000000&#8221; <br />
　　 <br />
　　</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;id</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;id</span><span style="color: #808080">=</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">;&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp; 　+----+----------------+----------------+ <br />
　　| id | date1　　　　　| date2　　　　　| <br />
　　+----+----------------+----------------+ <br />
　　|　3 | 20021114094009 | 20021114093723 | <br />
　　|　2 | 20021114093724 | 00000000000000 | <br />
　　+----+----------------+----------------+ <br />
　　-&gt;这条指令没有明确地设定date2的列值，所以第一个TIMESTAMP列date1将被更新为当前时间 <br />
　　 <br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">　　</span><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;id</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,date1</span><span style="color: #808080">=</span><span style="color: #000000">date1,date2</span><span style="color: #808080">=</span><span style="color: #000000">NOW()&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;id</span><span style="color: #808080">=</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">;&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----+----------------+----------------+ <br />
　　| id | date1　　　　　| date2　　　　　| <br />
　　+----+----------------+----------------+ <br />
　　|　1 | 20021114094009 | 20021114094320 | <br />
　　|　2 | 20021114093724 | 00000000000000 | <br />
　　+----+----------------+----------------+ <br />
　　-&gt;这条指令因设定date1=date1，所以在更新数据时date1列值并不会发生改变 <br />
　　　而因设定date2=NOW()，所以在更新数据时date2列值会被更新为当前时间 <br />
　　　此指令等效为&nbsp;update&nbsp;test SET id= 1,date1=date1,date2=NULL WHERE id=3; <br />
　　　 <br />
　　因MySQL返回的 TIMESTAMP 列为数字显示形式， <br />
　　你可以用DATE_FROMAT()函数来格式化 TIMESTAMP 列 <br />
　　 <br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">　　</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;id,DATE_FORMAT(date1,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%Y-%m-%d&nbsp;%H:%i:%s</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;date1,&nbsp;<br />
　　　　　&nbsp;DATE_FORMAT(date2,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%Y-%m-%d&nbsp;%H:%i:%s</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;date2&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;test;&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+----+---------------------+---------------------+ <br />
　　| id | date1　　　　　　　 | date2　　　　 | <br />
　　+----+---------------------+---------------------+ <br />
　　|　1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 | <br />
　　|　2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 | <br />
　　+----+---------------------+---------------------+ <br />
　　 <br />
　</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">　</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;id,DATE_FORMAT(date1,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%Y-%m-%d</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;date1,&nbsp;<br />
　　　　　&nbsp;DATE_FORMAT(date2,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%Y-%m-%d</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;date2&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;test;&nbsp;<br />
</span></div>
<p>　　+----+-------------+-------------+ <br />
　　| id | date1　　　 | date2　　　 | <br />
　　+----+-------------+-------------+ <br />
　　|　1 | 2002-11-14　| 2002-11-14　| <br />
　　|　2 | 2002-11-14　| 0000-00-00　| <br />
　　+----+-------------+-------------+ <br />
　　 <br />
　　在某种程度上，你可以把一种日期类型的值赋给一个不同的日期类型的对象。 <br />
　　然而，而尤其注意的是：值有可能发生一些改变或信息的损失： <br />
　　 <br />
　　1、如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象，结果值的时间部分被设置为'00:00:00'，因为DATE值中不包含有时间信息。　　 <br />
　　2、如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象，结果值的时间部分被删除，因为DATE类型不存储时间信息。 <br />
　　3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定， <br />
　　但所有类型不都有同样的值范围。 <br />
　　例如，TIMESTAMP值不能比1970早，也不能比2037晚， <br />
　　这意味着，一个日期例如'1968-01-01'，当作为一个DATETIME或DATE值时它是合法的， <br />
　　但它不是一个正确TIMESTAMP值！并且如果将这样的一个对象赋值给TIMESTAMP列，它将被变换为0。 <br />
　　 <br />
　　当指定日期值时，当心某些缺陷： <br />
　　 <br />
　　1、允许作为字符串指定值的宽松格式能被欺骗。例如，，因为&#8220;:&#8221;分隔符的使用，值'10:11:12'可能看起来像时间值，但是如果在一个日期中使用，上下文将作为年份被解释成'2010-11-12'。值'10:45:15'将被变换到'0000-00-00'，因为'45'不是一个合法的月份。 <br />
　　　　 <br />
　　2、以2位数字指定的年值是模糊的，因为世纪是未知的。MySQL使用下列规则解释2位年值： 在00-69范围的年值被变换到2000-2069。 在范围70-99的年值被变换到1970-1999。</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 14:18 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL数据库中的Date,DateTime和TimeStamp类型</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320041.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320041.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320041.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320041.html</trackback:ping><description><![CDATA[<p>　DATETIME, DATE和TIMESTAMP类型是相关的。本文描述他们的特征，他们是如何类似的而又不同的。</p>
<p>　　DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值，支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。（&#8220;支持&#8221;意味着尽管更早的值可能工作，但不能保证他们可以。）</p>
<p>　　DATE类型用在你仅需要日期值时，没有时间部分。MySQL检索并且以'YYYY-MM-DD'格式显示DATE值，支持的范围是'1000-01-01'到'9999-12-31'。</p>
<p>　　TIMESTAMP列类型提供一种类型，你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列，只有第一个自动更新。</p>
<p>　　自动更新第一个TIMESTAMP列在下列任何条件下发生：</p>
<p>　　列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。</p>
<p>　　列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。（注意一个UPDATE设置一个列为它已经有的值，这将不引起TIMESTAMP列被更新，因为如果你设置一个列为它当前的值，MySQL为了效率而忽略更改。）</p>
<p>　　你明确地设定TIMESTAMP列为NULL.</p>
<p>　　除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间，只要将列设为NULL，或NOW()。</p>
<p>　　通过明确地设置希望的值，你可以设置任何TIMESTAMP列为不同于当前日期和时间的值，即使对第一个TIMESTAMP列也是这样。例如，如果，当你创建一个行时，你想要一个TIMESTAMP被设置到当前的日期和时间，但在以后无论何时行被更新时都不改变，你可以使用这个属性：</p>
<p>　　让MySQL在行被创建时设置列，这将初始化它为当前的日期和时间。</p>
<p>　　当你执行随后的对该行中其他列的更改时，明确设定TIMESTAMP列为它的当前值。</p>
<p>　　另一方面，你可能发现，当行被创建并且远离随后的更改时，很容易用一个你用NOW()初始化的DATETIME列。</p>
<p>　　TIMESTAMP值可以从1970的某时的开始一直到2037年，精度为一秒，其值作为数字显示。</p>
<p>　　在MySQL检索并且显示TIMESTAMP值取决于显示尺寸的格式如下表。&#8220;完整&#8221;TIMESTAMP格式是14位，但是TIMESTAMP列可以用更短的显示尺寸创造：</p>
<p>列类型　　　　 显示格式<br />
TIMESTAMP(14) YYYYMMDDHHMMSS<br />
TIMESTAMP(12) YYMMDDHHMMSS<br />
TIMESTAMP(10) YYMMDDHHMM<br />
TIMESTAMP(8) YYYYMMDD<br />
TIMESTAMP(6) YYMMDD<br />
TIMESTAMP(4) YYMM<br />
TIMESTAMP(2) YY</p>
<p>　　所有的TIMESTAMP列都有同样的存储大小，不考虑显示尺寸。最常见的显示尺寸是6、8、12、和14。你可以在表创建时间指定一个任意的显示尺寸，但是值0或比14大被强制到14。在从1～13范围的奇数值尺寸被强制为下一个更大的偶数。</p>
<p>　　使用一个常用的格式集的任何一个，你可以指定DATETIME、DATE和TIMESTAMP值：</p>
<p>　　'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的一个字符串。允许一种&#8220;宽松&#8221;的语法--任何标点可用作在日期部分和时间部分之间的分隔符。例如，'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等价的。</p>
<p>　　'YYYY-MM-DD'或'YY-MM-DD'格式的一个字符串。允许一种&#8220;宽松&#8221;的语法。例如，'98-12-31', '98.12.31', '98/12/31'和'98@12@31'是等价的。</p>
<p>　　'YYYYMMDDHHMMSS'或'YYMMDDHHMMSS'格式的没有任何分隔符的一个字符串，例如，'19970523091528'和'970523091528'被解释为'1997-05-23 09:15:28'，但是'971122459015'是不合法的(它有毫无意义的分钟部分)且变成'0000-00-00 00:00:00'。</p>
<p>　　'YYYYMMDD'或'YYMMDD'格式的没有任何分隔符的一个字符串，如果字符串认为是一个日期。例如，'19970523'和'970523'被解释作为'1997-05-23'，但是'971332'是不合法的( 它有无意义的月和天部分)且变成'0000-00-00'。</p>
<p>　　YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的一个数字，如果数字认为是一个日期。例如，19830905132800和830905132800被解释作为'1983-09-05 13:28:00'。</p>
<p>　　YYYYMMDD或YYMMDD格式的一个数字，如果数字认为是一个日期。例如，19830905和830905被解释作为'1983-09-05'。</p>
<p>　　一个返回值可以在一个DATETIME, DATE或TIMESTAMP上下文环境中接受的函数，例如NOW()或CURRENT_DATE。</p>
<p>　　不合法DATETIME, DATE或TIMESTAMP值被变换到适当类型的&#8220;零&#8221;值('0000-00-00 00:00:00', '0000-00-00'或00000000000000)。</p>
<p>　　对于包括的日期部分分隔符的指定为字符串的值，不必要为小于10的月或天的值指定2位数字，'1979-6-9'与'1979-06-09'是一样的。同样, 对于包括的时间部分分隔符的指定为字符串的值，不必为小于10的小时、月或秒指定2位数字，'1979-10-30 1:2:3'与'1979-10-30 01:02:03'是一样的。</p>
<p>　　指定为数字应该是6、8、12或14位长。如果数字是8或14位长，它被假定以YYYYMMDD或YYYYMMDDHHMMSS格式并且年份由头4位数字给出。如果数字是6或12位长，它被假定是以YYMMDD或YYMMDDHHMMSS格式且年份由头2位数字给出。不是这些长度之一的数字通过填补前头的零到最接近的长度来解释。</p>
<p>　　指定为无分隔符的字符串用它们给定的长度来解释。如果字符串长度是8或14个字符，年份被假定头4个字符给出，否则年份被假定由头2个字符给出。对于字符串中呈现的多个部分，字符串从左到右边被解释，以找出年、月、日、小时、分钟和秒值，这意味着，你不应该使用少于 6 个字符的字符串。例如，如果你指定'9903'，认为将代表1999年3月，你会发现MySQL把一个&#8220;零&#8221;日期插入到你的表中，这是因为年份和月份值99和03，但是日期部分丢失(零)，因此该值不是一个合法的日期。</p>
<p>　　TIMESTAMP列使用被指定的值的完整精度的存储合法的值，不考虑显示大小。这有几个含意：</p>
<p>　　总是指定年，月，和日，即使你的列类型是TIMESTAMP(4)或TIMESTAMP(2)。否则，值将不是一个合法的日期并且0将被存储。</p>
<p>　　如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列，以前被&#8220;隐蔽&#8221;的信息将被显示。</p>
<p>　　同样，缩小一个TIMESTAMP列不会导致信息失去，除了感觉上值在显示时，较少的信息被显示出。</p>
<p>　　尽管TIMESTAMP值被存储为完整精度，直接操作存储值的唯一函数是UNIX_TIMESTAMP()，其他函数操作在格式化了的检索的值上，这意味着你不能使用函数例如HOUR()或SECOND()，除非TIMESTAMP值的相关部分被包含在格式化的值中。例如，一个TIMESTAMP列的HH部分部被显示，除非显示大小至少是10，因此在更短的TIMESTAMP值上试试使用HOUR()产生一个无意义的结果。</p>
<p>　　在某种程度上，你可以把一种日期类型的值赋给一个不同的日期类型的对象。然而，这可能值有一些改变或信息的损失：</p>
<p>　　如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象，结果值的时间部分被设置为'00:00:00'，因为DATE值不包含时间信息。</p>
<p>　　如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象，结果值的时间部分被删除，因为DATE类型不存储时间信息。</p>
<p>　　记住，尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定，但所有类型不都有同样的值范围。例如，TIMESTAMP值不能比1970早或比2037网晚，这意味着，一个日期例如'1968-01-01'，当作为一个DATETIME或DATE值合法时，它不是一个正确TIMESTAMP值，并且 如果赋值给这样一个对象，它将被变换到0。</p>
<p>　　当指定日期值时，当心某些缺陷：</p>
<p>　　允许作为字符串指定值的宽松格式能被欺骗。例如，值例如'10:11:12'可能看起来像时间值，因为&#8220;:&#8221;分隔符，但是如果在一个日期中使用，上下文将作为年份被解释成'2010-11-12'。值'10:45:15'将被变换到'0000-00-00'，因为'45'不是一个合法的月份。</p>
<p>　　以2位数字指定的年值是模糊的，因为世纪是未知的。MySQL使用下列规则解释2位年值：</p>
<p>　　在00-69范围的年值被变换到2000-2069。</p>
<p>　　在70-99范围的年值被变换到1970-1999。<br />
本篇文章来源于：开发学院 http://edu.codepub.com&nbsp;&nbsp; 原文链接：http://edu.codepub.com/2009/1121/17945.php</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 14:10 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js报错：Object doesn't support this property or method</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320040.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320040.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320040.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320040.html</trackback:ping><description><![CDATA[&nbsp;js报错：<br />
&nbsp; Object doesn't support this property or method<br />
&nbsp;问题原因：<br />
&nbsp;1：js代码用了javas<wbr>cript关键字<br />
&nbsp;2：方法名和表单或者div form名冲突<br />
&nbsp;3.button中有name＝"submit"<br />
&nbsp;4.上传图片时提示：Object doesn't support this property or method <br />
原因：服务器上安装的AspJpeg的版本低于1.4版。<br />
解决方法：安装1.4或以上版本的AspJpeg组件。
<img src ="http://www.blogjava.net/liubijin/aggbug/320040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 14:09 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate中Criteria的用法示例</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320039.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320039.html</trackback:ping><description><![CDATA[<p>hibernate支持一种java编写习惯的查询api，使用session建立net.sf.hibernate.Criteria，您可以在不用sql甚至hql的情况下进行查询。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果我们要查询User的所有信息我们可以如下使用Criteria：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(ListIterator&nbsp;iterator&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;users.listIterator();&nbsp;iterator.hasNext();&nbsp;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(User)&nbsp;iterator.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">name:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;user.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">age:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;user.getAge());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><br />
我们要为查询限定条件，可以通过net.sf.hibernate.expression.Expression设置Expression有很多的条件查询方法下面举一些例子：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crit.add(Expression.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
ge（）表示大于等于，即age大于等于25的user。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">crit.add(Expression.gt(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)));<br />
crit.add(Expression.between(</span><span style="color: #000000">"</span><span style="color: #000000">weight</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">60</span><span style="color: #000000">)，</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">80</span><span style="color: #000000">)));<br />
List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
between表示weight在60和80之间。<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">crit.add(Expression.or(<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.eq(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.isNull(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
eq表示age为20的user。<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
crit.setFirstResult(</span><span style="color: #000000">51</span><span style="color: #000000">);<br />
crit.setMaxResult(</span><span style="color: #000000">50</span><span style="color: #000000">);<br />
List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p>&nbsp;</p>
<p>setMaxResult（）设置返回的信息条数，setFirstResult（）设置查询结果的初始位置，上面的程序段可以实现分页。</p>
<p>&nbsp;</p>
<p>在hibernate的Session里面使用createCriteria可以创建一个Criteria实例帮助我们进行条件查询，不用自己串hql语句，很方便。<br />
用法很简单，首先传Class实例创建Criteria，Class实例对应你想要查询的那个实体:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);</span></div>
<p><br />
然后调用Criteria的add方法加入条件（Restrictions）。常用的条件有：<br />
&nbsp;<br />
方法说明： Restrictions.eq&nbsp;等于&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.allEq 使用Map，使用key/value进行多个等于的对比<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.gt 大于 &gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.ge 大于等于 &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.lt 小于 &lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.le 小于等于 &lt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Restrictions.between 对应SQL的BETWEEN子句 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Restrictions.like 对应SQL的LIKE子句 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.in 对应SQL的in子句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Restrictions.and&nbsp; &nbsp;and关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Restrictions.or&nbsp;&nbsp; or关系 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.sqlRestriction&nbsp;&nbsp;&nbsp; SQL限定查詢&nbsp; <br />
<br />
<br />
例如，我想返回Person实体里面年龄(age)大于20的记录，那么就为Criteria加入Restrictions.gt条件：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.gt(&#8220;age&#8221;,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">))).list();</span></div>
<p><br />
&nbsp;<br />
Restrictions.and和Restrictions.or很有用，表示and查询还是or查询，例如我要查询Person实体里面年龄(age)大于20，或者性别 (sex)为man<br />
的记录，那么就为Criteria加入:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.or(<br />
Restrictions.gt(&#8220;age&#8221;,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br />
Restrictions.eq(&#8220;sex&#8221;,&#8221;man&#8221;)<br />
)).list();<br />
&nbsp;</span></div>
<p><br />
如果需要关联查询的话，可以使用Criteria的createCriteria方法创建一个Criteria，例如部门(Department)和人员(Person)是一对多的关系，我要查询Person实体里面年龄(age)大于20，性别 (sex)为man，<br />
备注包含应届生，<br />
且所在部门(department)是开发部的记录:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.gt(&#8220;age&#8221;,&nbsp; </span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)))<br />
.add(Restrictions.eq(&#8220;sex&#8221;,&#8221;man&#8221;))<br />
.add(Restrictions.like(&#8220;Memo&#8221;,&#8221;</span><span style="color: #000000">%</span><span style="color: #000000">应届生</span><span style="color: #000000">%</span><span style="color: #000000">&#8221;))<br />
.createCriteria(&#8220;department&#8221;)<br />
.add(Restrictions.eq(&#8220;departmentname&#8221;,&#8221;开发部&#8221;))<br />
.list();</span></div>
<p><br />
&nbsp;<br />
其他条件的用法也很简单，就不列举了。<br />
&nbsp;<br />
另外，Hibernate3出了一个org.hibernate.criterion.DetachedCriteria，即离线Criteria，它允许你可以先创建DetachedCriteria，然后传到Session里面才真正返回一个Criteria，用法如下：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;<br />
DetachedCriteria&nbsp;detchedCriteria&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DetachedCriteria.forClass(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;先建立DetchedCriteria物件</span><span style="color: #008000"><br />
</span><span style="color: #000000">detchedCriteria.add(Restrictions.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;加入查询条件</span><span style="color: #008000"><br />
</span><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sessionFactory.openSession();<br />
Criteria&nbsp;criteria&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;detchedCriteria.getExecutableCriteria(session);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;绑定Session並返回一个Criteria实例List&nbsp;list&nbsp;=&nbsp;criteria.list();&nbsp;</span></div>
<p><br />
&nbsp;<br />
&nbsp;<br />
最后，需要注意，Criteria还提供了setFirstResult和setMaxResults方法进行分页查询。<br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 14:07 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate基本介绍+一个简单的程序</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320028.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320028.html</trackback:ping><description><![CDATA[<p><strong>一、基础入门</strong></p>
<p>从一个最基本的对象关系映像自动化程序，了解Hibernate组成的基本元素，并进一步了解Hibernate的基础语义、配置等概念。</p>
<p><strong>1．O/R映像入门第一个Hibernate程序很简单，将一个对象映像至一个数据表</strong></p>
<p><strong>1．1配置Hibernate<br />
</strong>Hibernate是ORM的解决方案，其底层对数据库的操作依赖于JDBC，所以您必须先取得JDBC驱动程序，在这边所使用的是MySQL，所以您必须至MySQL&#174;Connector/J取得MySQL的JDBC驱动程序。</p>
<p>接下来至Hibernate官方网站取得hibernate 3.0。</p>
<p>解开zip档案后，当中的hibernate3.jar是必要的，而在lib目录中还包括了许多jar档案，您可以在Hibernate 3.0官方的参考手册上找到这些jar的相关说明，其中必要的是antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache，Hibernate底层还需要Java Transaction API，所以您还需要jta.jar，到这边为止，总共需要以下的jar档案：</p>
<p>Hibernate可以运行于单机之上，也可以运行于Web应用程序之中，如果是运行于单机，则将所有用到的jar档案（包括JDBC驱动程序）设定至CLASSPATH中，如果是运行于Web应用程序中，则将jar档案置放于WEB-INF/lib中。</p>
<p>如果您还需要额外的Library，再依需求加入，例如JUnit、Proxool等等，接下来可以将etc目录下的log4j.properties复制至Hibernate项目的Classpath下，并修改一下当中的log4j.logger.org.hibernate为error，也就是只在错误发生时显示必要的讯息。</p>
<p>接着设置基本的Hibernate配置文件，可以使用XML或Properties档案，这边先使用XML，档名预设为hibernate.cfg.xml：</p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration PUBLIC<br />
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &lt;session-factory&gt;<br />
            &lt;!-- 显示实际操作数据库时的SQL --&gt;<br />
            &lt;property name="show_sql"&gt;true&lt;/property&gt;<br />
            &lt;!-- SQL 方言，这边设定的是MySQL --&gt;<br />
            &lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
            &lt;!-- JDBC 驱动程序 --&gt;<br />
            &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
            &lt;!-- JDBC URL --&gt;<br />
            &lt;property name="connection.url"&gt;jdbc:mysql://localhost/demo&lt;/property&gt;<br />
            &lt;!-- 数据库使用者 --&gt;<br />
            &lt;property name="connection.username"&gt;caterpillar&lt;/property&gt;<br />
            &lt;!-- 数据库密码 --&gt;<br />
            &lt;property name="connection.password"&gt;123456&lt;/property&gt;<br />
            &lt;!-- 以下设置对象与数据库表格映像文件 --&gt;<br />
            &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>配置文件中已经加上批注为每一个项目作了说明，其中对象与数据库表格映像文件还有待加入。</p>
<p><strong>1．2第一个Hibernate<br />
</strong>这边以一个简单的单机程序来示范Hibernate的配置与功能，首先作数据库的准备工作，在MySQL中新增一个demo数据库，并建立user表格：</p>
<p><strong>CreateUser2MySQL.sql</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>CREATE TABLE user (<br />
            id INT(11) NOT NULL auto_increment PRIMARY KEY,<br />
            name VARCHAR(100) NOT NULL default '',<br />
            age INT<br />
            );</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>对于这个表格，您有一个User类别与之对应，表格中的每一个字段将对应至User实例上的Field成员。</p>
<p><strong>User.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            public class User {<br />
            private Integer id;<br />
            private String name;<br />
            private Integer age;<br />
            // 必须要有一个预设的建构方法<br />
            // 以使得Hibernate 可以使用Constructor.newInstance()建立对象<br />
            public User() {<br />
            }<br />
            public Integer getId() {<br />
            return id;<br />
            }<br />
            public void setId(Integer id) {<br />
            this.id = id;<br />
            }<br />
            public String getName() {<br />
            return name;<br />
            }<br />
            public void setName(String name) {<br />
            this.name = name;<br />
            }<br />
            public Integer getAge() {<br />
            return age;<br />
            }<br />
            public void setAge(Integer age) {<br />
            this.age = age;<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>其中id是个特殊的属性，Hibernate会使用它来作为主键识别，您可以定义主键产生的方式，这是在XML映像文件中完成，为了告诉Hibernate您所定义的User实例如何映像至数据库表格，您撰写一个XML映射文件档名是User.hbm.xml，如下所示：</p>
<p><strong>User.hbm.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-mapping&gt;<br />
            &lt;class name="onlyfun.caterpillar.User" table="user"&gt;<br />
            &lt;id name="id" column="id" type="java.lang.Integer"&gt;<br />
            &lt;generator class="native" /&gt;<br />
            &lt;/id&gt;<br />
            &lt;property name="name" column="name" type="java.lang.String" /&gt;<br />
            &lt;property name="age" column="age" type="java.lang.Integer" /&gt;<br />
            &lt;/class&gt;<br />
            &lt;/hibernate-mapping&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&lt;class&gt;卷标的name属性为所映像的对象，而table为所映像的表格；&lt;id&gt;中column属性指定了表格字段，而type属性指定了User实例的中的id之型态，这边type中所设定的是直接指定Java中的对象型态，Hibernate也定义有自己的映像型态，作为Java对象与SQL型态的标准对应型态（因为语言所提供的类型并不一定与数据库的类型对应），这之后会再说明。</p>
<p>#p#</p>
<p>&lt;id&gt;中主键的产生方式在这边设定为"native"，表示主键的生成方式由Hibernate根据数据库Dialect的定义来决定，之后还会介绍其它主键的生成方式。</p>
<p>同样的，&lt;property&gt;标签中的column与type都各自指明了表格中字段与对象中属性的对应。</p>
<p>接着必须在Hibernate配置文件hibernate.cfg.xml中指明映像文件的位置，如下加入映像文件位置：</p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration PUBLIC<br />
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &lt;session-factor&gt;<br />
            ....<br />
            &lt;!-- 对象与数据库表格映像文件 --&gt;<br />
            &lt;mapping resource="onlyfun/caterpillar/User.hbm.xml"/&gt;<br />
            &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>接下来撰写一个测试的程序，这个程序直接以Java 程序设计人员熟悉的语法方式来操作对象，而实际上也直接完成对数据库的操作，程序将会将一笔数据存入表格之中：</p>
<p><strong>FirstHibernate.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.Transaction;<br />
            import org.hibernate.cfg.Configuration;<br />
            public class FirstHibernate {<br />
            public static void main(String[] args) {<br />
            // Configuration 负责管理 Hibernate 配置讯息<br />
            Configuration config = new Configuration().configure();<br />
            // 根据 config 建立 SessionFactory<br />
            // SessionFactory 将用于建立 Session<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            //将持久化的物件<br />
            User user = new User();<br />
            user.setName("caterpillar");<br />
            user.setAge(new Integer(30));<br />
            //开启Session，相当于开启JDBC 的Connection<br />
            Session session = sessionFactory.openSession();<br />
            //Transaction 表示一组对DB 的交易<br />
            Transaction tx = session.beginTransaction();<br />
            //将对象映像至数据库表格中储存<br />
            session.save(user);<br />
            tx.commit();<br />
            session.close();<br />
            sessionFactory.close();<br />
            System.out.println("新增资料OK!请先用MySQL 观看结果！");<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>如您所看到的，程序中只需要直接操作User 对象，并进行Session 与Transaction 的相关操作，Hibernate 就会自动完成对数据库的操作，您看不到任何一行JDBC 或SQL 的陈述，撰写好以上的各个档案之后，各档案的放置位置如下：</p>
<p>接着可以开始运行程序，结果如下：</p>
<p><strong>FirstHibernate执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: insert into user (name, age) values (?, ?)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>新增资料OK!请先用MySQL 观看结果！</p>
<p>执行结果中显示了Hibernate 所实际使用的SQL，由于这个程序还没有查询功能，所以要<br />
进入MySQL 中看看新增的数据，如下：</p>
<p><strong>MySQL 中查询结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>mysql&gt; select * from user;<br />
            +----+-------------+------+<br />
            | id | name | age |<br />
            +----+-------------+------+<br />
            | 1 | caterpillar | 30 |<br />
            +----+-------------+------+<br />
            1 row in set (0.03 sec)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>Comments</p>
<p>第四段代码的标题应该是hibernate.cfg.xml</p>
<p><strong>1．3 第二个 Hibernate</strong><br />
在 第一个 Hibernate 中介绍如何使用Hibernate 在不使用SQL 的情况下，以Java 中操作对象的习惯来插入数据至数据库中，当然储存数据之后，更重要的是如何将资料读出，Hibernate 中也可以让您不写一句SQL，而以Java 中操作对象的习惯来查询数据。</p>
<p>直接来看个范例：</p>
<p><strong>SecondHibernate.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Criteria;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.cfg.Configuration;<br />
            import org.hibernate.criterion.Expression;<br />
            import java.util.Iterator;<br />
            import java.util.List;<br />
            public class SecondHibernate {<br />
            public static void main(String[] args) {<br />
            Configuration config = new Configuration().configure();<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            Session session = sessionFactory.openSession();<br />
            Criteria criteria = session.createCriteria(User.class);<br />
            // 查询user 所有字段<br />
            List users = criteria.list();<br />
            Iterator iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            // 查询user 中符合条件的字段<br />
            criteria.add(Expression.eq("name", "caterpillar"));<br />
            users = criteria.list();<br />
            iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            session.close();<br />
            sessionFactory.close();<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>#p#</p>
<p>Criteria 对SQL 进行封装，对于不甚了解SQL 的开发人员来说，使用Criteria 也可以轻易的进行各种数据的检索，您也可以使用 Expression 设定查询条件，并将之加入Criteria中对查询结果作限制，Expression.eq()表示设定符合条件的查询，例如Expression.eq("name", "caterpillar")表示设定查询条件为"name"字段中为"caterpillar"的数据。</p>
<p>先来看一下执行结果：<br />
<strong>SecondHibernate 执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>this_.age as age0_0_ from user </p>
            <p>this_id<br />
            id name/age<br />
            1 caterpillar/30<br />
            3 bush/5<br />
            2 momor/26<br />
            Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>this_.age as age0_0_ from user </p>
            <p>this_<br />
            where this_.name=?<br />
            id name/age<br />
            1 caterpillar/30</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>Criteria 是对象导向式的查询方式，让不了解SQL 的开发人员也可以轻易进行各项查询，但Criteria 的API 目前还不是很完善，而Hibernate 鼓励的查询方式，是透过HQL（Hibernate Query Language）来进行，直接来看个实例：</p>
<p><strong>SecondHibernateUsingHQ.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Query;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.cfg.Configuration;<br />
            import java.util.Iterator;<br />
            import java.util.List;<br />
            public class SecondHibernateUsingHQ {<br />
            public static void main(String[] args) {<br />
            Configuration config = new Configuration().configure();<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            Session session = sessionFactory.openSession();<br />
            // 使用HQL 建立查询<br />
            Query query = session.createQuery("from User");<br />
            List users = query.list();<br />
            Iterator iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            System.out.println();<br />
            // 使用HQL 建立查询<br />
            query = session.createQuery("from User user where user.name like ?");<br />
            // 设定查询参数<br />
            query.setParameter(0, "caterpillar");<br />
            users = query.list();<br />
            iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            session.close();<br />
            sessionFactory.close();<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>执行结果：</p>
<p><strong>SecondHibernateUsingHQ 执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>  this_.age as age0_0_ from user </p>
            <p>this_id<br />
            id name/age<br />
            1 caterpillar/30<br />
            3 bush/5<br />
            2 momor/26<br />
            Hibernate: select this_.id as id0_, this_.name as name0_0_,  </p>
            <p>  this_.age as age0_0_ from user </p>
            <p>this_<br />
            where this_.name=?<br />
            id name/age<br />
            1 caterpillar/30</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>透过Query 接口，您可以先设定查询参数，之后透过setXXX()等方法，将指定的参数值填入，而不用每次都撰写完整的HQL，Query 的setParameter()方法第一个参数是指定?出现的位置，从 0 开始，第二个参数则是设定查询条件。 </p>
<p>#p#</p>
<p><strong>二、简单的Hibernate 程序</strong></p>
<p>这边以一个简单的单机程序来示范Hibernate的配置与功能，在这个例子中的一些操作，实际上会使用一些自动化工具来完成，而不一定亲自手动操作设定，这边完全手动的原因，在于让您可以知道Hibernate实际上会作那些动作，在进行范例之前，请先确定前一个主题中的相关jar档案都已经设定在CLASSPATH中。<br />
　<br />
我们先作数据库的准备工作，在MySQL中新增一个HibernateTest数据库，并建立USER表格： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>CREATE TABLE USER (<br />
            &nbsp;&nbsp;&nbsp; user_id CHAR(32) NOT NULL PRIMARY KEY,<br />
            &nbsp;&nbsp;&nbsp; name VARCHAR(16) NOT NULL,<br />
            &nbsp;&nbsp;&nbsp; sex CHAR(1),<br />
            &nbsp;&nbsp;&nbsp; age INT<br />
            );</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>我们先撰写一个纯Java对象，它纯綷表示一个数据集合，待会我们会将之映像至数据库的表格上，程序如下： </p>
<p><strong>User.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            &nbsp;public class User {<br />
            &nbsp;&nbsp;&nbsp; private String id;<br />
            &nbsp;&nbsp;&nbsp; private String name;<br />
            &nbsp;&nbsp;&nbsp; private char sex;<br />
            &nbsp;&nbsp;&nbsp; private int age;<br />
            &nbsp;&nbsp;&nbsp; public int getAge() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public String getId() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public String getName() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public char getSex() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sex;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setAge(int i) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age = i;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setId(String string) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id = string;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setName(String string) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = string;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setSex(char c) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sex = c;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>其中id是个特殊的属性，Hibernate会使用它来作为主键识别，我们可以定义主键产生的方式，这是在XML映像文件中完成，为了告诉Hibernate对象如何映像至数据库表格，我们撰写一个XML映射文件档名是User.hbm.xml，如下所示： </p>
<p><strong>User.hbm.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0"?&gt;<br />
            &lt;!DOCTYPE hibernate-mapping<br />
            &nbsp;&nbsp;&nbsp; PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"<br />
            &nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd</a>"&gt;<br />
            &lt;hibernate-mapping&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;class name="onlyfun.caterpillar.User" table="USER"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id" type="string" unsaved-value="null"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="user_id" sql-type="char(32)" /&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="uuid.hex"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" type="string" not-null="true"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="name" length="16" not-null="true"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="sex" type="char"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="age" type="int"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/class&gt;<br />
            &lt;/hibernate-mapping&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>这个XML文件定义了对象属性映像至数据库表格的关系，您可以很简单的了解对映的方法，像是User对象对应至USER表格，其中我们使用 uuid.hex来定义主键的产生算法，UUID算法使用IP地址、JVM的启动时间、系统时间和一个计数值来产生主键。除了使用uuid.hex之外，我们还可以使用其它的方式来产生主键，像是increment等，这可以在Hibernate参考手册中找到相关资料。</p>
<p>&lt;property&gt;卷标用于定义Java对象的属性，而当中的&lt;column/&gt;卷标用于定义与数据库的对应，如果您是手工建立Java对象与数据库表格，则在最简单的情况下，可以只定义&lt;property name="sex"/&gt;这样的方式，而由Hibernate自动判断Java对象属性与数据库表格名称对应关系，在&lt; property/&gt;与&lt;column/&gt;标签上的额外设定（像是not null、sql-type等），则可以用于自动产生Java对象与数据库表格的工具上。</p>
<p>接下来我们定义Hibernate配置文件，主要是进行SessionFactory配置，Hibernate可以使用XML或属性文件来进行配置，我 们这边先介绍如何使用XML配置，这也是Hibernate所建议的配置方式，我们的文件名是hibernate.cfg.xml，如下： </p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version='1.0' encoding='big5'?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration<br />
            &nbsp;&nbsp;&nbsp; PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"<br />
            &nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;session-factory&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 显示实际操作数据库时的SQL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SQL方言，这边设定的是MySQL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC驱动程序 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC URL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.url"&gt;jdbc:mysql://localhost/HibernateTest&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 数据库使用者 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;caterpillar&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 数据库密码 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;123456&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 对象与数据库表格映像文件 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mapping resource="User.hbm.xml"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>接下来我们撰写一个测试的程序，这个程序将直接以Java程序设计人员熟悉的语法方式来操作对象，而实际上也直接完成对数据库的操作，程序将会将一笔数据存入表格之中： </p>
<p><strong>HibernateTest.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>import onlyfun.caterpillar.*;<br />
            import net.sf.hibernate.*;<br />
            import net.sf.hibernate.cfg.*;<br />
            public class HibernateTest {<br />
            &nbsp;&nbsp;&nbsp; public static void main(String[] args) throws HibernateException {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionFactory sessionFactory = <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Configuration().configure().buildSessionFactory();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = new User();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setName("caterpillar");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setSex('M');<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setAge(28);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = sessionFactory.openSession();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transaction tx= session.beginTransaction();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(user);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx.commit();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("新增资料OK!请先用MySQL观看结果！");<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>#p#</p>
<p>Configuration代表了Java对象至数据库的映像设定，这个设定是从我们上面的XML而来，接下来我们从Configuration取得SessionFactory对象，并由它来开启一个Session，它代表对象与表格的一次会话操作，而 Transaction则表示一组会话操作，我们只需要直接操作User对象，并进行Session与Transaction的相关操作， Hibernate就会自动完成对数据库的操作。这边对程序先只作简单的介绍，之后再详加说明。</p>
<p>将所有的.java档案编译，并将两个XML档案放置在与HibernateTest相同的目录中，也就是档案位置如下： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>/<br />
            |--HibernateTest.class<br />
            |--User.hbm.xml<br />
            |--hibernate.cfg.xml<br />
            &nbsp;&nbsp;&nbsp; /onlyfun<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /caterpillar<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--User.class</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>OK!现在您可以执行HibernateTest，程序将会出现以下的讯息： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).<br />
            log4j:WARN Please initialize the log4j system properly.<br />
            Hibernate: insert into USER (name, sex, age, user_id) values (?, ?, ?, ?)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>新增资料OK!请先用MySQL观看结果！</p>
<p>这边只先进行数据的存入，要观看数据存入的结果的话，请进入MySQL观看，以下是数据库存入的结果： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>mysql&gt; SELECT * FROM USER;<br />
            +----------------------------------+-------------+------+------+<br />
            | user_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | sex&nbsp; | age&nbsp; |<br />
            +----------------------------------+-------------+------+------+<br />
            | 297e3dbdfea6023d00fea60241000001 | caterpillar | M&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 28 |<br />
            +----------------------------------+-------------+------+------+<br />
            1 rows in set (0.00 sec) </p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:26 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR各种 调用方法 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320026.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320026.html</trackback:ping><description><![CDATA[<div><font color="#0000ff"><strong>1、调用没有返回值和参数的JAVA方法</strong></font></div>
<div><br />
<font color="#ff00ff">1.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod1"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
&lt;allow&gt;标签中包括可以暴露给javascript访问的东西。<br />
&lt;create&gt;标签中指定javascript中可以访问的java类，并定义DWR应当如何获得要进行远程的类的实例。creator= "new"属性指定java类实例的生成方式，new意味着DWR应当调用类的默认构造函数来获得实例，其他的还有spring方式，通过与IOC容器 Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。<br />
&lt;param&gt;标签指定要公开给javascript的java类名。<br />
&lt;include&gt;标签指定要公开给javascript的方法。不指定的话就公开所有方法。<br />
&lt;exclude&gt;标签指定要防止被访问的方法。<br />
<font color="#ff00ff">1.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
&lt;script src='dwr/interface/ testClass.js'&gt;&lt;/script&gt;<br />
&lt;script src="/dwr/engine.js"&gt;&lt;/script&gt;<br />
&lt;script src="/dwr/util.js"&gt;&lt;/script&gt;<br />
其中TestClass.js是dwr根据配置文件自动生成的，engine.js和util.js是dwr自带的脚本文件。<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod1(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod1();<br />
}<br />
<font color="#0000ff"><strong>2、调用有简单返回值的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">2.1、dwr.xml的配置</font><br />
配置同1.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod2"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
2.2、javascript中调用<br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod2(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod2(callBackFortestMethod2);<br />
}<br />
Function callBackFortestMethod2(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //可以在这里对返回值进行处理和显示等等<br />
alert("the return value is " + data);<br />
}<br />
其中callBackFortestMethod2是接收返回值的回调函数</div>
<div><br />
<font color="#0000ff"><strong>3、调用有简单参数的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">3.1、dwr.xml的配置</font><br />
配置同1.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod3"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
<font color="#ff00ff">3.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod3(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = &#8220;test String&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod3(data);<br />
}</div>
<div><br />
<font color="#0000ff"><strong>4、调用返回JavaBean的java方法</strong></font><br />
<font color="#ff00ff">4.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod4"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match=""com.dwr.TestBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
&lt;creator&gt;标签负责公开用于Web远程的类和类的方法，&lt;convertor&gt;标签则负责这些方法的参数和返回类型。 convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括 Java原生类型和它们各自的封装类表示，还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示，但是出于安全性的原因，要求显式的配置，&lt;convertor&gt;标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范，match=""com.dwr.TestBean"属性指定要转换的javabean名称，&lt; param&gt;标签指定要转换的JavaBean属性。<br />
<font color="#ff00ff">4.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod4(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod4(callBackFortestMethod4);<br />
}<br />
Function callBackFortestMethod4(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
//对于JavaBean返回值，有两种方式处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("property:"+property);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(property+":"+data[property]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
//知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.password);<br />
}<br />
其中callBackFortestMethod4是接收返回值的回调函数</div>
<div><br />
<font color="#0000ff"><strong>5、调用有JavaBean参数的java方法</strong></font><br />
<font color="#ff00ff">5.1、dwr.xml的配置<br />
</font>配置同4.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod5"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
<font color="#ff00ff">5.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod5(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = { username:"user", password:"password" }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod5(data);<br />
}</div>
<div><br />
<font color="#0000ff"><strong>6、调用返回List、Set或者Map的java方法</strong></font><br />
<font color="#ff00ff">6.1、dwr.xml的配置</font><br />
配置同4.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod6"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
注意：如果List、Set或者Map中的元素均为简单类型（包括其封装类）或String、Date、数组和集合类型，则不需要&lt;convert&gt;标签。<br />
<font color="#ff00ff">6.2、javascript中调用(以返回List为例，List的元素为TestBean)<br />
</font>首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod6(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod6(callBackFortestMethod6);<br />
}<br />
Function callBackFortestMethod6(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
//对于JavaBean返回值，有两种方式处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;data.length;i++){<br />
for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("property:"+property);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(property+":"+data[property]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
//知道属性名称时，使用如下方法<br />
for(var i=0;i&lt;data.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.password);<br />
}<br />
}</div>
<div><br />
<font color="#0000ff"><strong>7、调用有List、Set或者Map参数的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">7.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod7"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;signatures&gt;<br />
&lt;![CDATA[ <br />
import java.util.List; <br />
import com.dwr.TestClass; <br />
import com.dwr.TestBean; <br />
TestClass.testMethod7(List&lt;TestBean&gt;); <br />
]]&gt;<br />
&lt;/signatures&gt;<br />
&lt;/dwr&gt;<br />
&lt;signatures&gt;标签是用来声明java方法中List、Set或者Map参数所包含的确切类，以便java代码作出判断。<br />
<font color="#ff00ff">7.2、javascript中调用(以返回List为例，List的元素为TestBean)<br />
</font>首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod7(){<br />
//定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object数组，即数组的每个元素均为object<br />
data = [<br />
&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; username:"user1", <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; password:"password2"<br />
&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; {<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; username:"user2",<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; password:" password2"<br />
&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; ];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod7(data);<br />
}<br />
注意：<br />
<font color="#006600">1、对于第6种情况，如果java方法的返回值为Map，则在接收该返回值的javascript回调函数中如下处理：<br />
</font>function callBackFortestMethod(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var bean = data[property];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(bean.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(bean.password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
<font color="#006600">2、对于第7种情况，如果java的方法的参数为Map（假设其key为String，value为TestBean），则在调用该方法的javascript函数中用如下方法构造要传递的参数：<br />
</font>function callTestMethod (){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object，其属性名为Map的key，属性值为Map的value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = {<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; "key1":{<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; username:"user1", <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; password:"password2"<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; },<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; "key2":{<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; username:"user2",<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; password:" password2"<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; }<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; testClass.testMethod(data);<br />
}<br />
并且在dwr.xml中增加如下的配置段<br />
&lt;signatures&gt;<br />
&lt;![CDATA[ <br />
import java.util.List; <br />
import com.dwr.TestClass; <br />
import com.dwr.TestBean; <br />
TestClass.testMethod7(Map&lt;String,TestBean&gt;); <br />
]]&gt;<br />
&lt;/signatures&gt;<br />
<font color="#003300"><font color="#009900">3、由以上可以发现，对于java方法的返回值为List(Set)的情况，DWR将其转化为Object数组，传递个javascript；对于java方法的返回值为Map 的情况，DWR将其转化为一个Object，其中Object的属性为原Map的key值，属性值为原Map相应的value值。</font><br />
</font><font color="#993300">4、如果java方法的参数为List(Set)和Map的情况，javascript中也要根据3种所说，构造相应的javascript数据来传递到java中。 </font></div>
<div></div>
<div>====================================================================</div>
<div>
<h1><a name="ScriptingIntroduction" -ScriptingIntroduction></a><font size="2">Scripting Introduction</font></h1>
<div>DWR根据dwr.xml生成和Java代码类似的Javascript代码。</div>
<div>相对而言Java同步调用，创建与Java代码匹配的Ajax远程调用接口的最大挑战来至与实现Ajax的异步调用特性。</div>
<div>DWR通过引入回调函数来解决这个问题，当结果被返回时，DWR会调用这个函数。</div>
<div>有两种推荐的方式来使用DWR实现远程方法调用。可以通过把回调函数放在参数列表里，也可以把回调函数放到元数据对象里。</div>
<div>当然也可以把回调函数做为第一个参数，但是不建议使用这种方法。因为这种方法在处理<a title="Accessing" href="http://wiki.javascud.org/display/dwrcn/Accessing+Servlet+Objects"  Objects? Servlet><font color="#000000">自动处理http对象</font></a>时(查看"Alternative Method")上会有问题。这个方法主要是为向下兼容而存在的。</div>
<h2><a name="ScriptingIntroduction" -简单的回调函数></a><font size="2">简单的回调函数</font></h2>
<div>假设你有一个这样的Java方法：</div>
<div>
<div>
<pre><span>public</span> class Remote {    <span>public</span> <span>String</span> getData(<span>int</span> index) { ... }}</pre>
</div>
</div>
<div>我们可以在Javascript中这样使用：</div>
<div>
<div>
<pre>&lt;script type=<span>"text/javascript"</span>    src=<span>"[WEBAPP]/dwr/interface/Remote.js"</span>&gt; <span>&lt;/script&gt;</span>&lt;script type=<span>"text/javascript"</span>    src=<span>"[WEBAPP]/dwr/engine.js"</span>&gt; <span>&lt;/script&gt;</span>...function handleGetData(str) {  alert(str);}Remote.getData(42, handleGetData);</pre>
</div>
</div>
<div>42是Java方法getData()的一个参数。</div>
<div>此外你也可以使用这种减缩格式：</div>
<div>
<div>
<pre>Remote.getData(42, function(str) { alert(str); });</pre>
</div>
</div>
<h2><a name="ScriptingIntroduction" -调用元数据对象(MetaData)></a><font size="2">调用元数据对象(Meta-Data)</font></h2>
<div>另外一种语法时使用"调用元数据对象"来指定回调函数和其他的选项。上面的例子可以写成这样：</div>
<div>
<div>
<pre>Remote.getData(42, {  callback:function(str) { alert(str); }});</pre>
</div>
</div>
<div>这种方法有很多优点：易于阅读，更重要的指定额外的调用选项。</div>
<h3><a name="ScriptingIntroduction" -超时和错误处理></a><font size="2">超时和错误处理</font></h3>
<div>在回调函数的元数据中你可以指定超时和错误的处理方式。例如：</div>
<div>
<div>
<pre>Remote.getData(42, {  callback:function(str) { alert(str); },  timeout:5000,  errorHandler:function(message) { alert(<span>"Oops: "</span> + message); }});</pre>
</div>
</div>
<h2><a name="ScriptingIntroduction" -查找回调函数></a><font size="2">查找回调函数</font></h2>
<div>有些情况下我们很难区分各种回调选项(记住，Javascript是不支持函数重载的)。例如：</div>
<div>
<div>
<pre>Remote.method({ timeout:3 }, { errorHandler:somefunc });</pre>
</div>
</div>
<div>这两个参数之一是bean的参数，另一个是元数据对象，但是我们不能清楚的告诉DWR哪个是哪个。为了可以跨浏览器，我们假定null == undefined。 所以当前的情况，规则是：</div>
<ul>
    <li>如果第一个或最后一个是一个函数，那么它就是回调函数，没有元数据对象，并且其他参数都是Java的方法参数。
    <li>另外，如果最后一个参数是一个对象，这个对象中有一个callback成员，并且它是个函数，那么这个对象就是元数据对象，其他的都是Java方法参数。
    <li>另外，如果第一个参数是 <em>null</em> ，我们就假设没有回调函数，并且其他的都是Java方法参数。尽管如此，我们会检查最后一个参数是不是null，如果是就发出警告。
    <li>最后如果最后一个参数是null，那么就没有callback函数。
    <li>另外，发出错误信号是个糟糕的请求格式。 </li>
</ul>
<h2><a name="ScriptingIntroduction" -创造一个与Java对象匹配的Javascript对象></a><font size="2">创造一个与Java对象匹配的Javascript对象</font></h2>
<div>假设你有这样的Java方法：</div>
<div>
<div>
<pre><span>public</span> class Remote {  <span>public</span> void setPerson(Person p) {    <span>this</span>.person = p;  }}</pre>
</div>
</div>
<div>Person对象的结构是这样的：</div>
<div>
<div>
<pre><span>public</span> Person {  <span>private</span> <span>String</span> name;  <span>private</span> <span>int</span> age;  <span>private</span> Date[] appointments;  <span>// getters and setters ...</span>}</pre>
</div>
</div>
<div>那么你可以在Javascript中这样写：</div>
<div>
<div>
<pre><span>var</span> p = {  name:"Fred Bloggs",  age:42,  appointments:[ <span>new</span> Date(), <span>new</span> Date("1 Jan 2008") ]};Remote.setPerson(p);</pre>
</div>
</div>
<div>在Javascript没有出现的字段，在Java中就不会被设置。</div>
<div>因为setter都是返回'void'，我们就不需要使用callback函数了。如果你想要一个返回void的服务端方法的完整版，你也可以加上callback函数。很明显DWR不会向它传递任何参数。</div>
</div>
<img src ="http://www.blogjava.net/liubijin/aggbug/320026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:12 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java String.Format</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320025.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320025.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt; mso-ascii-: 1.0pt">JDK1.5中，String类新增了一个很有用的静态方法String.format():<br />
<span style="color: red">format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。<br />
format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。</span><br />
<br />
举几个这个方法实用的例子(注释是输出结果)： </span></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">long now = System.currentTimeMillis();<br />
<br />
String s = String.format("%tR", now);&nbsp;&nbsp; // "15:12"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">// Current month/day/year<br />
<br />
Date d = new Date(now);<br />
<br />
s = String.format("%tD", d); &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; // "07/13/04"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">s = String.format("%05d", 123); &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // "00123"</code>是不是很方便，让人动心啊？哈哈，还有更多的效果!<br />
<br />
其实format函数有些类似c语言中printf函数，一些格式字符串与 C 类似，但已进行了某些定制，以适应 Java 语言，并且利用了其中一些特性。此方法提供了对布局对齐和排列的支持，以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。支持诸如 byte、BigDecimal 和 Calendar 等常见 Java 类型。<br />
<br />
产生格式化输出的每个方法都需要格式字符串 和参数列表。格式字符串是一个 String，它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例：<br />
<br />
Calendar c = ...;<br />
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);<br />
<br />
格式字符串是 format 方法的第一个参数。它包含三个格式说明符 "%1$tm"、"%1$te" 和 "%1$tY"，它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是包括 "Dukes Birthday: " 和其他任何空格或标点符号的固定文本。 参数列表由传递给位于格式字符串之后的方法的所有参数组成。在上述示例中，参数列表的大小为 1，由新对象 Calendar 组成。<br />
<br />
<strong>1.常规类型、字符类型和数值类型的格式说明符的语法如下：</strong>%[argument_index$][flags][width][.precision]conversion<br />
<br />
可选的 <em>argument_index</em> 是一个十进制整数，用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用，第二个参数由 "2$" 引用，依此类推。<br />
可选的 <em>flags</em> 是修改输出格式的字符集。有效标志的集合取决于转换类型。<br />
可选 <em>width</em> 是一个非负十进制整数，表明要向输出中写入的最少字符数。<br />
可选 <em>precision</em> 是一个非负十进制整数，通常用来限制字符数。特定行为取决于转换类型。<br />
所需的 <em>conversion</em> 是一个表明应该如何格式化参数的字符。给定参数的有效转换集合取决于参数的数据类型。<br />
<br />
<strong>2.用来表示日期和时间类型的格式说明符的语法如下:</strong><br />
%[argument_index$][flags][width]conversion<br />
<br />
可选的 <em>argument_index</em>、<em>flags</em> 和 <em>width</em> 的定义同上。<br />
所需的 <em>conversion</em> 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。 <br />
<br />
<br />
<strong>3.与参数不对应的格式说明符的语法如下：</strong><br />
%[flags][width]conversion<br />
<br />
可选 <em>flags</em> 和 <em>width</em> 的定义同上。<br />
所需的 <em>conversion</em> 是一个表明要在输出中所插内容的字符。 <br />
<br />
<font size="4"><strong>转换</strong></font><br />
转换可分为以下几类：<br />
1. 常规 - 可应用于任何参数类型<br />
2. 字符 - 可应用于表示 Unicode 字符的基本类型：char、Character、byte、Byte、short 和 Short。当 Character.isValidCodePoint(int) 返回 true 时，可将此转换应用于 int 和 Integer 类型<br />
3. 数值<br />
&nbsp;&nbsp; &nbsp;&nbsp; 1. 整数 - 可应用于 Java 的整数类型：byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger<br />
&nbsp;&nbsp; &nbsp;&nbsp; 2. 浮点 - 可用于 Java 的浮点类型：float、Float、double、Double 和 BigDecimal <br />
4. 日期/时间 - 可应用于 Java 的、能够对日期或时间进行编码的类型：long、Long、Calendar 和 Date。<br />
5. 百分比 - 产生字面值 '%' ('\u0025')<br />
6. 行分隔符 - 产生特定于平台的行分隔符<br />
<br />
下表总结了受支持的转换。由大写字符（如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T'）表示的转换与由相应的小写字符的转换等同，根据流行的 Locale 规则将结果转换为大写形式除外。后者等同于 String.toUpperCase() 的以下调用.<br />
<br />
</p>
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>转换</td>
            <td>参数类别</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>'b', 'B' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "false"。如果 <em>arg</em> 是一个 boolean 值或 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Boolean.html" target="_blank">Boolean</a>，则结果为 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html#valueOf%28boolean%29" target="_blank">String.valueOf()</a> 返回的字符串。否则结果为 "true"。</td>
        </tr>
        <tr>
            <td>'h', 'H' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "null"。否则，结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。</td>
        </tr>
        <tr>
            <td>'s', 'S' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "null"。如果 <em>arg</em> 实现 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formattable.html" target="_blank">Formattable</a>，则调用 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formattable.html#formatTo%28java.util.Formatter,%20int,%20int,%20int%29" target="_blank">arg.formatTo</a>。否则，结果为调用 arg.toString() 得到的结果。</td>
        </tr>
        <tr>
            <td>'c', 'C' </td>
            <td>字符 </td>
            <td>结果是一个 Unicode 字符</td>
        </tr>
        <tr>
            <td>'d' </td>
            <td>整数 </td>
            <td>结果被格式化为十进制整数</td>
        </tr>
        <tr>
            <td>'o' </td>
            <td>整数 </td>
            <td>结果被格式化为八进制整数</td>
        </tr>
        <tr>
            <td>'x', 'X' </td>
            <td>整数 </td>
            <td>结果被格式化为十六进制整数</td>
        </tr>
        <tr>
            <td>'e', 'E' </td>
            <td>浮点 </td>
            <td>结果被格式化为用计算机科学记数法表示的十进制数</td>
        </tr>
        <tr>
            <td>'f' </td>
            <td>浮点 </td>
            <td>结果被格式化为十进制数</td>
        </tr>
        <tr>
            <td>'g', 'G' </td>
            <td>浮点 </td>
            <td>根据精度和舍入运算后的值，使用计算机科学记数形式或十进制格式对结果进行格式化。</td>
        </tr>
        <tr>
            <td>'a', 'A' </td>
            <td>浮点 </td>
            <td>结果被格式化为带有效位数和指数的十六进制浮点数</td>
        </tr>
        <tr>
            <td>'t', 'T' </td>
            <td>日期/时间 </td>
            <td>日期和时间转换字符的前缀。请参阅<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formatter.html#dt" target="_blank">日期/时间转换</a>。</td>
        </tr>
        <tr>
            <td>'%' </td>
            <td>百分比 </td>
            <td>结果为字面值 '%' ('\u0025')</td>
        </tr>
        <tr>
            <td>'n' </td>
            <td>行分隔符 </td>
            <td>结果为特定于平台的行分隔符</td>
        </tr>
    </tbody>
</table>
<br />
任何未明确定义为转换的字符都是非法字符，并且都被保留，以供将来扩展使用。<br />
<br />
<font size="4"><strong>日期/时间转换<br />
</strong></font>以下日期和时间转换的后缀字符是为 't' 和 'T' 转换定义的。这些类型相似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的类型。提供其他转换类型是为了访问特定于 Java 的功能（如将 'L' 用作秒中的毫秒）。<br />
<br />
以下转换字符用来格式化时间：<br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'H' </td>
            <td>24 小时制的小时，被格式化为必要时带前导零的两位数，即 00 - 23。</td>
        </tr>
        <tr>
            <td>'I' </td>
            <td>12 小时制的小时，被格式化为必要时带前导零的两位数，即 01 - 12。</td>
        </tr>
        <tr>
            <td>'k' </td>
            <td>24 小时制的小时，即 0 - 23。</td>
        </tr>
        <tr>
            <td>'l' </td>
            <td>12 小时制的小时，即 1 - 12。</td>
        </tr>
        <tr>
            <td>'M' </td>
            <td>小时中的分钟，被格式化为必要时带前导零的两位数，即 00 - 59。</td>
        </tr>
        <tr>
            <td>'S' </td>
            <td>分钟中的秒，被格式化为必要时带前导零的两位数，即 00 - 60 （"60" 是支持闰秒所需的一个特殊值）。</td>
        </tr>
        <tr>
            <td>'L' </td>
            <td>秒中的毫秒，被格式化为必要时带前导零的三位数，即 000 - 999。</td>
        </tr>
        <tr>
            <td>'N' </td>
            <td>秒中的毫微秒，被格式化为必要时带前导零的九位数，即 000000000 - 999999999。</td>
        </tr>
        <tr>
            <td>'p' </td>
            <td>特定于语言环境的 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getAmPmStrings%28%29" target="_blank">上午或下午</a> 标记以小写形式表示，例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。</td>
        </tr>
        <tr>
            <td>'z' </td>
            <td>相对于 GMT 的 <a href="http://www.ietf.org/rfc/rfc0822.txt" target="_blank">RFC 822</a> 格式的数字时区偏移量，例如 -0800。</td>
        </tr>
        <tr>
            <td>'Z' </td>
            <td>表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境（如果有）。</td>
        </tr>
        <tr>
            <td>'s' </td>
            <td>自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数，即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。</td>
        </tr>
        <tr>
            <td>'Q' </td>
            <td>自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数，即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。</td>
        </tr>
    </tbody>
</table>
<br />
以下转换字符用来格式化日期： <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'B' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getMonths%28%29" target="_blank">月份全称</a>，例如 "January" 和 "February"。</td>
        </tr>
        <tr>
            <td>'b' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getShortMonths%28%29" target="_blank">月份简称</a>，例如 "Jan" 和 "Feb"。</td>
        </tr>
        <tr>
            <td>'h' </td>
            <td>与 'b' 相同。</td>
        </tr>
        <tr>
            <td>'A' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getWeekdays%28%29" target="_blank">星期几</a>全称，例如 "Sunday" 和 "Monday"</td>
        </tr>
        <tr>
            <td>'a' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getShortWeekdays%28%29" target="_blank">星期几</a>简称，例如 "Sun" 和 "Mon"</td>
        </tr>
        <tr>
            <td>'C' </td>
            <td>除以 100 的四位数表示的年份，被格式化为必要时带前导零的两位数，即 00 - 99</td>
        </tr>
        <tr>
            <td>'Y' </td>
            <td>年份，被格式化为必要时带前导零的四位数（至少），例如，0092 等于格里高利历的 92 CE。</td>
        </tr>
        <tr>
            <td>'y' </td>
            <td>年份的最后两位数，被格式化为必要时带前导零的两位数，即 00 - 99。</td>
        </tr>
        <tr>
            <td>'j' </td>
            <td>一年中的天数，被格式化为必要时带前导零的三位数，例如，对于格里高利历是 001 - 366。</td>
        </tr>
        <tr>
            <td>'m' </td>
            <td>月份，被格式化为必要时带前导零的两位数，即 01 - 13。</td>
        </tr>
        <tr>
            <td>'d' </td>
            <td>一个月中的天数，被格式化为必要时带前导零两位数，即 01 - 31</td>
        </tr>
        <tr>
            <td>'e' </td>
            <td>一个月中的天数，被格式化为两位数，即 1 - 31。</td>
        </tr>
    </tbody>
</table>
<br />
以下转换字符用于格式化常见的日期/时间组合。 <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'R' </td>
            <td>24 小时制的时间，被格式化为 "%tH:%tM"</td>
        </tr>
        <tr>
            <td>'T' </td>
            <td>24 小时制的时间，被格式化为 "%tH:%tM:%tS"。</td>
        </tr>
        <tr>
            <td>'r' </td>
            <td>12 小时制的时间，被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。</td>
        </tr>
        <tr>
            <td>'D' </td>
            <td>日期，被格式化为 "%tm/%td/%ty"。</td>
        </tr>
        <tr>
            <td>'F' </td>
            <td><a href="http://www.w3.org/TR/NOTE-datetime" target="_blank">ISO 8601</a> 格式的完整日期，被格式化为 "%tY-%tm-%td"。</td>
        </tr>
        <tr>
            <td>'c' </td>
            <td>日期和时间，被格式化为 "%ta %tb %td %tT %tZ %tY"，例如 "Sun Jul 20 16:17:00 EDT 1969"。</td>
        </tr>
    </tbody>
</table>
<br />
任何未明确定义为转换的字符都是非法字符，并且都被保留，以供将来扩展使用。<br />
<br />
<font size="4"><strong><br />
标志</strong></font><br />
下表总结了受支持的标志。y 表示该标志受指示参数类型支持。 <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>标志</td>
            <td>常规</td>
            <td>字符</td>
            <td>整数</td>
            <td>浮点</td>
            <td>日期/时间</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>'-'</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y</td>
            <td>结果将是左对齐的。</td>
        </tr>
        <tr>
            <td>'#'</td>
            <td>y1 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y3 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果应该使用依赖于转换类型的替换形式</td>
        </tr>
        <tr>
            <td>'+'</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果总是包括一个符号</td>
        </tr>
        <tr>
            <td>'&nbsp;&nbsp; '</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>对于正值，结果中将包括一个前导空格</td>
        </tr>
        <tr>
            <td>'0'</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将用零来填充</td>
        </tr>
        <tr>
            <td>','</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y2 &nbsp;&nbsp;&nbsp;</td>
            <td>y5 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将包括特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DecimalFormatSymbols.html#getGroupingSeparator%28%29" target="_blank">组分隔符</a></td>
        </tr>
        <tr>
            <td>'('</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y5 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将是用圆括号括起来的负数</td>
        </tr>
    </tbody>
</table>
<br />
1 取决于 Formattable 的定义。<br />
<br />
2 只适用于 'd' 转换。<br />
<br />
3 只适用于 'o'、'x' 和 'X' 转换。<br />
<br />
4 对 BigInteger 应用 'd'、'o'、'x' 和 'X' 转换时，或者对 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分别应用 'd' 转换时适用。<br />
<br />
5 只适用于 'e'、'E'、'f'、'g' 和 'G' 转换。<br />
<br />
任何未显式定义为标志的字符都是非法字符，并且都被保留，以供扩展使用。 <br />
<br />
宽度&nbsp;&nbsp; 宽度是将向输出中写入的最少字符数。对于行分隔符转换，不适用宽度，如果提供宽度，则会抛出异常。<br />
精度&nbsp;&nbsp; 对于常规参数类型，精度是将向输出中写入的最多字符数。<br />
对于浮点转换 'e'、'E' 和 'f'，精度是小数点分隔符后的位数。如果转换是 'g' 或 'G'，那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A'，则不必指定精度。<br />
对于字符、整数和日期/时间参数类型转换，以及百分比和行分隔符转换，精度是不适用的；如果提供精度，则会抛出异常。<br />
参数索引&nbsp;&nbsp; 参数索引是一个十进制整数，用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用，第二个参数由 "2$" 引用，依此类推。<br />
根据位置引用参数的另一种方法是使用 '&lt;' ('\u003c') 标志，这将会重用以前格式说明符的参数。例如，以下两条语句产生的字符相同：
<p>&nbsp;</p>
<blockquote>Calendar c = ...;<br />
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);<br />
<br />
String s2 = String.format("Duke's Birthday: %1$tm %&lt;$te,%&lt;$tY", c);<br />
</blockquote>
<img src ="http://www.blogjava.net/liubijin/aggbug/320025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:09 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java数据类型，hibernate数据类型，标准sql数据类型之间的对应表 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320024.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320024.html</trackback:ping><description><![CDATA[Hibernate API简介<br />
其接口分为以下几类：<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供访问数据库的操作的接口；<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于配置Hibernate的接口；<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回调接口<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 扩展Hibernate的功能的接口。<br />
这些接口大多数位于net.sf.hibernate包中<br />
<br />
Hibernate的核心接口<br />
5个核心接口：<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Configuration接口：配置Hibernate,根启动Hibernate，创建SessionFactory对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionFactory接口：初始化Hibernate，充当数据存储源的代理，创建Session对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session接口：负责保存、更新、删除、加载和查询对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transaction：管理事务。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query和Criteria接口：执行数据库查询。<br />
<br />
SessionFactory实例对应一个数据存储源，特点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程安全的，重量级。<br />
Session：是Hibernate应用最广泛的接口，特点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不是线程安全的，轻量级。<br />
<br />
java数据类型，hibernate数据类型，标准sql数据类型之间的对应表<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/12.jpg" />
<img src ="http://www.blogjava.net/liubijin/aggbug/320024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:07 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR util.js 学习笔记 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320023.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320023.html</trackback:ping><description><![CDATA[<p>util.js包含一些有用的函数function,用于在客户端页面调用，它可以和dwr分开，独立营用于你的系统中。 <br />
<br />
这些功能函数在下面这个网址都有示例,这里只是把他们用中文解释,方便查找. <br />
http://getahead.ltd.uk/dwr/browser/util <br />
<br />
</p>
<p>主要功能如下： <br />
1、$() 获得页面参数值 <br />
2、addOptions and removeAllOptions 初始化下拉框 <br />
3、addRows and removeAllRows 填充表格 <br />
4、getText&nbsp; 取得text属性值 <br />
5、getValue 取得form表单值 <br />
6、getValues 取得form多个值 <br />
7、onReturn <br />
8、selectRange <br />
9、setValue <br />
10、setValues <br />
11、toDescriptiveString <br />
12、useLoadingMessage <br />
13、Submission box </p>
<p><span style="color: red"><strong><br />
1。$();</strong> </span><br />
功能 : 相当于 document.getElementById(id); <br />
参数 : id 或 name 属性值 ; <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var ele=$(txt_test); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var str=DWRUtil.toDescriptiveString(ele,1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(str); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>2。DWRUtil.getValue();</strong> </span><br />
功能 : 获得指定元素 value 值 <br />
参数 : id 或 name 属性值 ; <br />
注意 : 该函数只能用于有 value 属性的元素 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var val=DWRUtil.getValue(&#8220;txt_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(val); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>3。 DWRUtil.getValues(); <br />
</strong></span>功能 : 获得一组指定元素的 value 值 ; <br />
参数 :id 或 name 构成的数组对象 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_=DWRUtil.getValues({&#8220;txt_name&#8221;:null,&#8221;txt_pswd&#8221;:null}); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var str=DWRUtil.toDescriptiveString(arr,1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(str); <br />
&lt;/script&gt; </p>
<p><span style="color: red">4<strong>。</strong></span><span style="color: red"><strong>DWRUtil.setValue(); </strong></span><br />
功能 : 设置指定元素的 value 值 <br />
参数 : id 或 name 属性值 <br />
例 :<br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValue(&#8220;txt_test&#8221;,&#8221;wiley&#8221;); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>5。 DWRUtil.setValues(); </strong></span><br />
功能 : 设置一组指定元素的值 <br />
参数 : id 或 name 构成的数组对象 <br />
例 :<br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValues({&#8220;txt_name&#8221;:&#8221;wiley&#8221;,&#8221;txt_pswd&#8221;:&#8221;wiley&#8221;}); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>6。 DWRUtil.getText(); </strong></span><br />
功能 : 获得 select 元素的文本值 <br />
参数 : id 或 name 属性值 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var txt=DWRUtil.getText (&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var val=DWRUtil.getValue(&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(&#8220;Text:&#8221;+txt+&#8221;\tValue:&#8221;+val); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>7。DWRUtil.addRows(); </strong></span><br />
功能 : 指定表格添加行 <br />
格式 :DWRUtil.addRows(id,items, functions); <br />
参数 : <br />
第一个参数 :table 或 tbody 的 id 属性值 <br />
第二个参数 : 数组或链表 ( 可能用词不是很适合 ) <br />
第三个参数 : 函数链表 <br />
例: <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_={&#8220;wiley&#8217;s blog&#8221;,&#8221;wiley 中国 &#8221;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,arr_,[function(arr_){return arr_}]); <br />
&lt;/script&gt; </p>
<p>&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,items,[function(item){return item.name}, function(item){return item.add}]); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>8。DWRUtil.romoveAllRows(); </strong></span><br />
功能 : 删除指定表格行 <br />
参数 :table 或 tbody 的 id 属性值 <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.romoveAllRows(&#8220;tby_test&#8221;);// 每次添加前将原有数据行删除 , 防止数据重叠 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,items,[function(item){return item.name}, function(item){return item.add}]); <br />
&lt;/script&gt; </p>
<p><strong><span style="color: red"><strong>9。DWRUtil.addOptions();</strong> </span></strong><br />
功能 : 添加 select 元素的 option 子元素 <br />
格式 :DWRUtil.addOption(id,items) 或 DWRUtil.addOption(id,items,valueProp,textProp); <br />
参数 : <br />
第一个参数 :select 的 id 或 name 属性值 <br />
第二个参数 : 数组或链表 ( 填充数据 ) <br />
第三、四个参数 : 链表节点的属性 , 第三个填充 value 值，第四个填充 text 值 <br />
&nbsp;&nbsp;&nbsp; &lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_={&#8220;wiley&#8221;,&#8221;wiley 中国 &#8221;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;sel_test&#8221;,arr_);// 此时 value 与 text 值相同 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.romoveAllOptions(&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;sel_test&#8221;,&#8221;add&#8221;,&#8221;name&#8221;);// 此时 value 与 text 不相同 <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>10。DWRUtil.romoveAllOptions(); </strong></span><br />
功能 : 删除指定 select 元素的 option 子元素 <br />
参数 :select 元素的 id 或 name 属性值 <br />
例 : 前面例子有用到 </p>
<p><span style="color: red"><strong>11。DWRUtil.debug();</strong></span> <br />
功能 : 等价于 alert() <br />
例 : 前面例子有用到 </p>
<p><span style="color: red"><strong>12。DWRUtil.toDescriptiveString(); </strong></span><br />
功能：将对象序列化成字符串 , 主要用于调试 <br />
带debug信息的toString，第一个为将要debug的对象，第二个参数为处理等级。等级如下： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 0: Single line of debug 单行调试&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 1: Multi-line debug that does not dig into child objects 不分析子元素的多行调试&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="text" id="text"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.toDescrīptiveString("text",0);</p>
<p><span style="color: red"><strong>13。DWRUtil.useLoadingMessage();</strong></span><br />
&nbsp;&nbsp;&nbsp; 功能：当发出ajax请求后,页面显示的提示等待信息;<br />
&nbsp;&nbsp;&nbsp; 例：<br />
&nbsp;&nbsp;&nbsp; function searchUser(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var loadinfo = "loading....."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; regUser.queryAllUser(userList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.useLoadingMessage(loadinfo);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:51 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>