??xml version="1.0" encoding="utf-8" standalone="yes"?> Oracle 版本Q?span class="topstoryhead">Oracle Database 10g Release 2 (10.2.0.1) 下蝲地址Q?/p>
http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html 安装讄Q?/p>
1Q这里的全局数据库名即ؓ(f)你创建的数据库名Q以后在讉K数据Q创?#8220;本地Net服务?#8221;时用刎ͼ 2Q数据库口o(h)在登录和创徏“本地Net服务?#8221;{地方会(x)用到?br />
1Q通过【程序?》【Oracle - OraDb10g_home1?》【配|和UL工具?》【Net Configuration Assistant】,q行“|络配置助手”工具Q?/p>
2Q选择“本地 Net 服务名配|?#8221;Q?/p>
3Q这里的“Net 服务?#8221;我们输入安装数据库时?#8220;全局数据库名”Q?/p>
4Q主机名我们输入本机的IP地址Q?/p>
5Q测试数据库q接Q用户名/密码为:(x)System/数据库口令(安装时输入的“数据库口?#8221;Q:(x) 更改dQ输入正的用户?密码Q?/p>
试成功Q?/p>
输入正确的用户名/口o(h)Q?/p>
成功登陆Q?/p>
打开sqlplus工具Q?br />
q行“P/L SQL Developer”工具Q以DBAQ用户名QSystemQ的w䆾dQ?/p>
输入新用L(fng)“用户?口o(h)”Q?/p>
新用?#8220;testcamds”成功登陆Q?/p>
先运行cmd命o(h)Q进入命令行模式Q{C面的目录QD:\oracle\product\10.2.0\db_1\BIN【该目录下有exp.exe文g?/p>
命o(h)语法Q?br />
命o(h)语法Q?br />
导入l果Q?/p>
下面pl说明TIMESTAMP列类?/strong> 1、虽然你时定义了(jin)列TIMESTAMP(8)Q但在你q行数据插入与更新时TIMESTAMP列实际上保存?sh)?4位的数据Q包括年月日时分U)(j)Q只不过在你q行查询时MySQLq回l你的是8位的q月日数据。如果你使用ALTER TABLE拓宽一个狭H的TIMESTAMP列,以前?#8220;隐蔽”的信息将被显C? +----+----------------+ +----+----------------+ 自动更新W一个TIMESTAMP列在下列M条g下发生:(x) +----+----------------+----------------+ +----+----------------+----------------+ +----+----------------+----------------+ +----+---------------------+---------------------+ +----+-------------+-------------+ DATETIMEcd用在你需要同时包含日期和旉信息的值时。MySQL(g)索ƈ且以'YYYY-MM-DD HH:MM:SS'格式昄DATETIME|支持的范围是'1000-01-01 00:00:00'?9999-12-31 23:59:59'。(“支持”意味着管更早的值可能工作,但不能保证他们可以。)(j) DATEcd用在你仅需要日期值时Q没有时间部分。MySQL(g)索ƈ且以'YYYY-MM-DD'格式昄DATE|支持的范围是'1000-01-01'?9999-12-31'?/p>
TIMESTAMP列类型提供一U类型,你可以用它自动地用当前的日期和旉标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有W一个自动更新?/p>
自动更新W一个TIMESTAMP列在下列M条g下发生:(x) 列没有明地在一个INSERT或LOAD DATA INFILE语句中指定?/p>
列没有明地在一个UPDATE语句中指定且一些另外的列改变倹{(注意一个UPDATE讄一个列为它已经有的|q将不引起TIMESTAMP列被更新Q因为如果你讄一个列为它当前的|MySQLZ(jin)效率而忽略更攏V)(j) 你明地讑֮TIMESTAMP列ؓ(f)NULL. 除第一个以外的TIMESTAMP列也可以讄到当前的日期和时_(d)只要列设ؓ(f)NULLQ或NOW()?/p>
通过明确地设|希望的|你可以设|Q何TIMESTAMP列ؓ(f)不同于当前日期和旉的|即对第一个TIMESTAMP列也是这栗例如,如果Q当你创Z个行Ӟ你想要一个TIMESTAMP被设|到当前的日期和旉Q但在以后无Z时行被更新时都不改变Q你可以使用q个属性:(x) 让MySQL在行被创建时讄列,q将初始化它为当前的日期和时间?/p>
当你执行随后的对该行中其他列的更Ҏ(gu)Q明设定TIMESTAMP列ؓ(f)它的当前倹{?/p>
另一斚wQ你可能发现Q当行被创徏q且q离随后的更Ҏ(gu)Q很Ҏ(gu)用一个你用NOW()初始化的DATETIME列?/p>
TIMESTAMP值可以从1970的某时的开始一直到2037q_(d)_ֺZU,其g为数字显C?/p>
在MySQL(g)索ƈ且显CTIMESTAMP值取决于昄寸的格式如下表?#8220;完整”TIMESTAMP格式?4位,但是TIMESTAMP列可以用更短的显C尺寸创造:(x) 列类型 昄格式 所有的TIMESTAMP列都有同L(fng)存储大小Q不考虑昄寸。最常见的显C尺寸是6??2、和14。你可以在表创徏旉指定一个Q意的昄寸Q但是?或比14大被强制?4。在??3范围的奇数值尺寸被强制Z一个更大的偶数?/p>
使用一个常用的格式集的M一个,你可以指定DATETIME、DATE和TIMESTAMP|(x) 'YYYY-MM-DD HH:MM:SS'?YY-MM-DD HH:MM:SS'格式的一个字W串。允怸U?#8220;宽松”的语?-M标点可用作在日期部分和时间部分之间的分隔W。例如,'98-12-31 11:30:45'?98.12.31 11+30+45'?98/12/31 11*30*45'?98@12@31 11^30^45'是等L(fng)?/p>
'YYYY-MM-DD'?YY-MM-DD'格式的一个字W串。允怸U?#8220;宽松”的语法。例如,'98-12-31', '98.12.31', '98/12/31'?98@12@31'是等L(fng)?/p>
'YYYYMMDDHHMMSS'?YYMMDDHHMMSS'格式的没有Q何分隔符的一个字W串Q例如,'19970523091528'?970523091528'被解释ؓ(f)'1997-05-23 09:15:28'Q但?971122459015'是不合法?它有毫无意义的分钟部?且变?0000-00-00 00:00:00'?/p>
'YYYYMMDD'?YYMMDD'格式的没有Q何分隔符的一个字W串Q如果字W串认ؓ(f)是一个日期。例如,'19970523'?970523'被解释作?1997-05-23'Q但?971332'是不合法? 它有无意义的月和天部?且变?0000-00-00'?/p>
YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的一个数字,如果数字认ؓ(f)是一个日期。例如,19830905132800?30905132800被解释作?1983-09-05 13:28:00'?/p>
YYYYMMDD或YYMMDD格式的一个数字,如果数字认ؓ(f)是一个日期。例如,19830905?30905被解释作?1983-09-05'?/p>
一个返回值可以在一个DATETIME, DATE或TIMESTAMP上下文环境中接受的函敎ͼ例如NOW()或CURRENT_DATE?/p>
不合法DATETIME, DATE或TIMESTAMPD变换到适当cd?#8220;?#8221;?'0000-00-00 00:00:00', '0000-00-00'?0000000000000)?/p>
对于包括的日期部分分隔符的指定ؓ(f)字符串的|不必要ؓ(f)于10的月或天的值指?位数字,'1979-6-9'?1979-06-09'是一L(fng)。同? 对于包括的时间部分分隔符的指定ؓ(f)字符串的|不必为小?0的小时、月或秒指定2位数字,'1979-10-30 1:2:3'?1979-10-30 01:02:03'是一L(fng)?/p>
指定为数字应该是6??2?4位长。如果数字是8?4位长Q它被假定以YYYYMMDD或YYYYMMDDHHMMSS格式q且q䆾由头4位数字给出。如果数字是6?2位长Q它被假定是以YYMMDD或YYMMDDHHMMSS格式且年份由?位数字给出。不是这些长度之一的数字通过填补前头的零到最接近的长度来解释?/p>
指定为无分隔W的字符串用它们l定的长度来解释。如果字W串长度??4个字W,q䆾被假定头4个字W给出,否则q䆾被假定由?个字W给出。对于字W串中呈现的多个部分Q字W串从左到右边被解释Q以扑ևq、月、日、小时、分钟和U|q意味着Q你不应该用少?6 个字W的字符丌Ӏ例如,如果你指?9903'Q认为将代表1999q?月,你会(x)发现MySQL把一?#8220;?#8221;日期插入C的表中,q是因ؓ(f)q䆾和月份?9?3Q但是日期部分丢??Q因此该g是一个合法的日期?/p>
TIMESTAMP列用被指定的值的完整_ֺ的存储合法的|不考虑昄大小。这有几个含意:(x) L指定q_(d)月,和日Q即使你的列cd是TIMESTAMP(4)或TIMESTAMP(2)。否则,值将不是一个合法的日期q且0被存储?/p>
如果你用ALTER TABLE拓宽一个狭H的TIMESTAMP列,以前?#8220;隐蔽”的信息将被显C?/p>
同样Q羃?yu)一个TIMESTAMP列不?x)导致信息失去,除?jin)感觉上值在昄Ӟ较少的信息被昄出?/p>
管TIMESTAMPD存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP()Q其他函数操作在格式化了(jin)的检索的gQ这意味着你不能用函C如HOUR()或SECOND()Q除非TIMESTAMP值的相关部分被包含在格式化的g。例如,一个TIMESTAMP列的HH部分部被昄Q除非显C大至是10Q因此在更短的TIMESTAMPg试试使用HOUR()产生一个无意义的结果?/p>
在某U程度上Q你可以把一U日期类型的Dl一个不同的日期cd的对象。然而,q可能值有一些改变或信息的损失:(x) 如果你将一个DATEDl一个DATETIME或TIMESTAMP对象Q结果值的旉部分被设|ؓ(f)'00:00:00'Q因为DATEg包含旉信息?/p>
如果你将一个DATETIME或TIMESTAMPDl一个DATE对象Q结果值的旉部分被删除,因ؓ(f)DATEcd不存储时间信息?/p>
CQ尽DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的D围。例如,TIMESTAMPg能比1970早或?037|晚Q这意味着Q一个日期例?1968-01-01'Q当作ؓ(f)一个DATETIME或DATE值合法时Q它不是一个正TIMESTAMP|q且 如果赋值给q样一个对象,它将被变换到0?/p>
当指定日期值时Q当?j)某些缺P(x) 允许作ؓ(f)字符串指定值的宽松格式能被ƺ骗。例如,g?10:11:12'可能看v来像旉|因ؓ(f)“:”分隔W,但是如果在一个日期中使用Q上下文作为年份被解释?2010-11-12'。?10:45:15'被变换?0000-00-00'Q因?45'不是一个合法的月䆾?/p>
?位数字指定的q值是模糊的,因ؓ(f)世纪是未知的。MySQL使用下列规则解释2位年|(x) ?0-69范围的年D变换?000-2069?/p>
?0-99范围的年D变换?970-1999?br />
本篇文章来源于:(x)开发学?http://edu.codepub.com 原文链接Qhttp://edu.codepub.com/2009/1121/17945.php setMaxResultQ)(j)讄q回的信息条敎ͼsetFirstResultQ)(j)讄查询l果的初始位|,上面的程序段可以实现分页?/p>
在hibernate的Session里面使用createCriteria可以创徏一个Criteria实例帮助我们q行条g查询Q不用自׃hql语句Q很方便?br />
用法很简单,首先传Class实例创徏CriteriaQClass实例对应你想要查询的那个实体:2、创?#8220;本地Net服务?#8221;
默认的用户名/密码错误Q?
3、PLSQL Developer q接试
4、创I间
Sql代码 sqlplus /nolog
q接数据库:(x)
Sql代码 conn /as sysdba
创徏表空_(d)(x)
Sql代码 create tablespace camds datafile 'D:\oracle\product\10.2.0\oradata\camds\camds.dbf' size 200m autoextend on next 10m maxsize unlimited;
5、创建新用户1Q新?#8220;UserQ用P(j)Q?/strong>
2Q设|用户名、口令、默认表I间Q用上面新建的表空_(d)(j)和(f)时表I间Q?/strong>
3Q设|角色权限:(x)
4Q设|?#8221;pȝ权限“Q?/span>
5Q点d用后Q【应用】按钮变灎ͼ新用户创建成功:(x)
6Q新用户d试Q?/span>
6、导入导出数据库
1Q导?/span>
Sql代码 imp userid/pwd@sid file=path/file fromuser=testcamds touser=userid
命o(h)实例Q?br />
Sql代码 imp testcamds/123@camds file=c:\testcamds fromuser=testcamds touser=testcamds
导入l果Q?/p>
2Q导出:(x)
Sql代码 exp userid/pwd@sid file=path/file owner=userid
命o(h)实例Q?
]]>
你可以用TIMESTAMP列类?
TIMESTAMP列类?
TIMESTAMP值可以从1970的某时的开始一直到2037q_(d)_ֺZU,其g为数字显C?
TIMESTAMP值显C尺寸的格式如下表所C:(x)
Q?
+---------------+----------------+
| 列类型 | 昄格式 |
| TIMESTAMP(14) | YYYYMMDDHHMMSS |
| TIMESTAMP(12) | YYMMDDHHMMSS |
| TIMESTAMP(10) | YYMMDDHHMM |
| TIMESTAMP(8) | YYYYMMDD |
| TIMESTAMP(6) | YYMMDD |
| TIMESTAMP(4) | YYMM |
| TIMESTAMP(2) | YY |
+---------------+----------------+
“完整”TIMESTAMP格式?4位,但TIMESTAMP列也可以用更短的昄寸创?
最常见的显C尺寸是6??2、和14?
你可以在创徏表时指定一个Q意的昄寸Q但是定义列长ؓ(f)0或比14大均?x)被强制定义为列?4?
列长在从1?3范围的奇数值尺寸均被强制ؓ(f)下一个更大的偶数?
列如Q?
定义字段长度 强制字段长度
TIMESTAMP(0) -> TIMESTAMP(14)
TIMESTAMP(15)-> TIMESTAMP(14)
TIMESTAMP(1) -> TIMESTAMP(2)
TIMESTAMP(5) -> TIMESTAMP(6)
所有的TIMESTAMP列都有同L(fng)存储大小Q?
使用被指定的时期旉值的完整_ֺQ?4位)(j)存储合法的g考虑昄寸?
不合法的日期Q将?x)被强制?存储
q有几个含意Q?/strong>
2、同P~小一个TIMESTAMP列不?x)导致信息失去,除?jin)感觉上值在昄Ӟ较少的信息被昄出?
3、尽TIMESTAMPD存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP()Q由于MySQLq回TIMESTAMP列的列值是q过格式化后的检索的|q意味着你可能不能用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()Q,除非 TIMESTAMP值的相关部分被包含在格式化的g。例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上Ӟ TIMESTAMP列的HH部分才会(x)被显C,因此在更短的TIMESTAMPg使用HOUR()?x)生一个不可预知的l果?
4、不合法TIMESTAMPD变换到适当cd?#8220;?#8221;?00000000000000)。(DATETIME,DATE亦然Q
你可以用下列语句来验证Q?
INSERT INTO test SET id = 1;
SELECT * FROM test;
| id | date1 |
+----+----------------+
| 1 | 20021114 |
+----+----------------+
SELECT * FROM test;
| id | date1 |
+----+----------------+
| 1 | 20021114093723 |
+----+----------------+
你可以用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作?
如果你有多个TIMESTAMP列,只有W一个自动更新?/p>
1、列值没有明地在一个INSERT或LOAD DATA INFILE语句中指定?
2、列值没有明地在一个UPDATE语句中指定且另外一些的列改变倹{(注意一个UPDATE讄一个列为它已经有的|q将不引起TIMESTAMP列被更新Q因为如果你讄一个列为它当前的|MySQLZ(jin)效率而忽略更攏V)(j)
3、你明确地设定TIMESTAMP列ؓ(f)NULL.
4、除W一个以外的TIMESTAMP列也可以讄到当前的日期和时_(d)只要列设ؓ(f)NULLQ或NOW()?
'id' INT (3) UNSIGNED AUTO_INCREMENT,
'date1' TIMESTAMP (14),
'date2' TIMESTAMP (14),
PRIMARY KEY('id')
);
INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL);
INSERT INTO test SET id= 2;
| id | date1 | date2 |
+----+----------------+----------------+
| 1 | 20021114093723 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->W一条指令因设date1、date2为NULL,所以date1、date2值均为当前时?
W二条指令因没有设date1、date2列|W一个TIMESTAMP列date1为更Cؓ(f)当前旉Q?而二个TIMESTAMP列date2因日期不合法而变?sh)?#8220;00000000000000”
| id | date1 | date2 |
+----+----------------+----------------+
| 3 | 20021114094009 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->q条指o(h)没有明确地设定date2的列|所以第一个TIMESTAMP列date1被更新为当前时?
| id | date1 | date2 |
+----+----------------+----------------+
| 1 | 20021114094009 | 20021114094320 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->q条指o(h)因设定date1=date1Q所以在更新数据时date1列值ƈ不会(x)发生改变
而因讑֮date2=NOW()Q所以在更新数据时date2列g(x)被更Cؓ(f)当前旉
此指令等效ؓ(f) update test SET id= 1,date1=date1,date2=NULL WHERE id=3;
因MySQLq回?TIMESTAMP 列ؓ(f)数字昄形式Q?
你可以用DATE_FROMAT()函数来格式化 TIMESTAMP ?
DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;
| id | date1 | date2 |
+----+---------------------+---------------------+
| 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
| 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
DATE_FORMAT(date2,'%Y-%m-%d') As date2 FROM test;
| id | date1 | date2 |
+----+-------------+-------------+
| 1 | 2002-11-14 | 2002-11-14 |
| 2 | 2002-11-14 | 0000-00-00 |
+----+-------------+-------------+
在某U程度上Q你可以把一U日期类型的Dl一个不同的日期cd的对象?
然而,而尤其注意的是:(x)值有可能发生一些改变或信息的损失:(x)
1、如果你一个DATEDl一个DATETIME或TIMESTAMP对象Q结果值的旉部分被设|ؓ(f)'00:00:00'Q因为DATEg不包含有旉信息。
2、如果你一个DATETIME或TIMESTAMPDl一个DATE对象Q结果值的旉部分被删除,因ؓ(f)DATEcd不存储时间信息?
3、尽DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,
但所有类型不都有同样的D围?
例如QTIMESTAMPg能比1970早,也不能比2037晚,
q意味着Q一个日期例?1968-01-01'Q当作ؓ(f)一个DATETIME或DATE值时它是合法的,
但它不是一个正TIMESTAMP|q且如果这L(fng)一个对象赋值给TIMESTAMP列,它将被变换ؓ(f)0?
当指定日期值时Q当?j)某些缺P(x)
1、允怽为字W串指定值的宽松格式能被ƺ骗。例如,Q因?#8220;:”分隔W的使用Q?10:11:12'可能看v来像旉|但是如果在一个日期中使用Q上下文作为年份被解释?2010-11-12'。?10:45:15'被变换?0000-00-00'Q因?45'不是一个合法的月䆾?
2、以2位数字指定的q值是模糊的,因ؓ(f)世纪是未知的。MySQL使用下列规则解释2位年|(x) ?0-69范围的年D变换?000-2069?在范?0-99的年D变换?970-1999?/p>
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
]]>
问题原因Q?br />
1Qjs代码用了(jin)javas
4.上传囄时提C:(x)Object doesn't support this property or method
原因Q服务器上安装的AspJpeg的版本低?.4版?br />
解决Ҏ(gu)Q安?.4或以上版本的AspJpeglg?
]]>
如果我们要查询User的所有信息我们可以如下用CriteriaQ?/p>
List users = crit.list();
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println("name: " + user.getName());
System.out.println("age: " + user.getAge());
}
我们要ؓ(f)查询限定条gQ可以通过net.sf.hibernate.expression.Expression讄Expression有很多的条g查询Ҏ(gu)下面举一些例子:(x)
crit.add(Expression.ge("age", new Integer(25)));
List users = crit.list();
geQ)(j)表示大于{于Q即age大于{于25的user?/p>
crit.add(Expression.between("weight", new Integer(60)Q?/span>new Integer(80)));
List users = crit.list();
between表示weight?0?0之间?br />
crit.add(Expression.or(
Expression.eq("age", new Integer(20)),
Expression.isNull("age")
));
List users = crit.list();
eq表示age?0的user?br />
crit.setFirstResult(51);
crit.setMaxResult(50);
List users = crit.list();
然后调用Criteria的addҎ(gu)加入条gQRestrictionsQ。常用的条g有:(x)
Ҏ(gu)说明Q?Restrictions.eq {于
Restrictions.allEq 使用MapQ用key/valueq行多个{于的对?br />
Restrictions.gt 大于 >
Restrictions.ge 大于{于 >=
Restrictions.lt 于 <
Restrictions.le 于{于 <=
Restrictions.between 对应SQL的BETWEEN子句
Restrictions.like 对应SQL的LIKE子句
Restrictions.in 对应SQL的in子句
Restrictions.and and关系
Restrictions.or or关系
Restrictions.sqlRestriction SQL限定查詢
例如Q我惌回Person实体里面q龄(age)大于20的记录,那么׃ؓ(f)Criteria加入Restrictions.gt条gQ?br />
Restrictions.and和Restrictions.or很有用,表示and查询q是or查询Q例如我要查询Person实体里面q龄(age)大于20Q或者性别 (sex)为man
的记录,那么׃ؓ(f)Criteria加入:
Restrictions.gt(“age”,new Integer(20)),
Restrictions.eq(“sex”,”man”)
)).list();
如果需要关联查询的话,可以使用Criteria的createCriteriaҎ(gu)创徏一个CriteriaQ例如部?Department)和h?Person)是一对多的关p,我要查询Person实体里面q龄(age)大于20Q性别 (sex)为manQ?br />
备注包含应届生,
且所在部?department)是开发部的记?
.add(Restrictions.eq(“sex”,”man”))
.add(Restrictions.like(“Memo”,”%应届?/span>%”))
.createCriteria(“department”)
.add(Restrictions.eq(“departmentname”,”开发部”))
.list();
其他条g的用法也很简单,׃列D?jin)?br />
另外QHibernate3Z(jin)一个org.hibernate.criterion.DetachedCriteriaQ即ȝCriteriaQ它允许你可以先创徏DetachedCriteriaQ然后传到Session里面才真正返回一个CriteriaQ用法如下:(x)
DetachedCriteria detchedCriteria = DetachedCriteria.forClass(Person.class); // 先徏立DetchedCriteria物g
detchedCriteria.add(Restrictions.ge("age",new Integer(25))); // 加入查询条g
Session session = sessionFactory.openSession();
Criteria criteria = detchedCriteria.getExecutableCriteria(session); // l定Session並返回一个Criteria实例List list = criteria.list();
最后,需要注意,Criteriaq提供了(jin)setFirstResult和setMaxResultsҎ(gu)q行分页查询?br />
]]>
从一个最基本的对象关pL像自动化E序Q了(jin)解Hibernatel成的基本元素,q进一步了(jin)解Hibernate的基语义、配|等概念?/p>
1QO/R映像入门W一个HibernateE序很简单,一个对象映像至一个数据表
1Q?配置Hibernate
Hibernate是ORM的解x(chng)案,其底层对数据库的操作依赖于JDBCQ所以?zhn)必须先取得JDBC驱动E序Q在q边所使用的是MySQLQ所以?zhn)必须至MySQL®Connector/J取得MySQL的JDBC驱动E序?/p>
接下来至Hibernate官方|站取得hibernate 3.0?/p>
解开zip案后,当中的hibernate3.jar是必要的Q而在lib目录中还包括?jin)许多jar案Q?zhn)可以在Hibernate 3.0官方的参考手册上扑ֈq些jar的相兌明,其中必要的是antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging?EHCacheQHibernate底层q需要Java Transaction APIQ所以?zhn)q需要jta.jarQ到q边为止Qd需要以下的jar档案Q?/p>
Hibernate可以q行于单Z上,也可以运行于Web应用E序之中Q如果是q行于单机,则将所有用到的jar档案Q包括JDBC驱动E序Q设定至CLASSPATH中,如果是运行于Web应用E序中,则将jar档案|放于WEB-INF/lib中?/p>
如果(zhn)还需要额外的LibraryQ再依需求加入,例如JUnit、Proxool{等Q接下来可以etc目录下的log4j.properties复制至Hibernate目的Classpath下,q修改一下当中的log4j.logger.org.hibernate为errorQ也是只在错误发生时显C必要的讯息?/p>
接着讄基本的Hibernate配置文gQ可以用XML或Properties案Q这边先使用XMLQ名预设ؓ(f)hibernate.cfg.xmlQ?/p>
hibernate.cfg.xml
配置文g中已l加上批注ؓ(f)每一个项目作?jin)说明,其中对象与数据库表格映像文gq有待加入?/p>
1Q?W一个Hibernate
q边以一个简单的单机E序来示范Hibernate的配|与功能Q首先作数据库的准备工作Q在MySQL中新增一个demo数据库,q徏立user表格Q?/p>
CreateUser2MySQL.sql
|
对于q个表格Q?zhn)有一个Usercd与之对应Q表g的每一个字D将对应至User实例上的Field成员?/p>
User.java
|
其中id是个Ҏ(gu)的属性,Hibernate?x)用它来作Z键识别,(zhn)可以定义主键生的方式Q这是在XML映像文g中完成,Z(jin)告诉Hibernate(zhn)所定义的User实例如何映像x(chng)据库表格Q?zhn)撰写一个XML映射文g名是User.hbm.xmlQ如下所C:(x)
User.hbm.xml
<class>h的name属性ؓ(f)所映像的对象,而table为所映像的表|<id>中column属性指定了(jin)表格字段Q而type属性指定了(jin)User实例的中的id之型态,q边type中所讑֮的是直接指定Java中的对象型态,Hibernate也定义有自己的映像型态,作ؓ(f)Java对象与SQL型态的标准对应型态(因ؓ(f)语言所提供的类型ƈ不一定与数据库的cd对应Q,q之后会(x)再说明?/p>
#p#
<id>中主键的产生方式在这边设定ؓ(f)"native"Q表CZ键的生成方式由HibernateҎ(gu)数据库Dialect的定义来军_Q之后还?sh)(x)介l其它主键的生成方式?/p>
同样的,<property>标签中的column与type都各自指明了(jin)表格中字D与对象中属性的对应?/p>
接着必须在Hibernate配置文ghibernate.cfg.xml中指明映像文件的位置Q如下加入映像文件位|:(x)
hibernate.cfg.xml
接下来撰写一个测试的E序Q这个程序直接以Java E序设计人员熟?zhn)的语法方式来操作对象Q而实际上也直接完成对数据库的操作Q程序将?x)将一W数据存入表g中:(x)
FirstHibernate.java
|
如?zhn)所看到的,E序中只需要直接操作User 对象Qƈq行Session 与Transaction 的相x(chng)作,Hibernate ׃(x)自动完成Ҏ(gu)据库的操作,(zhn)看不到M一行JDBC 或SQL 的陈qͼ撰写好以上的各个案之后Q各案的放|位|如下:(x)
接着可以开始运行程序,l果如下Q?/p>
FirstHibernate执行l果
|
新增资料OK!请先用MySQL 观看l果Q?/p>
执行l果中显CZ(jin)Hibernate 所实际使用的SQLQ由于这个程序还没有查询功能Q所以要
q入MySQL 中看看新增的数据Q如下:(x)
MySQL 中查询结?/strong>
|
Comments
W四D代码的标题应该是hibernate.cfg.xml
1Q? W二?Hibernate
?W一?Hibernate 中介l如何用Hibernate 在不使用SQL 的情况下Q以Java 中操作对象的?fn)惯来插入数据至数据库中Q当然储存数据之后,更重要的是如何将资料dQHibernate 中也可以让?zhn)不写一句SQLQ而以Java 中操作对象的?fn)惯来查询数据?/p>
直接来看个范例:(x)
SecondHibernate.java
|
#p#
Criteria 对SQL q行装Q对于不甚了(jin)解SQL 的开发h员来_(d)使用Criteria 也可以轻易的q行各种数据的检索,(zhn)也可以使用 Expression 讑֮查询条gQƈ之加入Criteria中对查询l果作限ӞExpression.eq()表示讑֮W合条g的查询,例如Expression.eq("name", "caterpillar")表示讑֮查询条g?name"字段中ؓ(f)"caterpillar"的数据?/p>
先来看一下执行结果:(x)
SecondHibernate 执行l果
|
Criteria 是对象导向式的查询方式,让不?jin)解SQL 的开发h员(sh)可以Lq行各项查询Q但Criteria 的API 目前q(sh)是很完善Q而Hibernate 鼓励的查询方式,是透过HQLQHibernate Query LanguageQ来q行Q直接来看个实例Q?/p>
SecondHibernateUsingHQ.java
|
执行l果Q?/p>
SecondHibernateUsingHQ 执行l果
|
透过Query 接口Q?zhn)可以先设定查询参敎ͼ之后透过setXXX(){方法,指定的参数值填入,而不用每ơ都撰写完整的HQLQQuery 的setParameter()Ҏ(gu)W一个参数是指定?出现的位|,?0 开始,W二个参数则是设定查询条件?
#p#
二、简单的Hibernate E序
q边以一个简单的单机E序来示范Hibernate的配|与功能Q在q个例子中的一些操作,实际上会(x)使用一些自动化工具来完成,而不一定亲自手动操作设定,q边完全手动的原因,在于让?zhn)可以知道Hibernate实际上会(x)作那些动作,在进行范例之前,请先定前一个主题(sh)的相关jar案都已l设定在CLASSPATH中?br />
我们先作数据库的准备工作Q在MySQL中新增一个HibernateTest数据库,q徏立USER表格Q?
|
我们先撰写一个纯Java对象Q它U綷表示一个数据集合,待会(x)我们?x)将之映像至数据库的表格上,E序如下Q?
User.java
|
其中id是个Ҏ(gu)的属性,Hibernate?x)用它来作Z键识别,我们可以定义主键产生的方式,q是在XML映像文g中完成,Z(jin)告诉Hibernate对象如何映像x(chng)据库表格Q我们撰写一个XML映射文g名是User.hbm.xmlQ如下所C:(x)
User.hbm.xml
q个XML文g定义?jin)对象属性映像至数据库表格的关系Q?zhn)可以很简单的?jin)解?gu)的方法,像是User对象对应至USER表格Q其中我们?uuid.hex来定义主键的产生法QUUID法使用IP地址、JVM的启动时间、系l时间和一个计数值来产生主键。除?jin)用uuid.hex之外Q我们还可以使用其它的方式来产生主键Q像是increment{,q可以在Hibernate参考手册中扑ֈ相关资料?/p>
<property>h用于定义Java对象的属性,而当中的<column/>h用于定义与数据库的对应,如果(zhn)是手工建立Java对象与数据库表格Q则在最单的情况下,可以只定?lt;property name="sex"/>q样的方式,而由Hibernate自动判断Java对象属性与数据库表格名U对应关p,?lt; property/>?lt;column/>标签上的额外讑֮Q像是not null、sql-type{)(j)Q则可以用于自动产生Java对象与数据库表格的工具上?/p>
接下来我们定义Hibernate配置文gQ主要是q行SessionFactory配置QHibernate可以使用XML或属性文件来q行配置Q我 们这边先介绍如何使用XML配置Q这也是Hibernate所的配|方式,我们的文件名是hibernate.cfg.xmlQ如下:(x)
hibernate.cfg.xml
接下来我们撰写一个测试的E序Q这个程序将直接以JavaE序设计人员熟?zhn)的语法方式来操作对象Q而实际上也直接完成对数据库的操作Q程序将?x)将一W数据存入表g中:(x)
HibernateTest.java
|
#p#
Configuration代表?jin)Java对象x(chng)据库的映像设定,q个讑֮是从我们上面的XML而来Q接下来我们从Configuration取得SessionFactory对象Qƈ由它来开启一个SessionQ它代表对象与表格的一ơ会(x)话操作,?Transaction则表CZl会(x)话操作,我们只需要直接操作User对象Qƈq行Session与Transaction的相x(chng)作, Hibernate׃(x)自动完成Ҏ(gu)据库的操作。这边对E序先只作简单的介绍Q之后再详加说明?/p>
所有的.java案~译Qƈ两个XML档案攄在与HibernateTest相同的目录中Q也是案位置如下Q?
|
OK!现在(zhn)可以执行HibernateTestQ程序将?x)出C下的讯息Q?
|
新增资料OK!请先用MySQL观看l果Q?/p>
q边只先q行数据的存入,要观看数据存入的l果的话Q请q入MySQL观看Q以下是数据库存入的l果Q?
|
public class Remote { public String getData(int index) { ... }}
<script type="text/javascript" src="[WEBAPP]/dwr/interface/Remote.js"> </script><script type="text/javascript" src="[WEBAPP]/dwr/engine.js"> </script>...function handleGetData(str) { alert(str);}Remote.getData(42, handleGetData);
Remote.getData(42, function(str) { alert(str); });
Remote.getData(42, { callback:function(str) { alert(str); }});
Remote.getData(42, { callback:function(str) { alert(str); }, timeout:5000, errorHandler:function(message) { alert("Oops: " + message); }});
Remote.method({ timeout:3 }, { errorHandler:somefunc });
public class Remote { public void setPerson(Person p) { this.person = p; }}
public Person { private String name; private int age; private Date[] appointments; // getters and setters ...}
var p = { name:"Fred Bloggs", age:42, appointments:[ new Date(), new Date("1 Jan 2008") ]};Remote.setPerson(p);
CODE:
long now = System.currentTimeMillis();
String s = String.format("%tR", now); // "15:12"
CODE:
// Current month/day/year
Date d = new Date(now);
s = String.format("%tD", d); // "07/13/04"
CODE:
s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"
CODE:
s = String.format("%05d", 123); // "00123"
是不是很方便Q让人动?j)啊Q哈哈,q有更多的效?
其实format函数有些cMc语言中printf函数Q一些格式字W串?C cMQ但已进行了(jin)某些定制Q以适应 Java 语言Qƈ且利用了(jin)其中一些特性。此Ҏ(gu)提供?jin)对布局寚w和排列的支持Q以?qing)对数倹{字W串和日?旉数据的常规格式和特定于语a环境的输出的支持。支持诸?byte、BigDecimal ?Calendar {常?Java cd?br />
产生格式化输出的每个Ҏ(gu)都需要格式字W串 和参数列表。格式字W串是一?StringQ它可以包含固定文本以及(qing)一个或多个嵌入的格式说明符。请考虑以下CZQ?br />
Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
格式字符串是 format Ҏ(gu)的第一个参数。它包含三个格式说明W?"%1$tm"?%1$te" ?"%1$tY"Q它们指出应该如何处理参C?qing)在文本的什么地Ҏ(gu)入它们。格式字W串的其余部分是包括 "Dukes Birthday: " 和其他Q何空格或标点W号的固定文本?参数列表׃递给位于格式字符串之后的Ҏ(gu)的所有参数组成。在上述CZ中,参数列表的大ؓ(f) 1Q由新对?Calendar l成?br />
1.常规cd、字W类型和数值类型的格式说明W的语法如下Q?/strong>%[argument_index$][flags][width][.precision]conversion
可选的 argument_index 是一个十q制整数Q用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用Q第二个参数?"2$" 引用Q依此类推?br />
可选的 flags 是修改输出格式的字符集。有效标志的集合取决于{换类型?br />
可?width 是一个非负十q制整数Q表明要向输Z写入的最字W数?br />
可?precision 是一个非负十q制整数Q通常用来限制字符数。特定行为取决于转换cd?br />
所需?conversion 是一个表明应该如何格式化参数的字W。给定参数的有效转换集合取决于参数的数据cd?br />
2.用来表示日期和时间类型的格式说明W的语法如下:
%[argument_index$][flags][width]conversion
可选的 argument_index?em>flags ?width 的定义同上?br />
所需?conversion 是一个由两字W组成的序列。第一个字W是 't' ?'T'。第二个字符表明所使用的格式。这些字W类g但不完全{同于那些由 GNU date ?POSIX strftime(3c) 定义的字W?
3.与参C对应的格式说明符的语法如下:(x)
%[flags][width]conversion
可?flags ?width 的定义同上?br />
所需?conversion 是一个表明要在输Z所插内容的字符?
转换
转换可分Z下几c:(x)
1. 常规 - 可应用于M参数cd
2. 字符 - 可应用于表示 Unicode 字符的基本类型:(x)char、Character、byte、Byte、short ?Short。当 Character.isValidCodePoint(int) q回 true Ӟ可将此{换应用于 int ?Integer cd
3. 数?br />
1. 整数 - 可应用于 Java 的整数类型:(x)byte、Byte、short、Short、int、Integer、long、Long ?BigInteger
2. 点 - 可用?Java 的Q点类型:(x)float、Float、double、Double ?BigDecimal
4. 日期/旉 - 可应用于 Java 的、能够对日期或时间进行编码的cdQlong、Long、Calendar ?Date?br />
5. 癑ֈ?- 产生字面?'%' ('\u0025')
6. 行分隔符 - 产生特定于^台的行分隔符
下表ȝ?jin)受支持的{换。由大写字符Q如 'B'?H'?S'?C'?X'?E'?G'?A' ?'T'Q表C的转换与由相应的小写字W的转换{同Q根据流行的 Locale 规则结果{换ؓ(f)大写形式除外。后者等同于 String.toUpperCase() 的以下调?
转换 | 参数cd | 说明 |
'b', 'B' | 常规 | 如果参数 arg ?nullQ则l果?"false"。如?arg 是一?boolean 值或 BooleanQ则l果?String.valueOf() q回的字W串。否则结果ؓ(f) "true"?/td> |
'h', 'H' | 常规 | 如果参数 arg ?nullQ则l果?"null"。否则,l果?Integer.toHexString(arg.hashCode()) 得到的结果?/td> |
's', 'S' | 常规 | 如果参数 arg ?nullQ则l果?"null"。如?arg 实现 FormattableQ则调用 arg.formatTo。否则,l果?arg.toString() 得到的结果?/td> |
'c', 'C' | 字符 | l果是一?Unicode 字符 |
'd' | 整数 | l果被格式化为十q制整数 |
'o' | 整数 | l果被格式化为八q制整数 |
'x', 'X' | 整数 | l果被格式化为十六进制整?/td> |
'e', 'E' | 点 | l果被格式化为用计算机科学记数法表示的十q制?/td> |
'f' | 点 | l果被格式化为十q制?/td> |
'g', 'G' | 点 | Ҏ(gu)_ֺ和舍入运后的|使用计算机科学记数Ş式或十进制格式对l果q行格式化?/td> |
'a', 'A' | 点 | l果被格式化为带有效位数和指数的十六q制点?/td> |
't', 'T' | 日期/旉 | 日期和时间{换字W的前缀。请参阅日期/旉转换?/td> |
'%' | 癑ֈ? | l果为字面?'%' ('\u0025') |
'n' | 行分隔符 | l果为特定于q_的行分隔W?/td> |
'H' | 24 时制的时Q被格式化ؓ(f)必要时带前导零的两位敎ͼ?00 - 23?/td> |
'I' | 12 时制的时Q被格式化ؓ(f)必要时带前导零的两位敎ͼ?01 - 12?/td> |
'k' | 24 时制的时Q即 0 - 23?/td> |
'l' | 12 时制的时Q即 1 - 12?/td> |
'M' | 时中的分钟Q被格式化ؓ(f)必要时带前导零的两位敎ͼ?00 - 59?/td> |
'S' | 分钟中的U,被格式化为必要时带前导零的两位数Q即 00 - 60 Q?60" 是支持闰U所需的一个特D|(j)?/td> |
'L' | U中的毫U,被格式化为必要时带前导零的三位数Q即 000 - 999?/td> |
'N' | U中的毫微秒Q被格式化ؓ(f)必要时带前导零的?ji)位敎ͼ?000000000 - 999999999?/td> |
'p' | 特定于语a环境?上午或下?/a> 标记以小写Ş式表C,例如 "am" ?"pm"。用{换前~ 'T' 可以此输出转换为大写Ş式?/td> |
'z' | 相对?GMT ?RFC 822 格式的数字时区偏U量Q例?-0800?/td> |
'Z' | 表示时区~写形式的字W串。Formatter 的语a环境?yu)取代参数的语言环境Q如果有Q?/td> |
's' | 自协调世界时 (UTC) 1970 q?1 ?1 ?00:00:00 至现在所l过的秒敎ͼ?Long.MIN_VALUE/1000 ?Long.MAX_VALUE/1000 之间的差倹{?/td> |
'Q' | 自协调世界时 (UTC) 1970 q?1 ?1 ?00:00:00 至现在所l过的毫U数Q即 Long.MIN_VALUE ?Long.MAX_VALUE 之间的差倹{?/td> |
'B' | 特定于语a环境?a target="_blank">月䆾全称Q例?"January" ?"February"?/td> |
'b' | 特定于语a环境?a target="_blank">月䆾U?/a>Q例?"Jan" ?"Feb"?/td> |
'h' | ?'b' 相同?/td> |
'A' | 特定于语a环境?a target="_blank">星期?/a>全称Q例?"Sunday" ?"Monday" |
'a' | 特定于语a环境?a target="_blank">星期?/a>Uͼ例如 "Sun" ?"Mon" |
'C' | 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数Q即 00 - 99 |
'Y' | q䆾Q被格式化ؓ(f)必要时带前导零的四位敎ͼ臛_Q,例如Q?092 {于格里高利历的 92 CE?/td> |
'y' | q䆾的最后两位数Q被格式化ؓ(f)必要时带前导零的两位敎ͼ?00 - 99?/td> |
'j' | 一q中的天敎ͼ被格式化为必要时带前导零的三位数Q例如,对于格里高利历是 001 - 366?/td> |
'm' | 月䆾Q被格式化ؓ(f)必要时带前导零的两位敎ͼ?01 - 13?/td> |
'd' | 一个月中的天数Q被格式化ؓ(f)必要时带前导零两位数Q即 01 - 31 |
'e' | 一个月中的天数Q被格式化ؓ(f)两位敎ͼ?1 - 31?/td> |
'R' | 24 时制的旉Q被格式化ؓ(f) "%tH:%tM" |
'T' | 24 时制的旉Q被格式化ؓ(f) "%tH:%tM:%tS"?/td> |
'r' | 12 时制的旉Q被格式化ؓ(f) "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位|可能与语言环境有关?/td> |
'D' | 日期Q被格式化ؓ(f) "%tm/%td/%ty"?/td> |
'F' | ISO 8601 格式的完整日期,被格式化?"%tY-%tm-%td"?/td> |
'c' | 日期和时_(d)被格式化?"%ta %tb %td %tT %tZ %tY"Q例?"Sun Jul 20 16:17:00 EDT 1969"?/td> |
标志 | 常规 | 字符 | 整数 | 点 | 日期/旉 | 说明 |
'-' | y | y | y | y | y | l果是左对齐的?/td> |
'#' | y1 | - | y3 | y | - | l果应该使用依赖于{换类型的替换形式 |
'+' | - | - | y4 | y | - | l果L包括一个符?/td> |
' ' | - | - | y4 | y | - | 对于正|l果中将包括一个前导空?/td> |
'0' | - | - | y | y | - | l果用零来填充 |
',' | - | - | y2 | y5 | - | l果包括特定于语言环境?a target="_blank">l分隔符 |
'(' | - | - | y4 | y5 | - | l果是用圆括号括v来的负数 |
Calendar c = ...;
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
String s2 = String.format("Duke's Birthday: %1$tm %<$te,%<$tY", c);
主要功能如下Q?
1?() 获得面参数?
2、addOptions and removeAllOptions 初始化下拉框
3、addRows and removeAllRows 填充表格
4、getText 取得text属性?
5、getValue 取得form表单?
6、getValues 取得form多个?
7、onReturn
8、selectRange
9、setValue
10、setValues
11、toDescriptiveString
12、useLoadingMessage
13、Submission box
1?();
功能 : 相当?document.getElementById(id);
参数 : id ?name 属性?;
?:
<script>
Var ele=$(txt_test);
Var str=DWRUtil.toDescriptiveString(ele,1)
DWRUtil.debug(str);
</script>
2。DWRUtil.getValue();
功能 : 获得指定元素 value ?
参数 : id ?name 属性?;
注意 : 该函数只能用于有 value 属性的元素
?:
<script>
var val=DWRUtil.getValue(“txt_test”);
DWRUtil.debug(val);
</script>
3?DWRUtil.getValues();
功能 : 获得一l指定元素的 value ?;
参数 :id ?name 构成的数l对?
?:
<script>
Var arr_=DWRUtil.getValues({“txt_name”:null,”txt_pswd”:null});
Var str=DWRUtil.toDescriptiveString(arr,1)
DWRUtil.debug(str);
</script>
4?/strong>DWRUtil.setValue();
功能 : 讄指定元素?value ?
参数 : id ?name 属性?
?:
<script>
DWRUtil.setValue(“txt_test”,”wiley”);
</script>
5?DWRUtil.setValues();
功能 : 讄一l指定元素的?
参数 : id ?name 构成的数l对?
?:
<script>
DWRUtil.setValues({“txt_name”:”wiley”,”txt_pswd”:”wiley”});
</script>
6?DWRUtil.getText();
功能 : 获得 select 元素的文本?
参数 : id ?name 属性?
?:
<script>
Var txt=DWRUtil.getText (“sel_test”);
Var val=DWRUtil.getValue(“sel_test”);
DWRUtil.debug(“Text:”+txt+”\tValue:”+val);
</script>
7。DWRUtil.addRows();
功能 : 指定表格d?
格式 :DWRUtil.addRows(id,items, functions);
参数 :
W一个参?:table ?tbody ?id 属性?
W二个参?: 数组或链?( 可能用词不是很适合 )
W三个参?: 函数链表
?
<script>
Var arr_={“wiley’s blog”,”wiley 中国 ”};
DWRUtil.addRows(“tby_test”,arr_,[function(arr_){return arr_}]);
</script>
<script>
Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
DWRUtil.addRows(“tby_test”,items,[function(item){return item.name}, function(item){return item.add}]);
</script>
8。DWRUtil.romoveAllRows();
功能 : 删除指定表格?
参数 :table ?tbody ?id 属性?
<script>
DWRUtil.romoveAllRows(“tby_test”);// 每次d前将原有数据行删?, 防止数据重叠
Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
DWRUtil.addRows(“tby_test”,items,[function(item){return item.name}, function(item){return item.add}]);
</script>
9。DWRUtil.addOptions();
功能 : d select 元素?option 子元?
格式 :DWRUtil.addOption(id,items) ?DWRUtil.addOption(id,items,valueProp,textProp);
参数 :
W一个参?:select ?id ?name 属性?
W二个参?: 数组或链?( 填充数据 )
W三、四个参?: 链表节点的属?, W三个填?value |W四个填?text ?
<script>
Var arr_={“wiley”,”wiley 中国 ”};
DWRUtil.addRows(“sel_test”,arr_);// 此时 value ?text 值相?
DWRUtil.romoveAllOptions(“sel_test”);
Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
DWRUtil.addRows(“sel_test”,”add”,”name”);// 此时 value ?text 不相?
</script>
10。DWRUtil.romoveAllOptions();
功能 : 删除指定 select 元素?option 子元?
参数 :select 元素?id ?name 属性?
?: 前面例子有用?
11。DWRUtil.debug();
功能 : {h(hun)?alert()
?: 前面例子有用?
12。DWRUtil.toDescriptiveString();
功能Q将对象序列化成字符?, 主要用于调试
带debug信息的toStringQ第一个ؓ(f)要debug的对象,W二个参Cؓ(f)处理{。等U如下:(x)
0: Single line of debug 单行调试
1: Multi-line debug that does not dig into child objects 不分析子元素的多行调?nbsp;
2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到W二层子元素的多行调?
<input type="text" id="text">
DWRUtil.toDescrīptiveString("text",0);
13。DWRUtil.useLoadingMessage();
功能Q当发出ajaxh?面昄的提C等待信?
例:(x)
function searchUser(){
var loadinfo = "loading....."
regUser.queryAllUser(userList);
DWRUtil.useLoadingMessage(loadinfo);
}