﻿<?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-Dragon4s</title><link>http://www.blogjava.net/Dragon4s/</link><description>天若有情天亦老,人间正道是沧桑。</description><language>zh-cn</language><lastBuildDate>Sat, 19 Sep 2026 16:52:13 GMT</lastBuildDate><pubDate>Sat, 19 Sep 2026 16:52:13 GMT</pubDate><ttl>60</ttl><item><title>Oracle表删除大量数据(千万)后查询变慢问题</title><link>http://www.blogjava.net/Dragon4s/articles/387238.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Fri, 07 Sep 2012 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/387238.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/387238.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/387238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/387238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/387238.html</trackback:ping><description><![CDATA[<div style="color: #000000; font-size: 14px;" id="blogDetailDiv">
<div>1. delete 后 TRUNCATE TABLE ;然后重新分析一下 (analyze table tablename compute statistics)。</div>
<div>&nbsp;</div>
<div>2.</div>
<div>Oracle 表删除大量数据后，即使表中只有几行记录，但用select count(*) from table 来查询发觉都不会马上出来，</div>
<div>原因是该表的空间大了，查询起来很慢。解决的方法是把该表所占用的表空间缩小，或者说释放表空间。<br />
alter table XXXX move; 这样处理后就释放了表空间了。</div>
<div>但是释放表空间后，表的行号rowid会发生变化，而基于rowid的索引则会变成无效。因此该操作后必须重建索引。</div>
<div>否则会 提示&#8220;ORA-01502: 索引'SMP.ITEMLOG_MID_IDX'或这类索引的分区处于不可用状态&#8221; </div>
<div>而重建索引的方法当然可以先drop掉再create ，但是这样太麻烦了，</div>
<div>用alter index XXX rebuild 这样最快了，不会改变原来的索引结构。<br /><br /><div>3@URL&gt;<div>http://www.2cto.com/database/201106/94162.html</div><br />Oracle分析表简介</div><div> Oracle分析表是Oracle<a href="http://www.2cto.com/database/" target="_blank">数据库</a>管理的重要部分，下面就为您详细介绍<a href="http://www.2cto.com/database/Oracle/" target="_blank">Oracle</a>分析表方面的知识，希望对您学习Oracle分析表方<br />&nbsp;&nbsp;&nbsp; 面能有所帮助。<br />&nbsp;&nbsp;&nbsp; 1、分析SQL:<br />&nbsp;&nbsp;&nbsp; analyze table tablename compute statistics<br />&nbsp;&nbsp;&nbsp; 等同于 analyze table tablename compute statistics for table for all indexes for all columns<br />&nbsp;&nbsp;&nbsp; for table的统计信息存在于视图：user_tables 、all_tables、dba_tables<br />&nbsp;&nbsp;&nbsp; for all indexes的统计信息存在于视图： user_indexes 、all_indexes、dba_indexes<br />&nbsp;&nbsp;&nbsp; for all columns的统计信息存在于试图：user_tab_columns、all_tab_columns、dba_tab_columns<br />&nbsp;&nbsp;&nbsp; 删除分析SQL:<br />&nbsp;&nbsp;&nbsp; analyze table tablename delete statistics 会删除所有的statistics<br />&nbsp;&nbsp;&nbsp; 2、Oracle分析表的作用：为了使基于CBO的执行计划更加准确<br />&nbsp;&nbsp;&nbsp; DBA_tables的数据有变化，可做对比。详见官方文档：<br />&nbsp;&nbsp;&nbsp; Use the ANALYZE statement to collect non-optimizer statistics, for example, to:<br />&nbsp;&nbsp;&nbsp; Collect or delete statistics about an index or index partition, table or table partition, index-organized<br />&nbsp;&nbsp;&nbsp; table, cluster, or scalar object attribute.<br />&nbsp;&nbsp;&nbsp; Validate the structure of an index or index partition, table or table partition, index-organized table,<br />&nbsp;&nbsp;&nbsp; cluster, or object reference （REF）。<br />&nbsp;&nbsp;&nbsp; Identify migrated and chained rows of a table or cluster.<br />&nbsp;&nbsp;&nbsp; dbms_stats的作用主要是替代analyze的收集统计信息这一块的功能，且在这一方面做了相当大程度上的增强。<br />&nbsp;&nbsp;&nbsp; 以analyze table table_name compute statistics;这条为例，生成的统计信息会存在于user_tables这个视图，查看一下<br />&nbsp;&nbsp;&nbsp; select * from user_tables where table_name=table_name;<br />&nbsp;&nbsp;&nbsp; 观察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN几列你就会明白，这就是变化。 				</div></div>
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/387238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-09-07 13:02 <a href="http://www.blogjava.net/Dragon4s/articles/387238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trigger</title><link>http://www.blogjava.net/Dragon4s/articles/386708.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Fri, 31 Aug 2012 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386708.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386708.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386708.html</trackback:ping><description><![CDATA[<div><div> <div><span style="font-family: 'Times New Roman'; font-size: 10.5pt">&nbsp;<span style="font-family: 'Times New Roman'; font-size: 10.5pt">&nbsp;<span style="font-family: 'Times New Roman'; font-size: 10.5pt"><span style="font-family: 'Times New Roman'; font-size: 10.5pt"><div><img src="data:image/png;base64,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" alt="" /></div></span></span> <div><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span></div> <div><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span>&nbsp;Trigger  中的OLD,和NEW,&nbsp;参数。</div> <div>&nbsp;</div> <div>在&nbsp; INSERT 时，只有NEW,OLD为空，DELETE时，只有OLD,NEW为空。update时都有啦</div> <div>--这是写的第一个触发器，纪念下。</div> <div>CREATE OR REPLACE TRIGGER TRG_SXYK_ST_SNAPSHOOT<br />&nbsp; BEFORE INSERT OR  UPDATE OR DELETE ON BMS_ST_QTY_LST <br />&nbsp; REFERENCING OLD AS OLD NEW AS NEW<br />&nbsp;  FOR EACH ROW<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />DECLARE</div> <div>&nbsp; erpcompanyid varchar2(50);<br />&nbsp; zxgoodsid varchar2(50);<br />&nbsp;  var_goodsname varchar2(50);<br />&nbsp; issaved number(1);<br />&nbsp; oldstqty  number(10);<br />&nbsp; pragma autonomous_transaction;<br />&nbsp; var_goodsid  NUMBER(10);<br />&nbsp; var_storageid NUMBER(10);<br />&nbsp; <br />BEGIN<br />&nbsp; <br />&nbsp; BEGIN</div> <div>&nbsp; --不管增删改 ，找到 stid<br />&nbsp; SELECT nvl(:NEW.Storageid,:old.Storageid) INTO  var_storageid FROM dual;<br />&nbsp; <br />&nbsp; IF&nbsp; var_Storageid IN(5,2922) THEN<br />&nbsp;&nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --不管增删改 ，找到 goodsid<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT nvl(:new.Goodsid,:old.Goodsid)  INTO var_goodsid FROM dual;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select goodsname,zx_goodsid INTO  var_goodsname,zxgoodsid from pub_goods WHERE goodsid = var_goodsid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  select max(value) into erpcompanyid from Sys_npbusi_config where keyword =  'ERPCOMPANYID';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 验证 省货品编码，配送企业是否为空，为空则不插入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF  zxgoodsid is not null and erpcompanyid is not null THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  select COUNT(1) into issaved FROM TB_KCB WHERE ERPDRUGID= var_goodsid  ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select nvl(sum(goodsqty),0) into oldstqty from bms_st_qty_lst  where&nbsp; goodsid=var_goodsid and storageid IN (5,2922);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --不管增删改 ，如果存在则更新<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF ISSAVED = 1 THEN</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UPDATE TB_KCB SET KCSL=(oldstqty - nvl(:OLD.GOODSQTY,0) +  nvl(:NEW.GOODSQTY,0)),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TB_KCB.UPDATETIME=SYSDATE WHERE  TB_KCB.ERPDRUGID=var_GOODSID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMIT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ELSE <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --不管增删改 ，如果不存在则插入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  insert into TB_KCB  (ERPDrugID,KCSL,UpdateTime,ERPCompanyID,GoodsID,ERPProductName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  values (var_goodsid,(oldstqty - NVL(:OLD.GOODSQTY,0) +  nvl(:NEW.GOODSQTY,0)),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SYSDATE,erpcompanyid,zxgoodsid,var_goodsname);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  COMMIT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;</div> <div>&nbsp;&nbsp;&nbsp; END IF;<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; END IF;<br />&nbsp; <br />&nbsp; EXCEPTION<br />&nbsp;&nbsp;&nbsp; WHEN OTHERS  THEN <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br />&nbsp; END;<br />&nbsp; <br />END;<br />/</div> <div>（2）<span style="font-family: 宋体; font-size: 9pt">监管码上传重复时提示重复，<span>js.ajax callback  </span>处理response,但是成功时，没有返回<span>response  </span>标签xml数据，导致在 IE浏览器中报错（对象为空），页面空白。<br />火狐中没事~。。- -  ！&gt;完善代码，上传成功也要返回reponse 标签xml数据<span>  &lt;response&gt;ok&lt;/response&gt;</span></span> <p><span style="font-family: 宋体; font-size: 9pt"></span>&nbsp;</p> <p>&nbsp;</p> <p>一个事务逻辑，一定要考虑周全，&#8221;切记，切记！&#8220; </p></div></span></span></div> <div><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span>&nbsp;</div> <div><span style="font-family: 'Times New Roman'; font-size: 10.5pt"></span></div> </div></div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-31 17:15 <a href="http://www.blogjava.net/Dragon4s/articles/386708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Z] DBLINK详解</title><link>http://www.blogjava.net/Dragon4s/articles/386132.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Thu, 23 Aug 2012 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386132.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386132.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386132.html</trackback:ping><description><![CDATA[<div><div id="blog_text"><div>DBLINK详解<br />FROM:&gt;URL:&gt;<div>http://space.itpub.net/16860121/viewspace-630043</div></div><div>1.创建dblink语法：</div><div>CREATE [PUBLIC] DATABASE LINK link&nbsp;</div><div>CONNECT TO username IDENTIFIED BY password</div><div>USING &#8216;connectstring&#8217;</div><div>说明：</div><div>1) 权限：创建<a target="_self"><u><strong>数据库</strong></u></a>链 接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE  LINK的系统权限，用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中（CREATE  PUBLIC DATABASE  LINK权限在DBA中）。一个公用数据库链接对于数据库中的所有用户都是可用的，而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私  有数据库链接是不可能的，一个数据库链接要么是公用的，要么是私有的。</div><div><strong><span style="color: red;">2)link : &nbsp;当GLOBAL_NAME=TRUE时，link名必须与远程数据库的全局数据库名global_name）相同；否则，可以任意命名。</span></strong></div><div>3)connectstring：连接字符串，tnsnames.ora中定义远程数据库的连接串。</div><div>4)username、password：远程数据库的用户名，口令。如果不指定，则使用当前的用户名和口令登录到远程数据库。</div><div>2.删除数据库链接的语句：</div><div>DROP [PUBLIC] DATABASE LINK zrhs_link</div><div>3.查看已创建的dblink</div><div>select owner,object_name from dba_objects where object_type='DATABASE LINK';</div><div>4.dblink的引用：</div><div>[user.]table|view@dblink</div><div>如：</div><div>SELECT * FROM worker@zrhs_link;</div><div>SELECT * FROM camel.worker@zrhs_link ;</div><div>5.创建同义词：</div><div>对于经常使用的数据库链接，可以建立一个本地的同义词，方便使用：</div><div>CREATE SYNONYM worker_syn FOR worker@zrhs_link;</div><div>6.创建远程视图：</div><div>CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where&#8230;;</div><div>现在本视图可与本地数据库中的任何其它视图一样对待，也可以授权给其它用户访问此视图，但该用户必须有访问数据库链接的权限。</div><div>其他：</div><div>修改GLOBAL_NAME的方法：</div><div>1.在远程数据库的init.ora文件中将global_names设为false。</div><div>或者</div><div>2.用sys用户执行如下语句：ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;</div><div>修改后重新启动数据库设置才能生效。</div><div>数据库全局名称可以用以下命令查出：SELECT * FROM GLOBAL_NAME;</div><br /><br />===== dblink 实战 ======<div>1.dblink分为公有和私有两类。</div><div>公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字。</div><div>公有dblink对所有人开放，在该dblink之上创建的同义词也会随之对所有人开放。（<a target="_self"><u><strong>测试</strong></u></a>并确认，不过测试是在一个实例多个用户之间进行）</div><div>私有dblink只有创建者可以访问，其上的同义词不能被其他用户访问。需为用户创建视图，并将视图授权给所需用户后，用户才可访问该视图。</div><div>另外，不能将带有dblink的同义词直接授权给用户。否则报错，其等价于：</div><div><div>grant select on table1@user1 to user2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</div><div>ERROR at line 1:</div><div>ORA-02021: DDL operations are not allowed on a remote database</div><div>2.创建dblink时，可以使用连接字符串（与tnsname.ora中的），效率较高。</div></div></div></div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-23 17:19 <a href="http://www.blogjava.net/Dragon4s/articles/386132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Z] 【IMPDP】同一数据库实例不同用户间数据迁移复制——NETWORK_LINK参数</title><link>http://www.blogjava.net/Dragon4s/articles/386118.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Thu, 23 Aug 2012 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386118.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386118.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386118.html</trackback:ping><description><![CDATA[<div>
<div><span style="font-family: Courier New;">@URL</span> &gt; http://space.itpub.net/519536/viewspace-631571</div><span style="font-family: Courier New;">
<br />
如何快速的<a target="_self"><u><strong>复制</strong></u></a>一个<a target="_self"><u><strong>用户</strong></u></a>的数据到另外一个用户（这个用户可能在不同的<a target="_self"><u><strong>数据库</strong></u></a>中）？</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">一般答案：使用EXP（EXPDP）与IMP（IMPDP）相结合完成用户数据的导入和导出</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">高级方法：IMPDP工具提供的<a target="_self"><u><strong>NETWORK_LINK</strong></u></a>参数可以一步到位的完成此项艰巨的任务。</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">这种方法非常类似于使用CTAS方法在表复制中的应用，只不过这里我们实现的是用户间的数据复制。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">使用这种方法的一般步骤如下：</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">a.创建database link；</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">b.使用IMPDP的network_link、schemas和remap_schema相结合完成用户的数据的<a target="_self"><u><strong>迁移</strong></u></a>；</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">真实的感受一下此项技术带给我们的快乐。</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">实现案例：同一个<a target="_self"><u><strong>实例</strong></u></a>中不同用户间的迁移复制。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">1.创建指向自身的DATABASE LINK</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">1）确认tnsnames.ora文件中的连接串</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secDB /home/oracle$ cat $ORACLE_HOME/network/admin/tnsnames.ora</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;"># tnsnames.ora Network Configuration File: /oracle/ora11gR2/product/11.2.0/dbhome_1/network/admin/tnsnames.ora</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;"># Generated by <a target="_self"><u><strong>Oracle</strong></u></a> configuration tools.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;"><a target="_self"><u><strong>SECOOLER</strong></u></a> =</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; (DESCRIPTION =</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = secDB)(PORT = 1526))</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = secooler)</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp; )</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; )</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">2）在数据库系统中创建一个指向自身的DATABASE LINK</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sys@secooler&gt; create public database link dblink_to_myself connect to system identified by sys using 'SECOOLER';</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Database link created.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">2.复制sec用户的数据到secooler用户</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">1）确认sec用户下的T表及其数据量</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sys@secooler&gt; conn sec/sec</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Connected.</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@secooler&gt; select * From cat;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">TABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">------------------------------ -----------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@secooler&gt; select count(*) from t;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; COUNT(*)</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">----------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp; 71325</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">2）查看secooler用户</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sys@secooler&gt; conn secooler/secooler</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Connected.</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secooler&gt; select * from cat;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">no rows selected</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">此时secooler用户中不包含任何T表信息。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">3）使用IMPDP工具实现数据从sec用户向secooler用户复制的功能</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secDB /home/oracle$</span><strong><span style="font-family: Courier New; color: red;"> impdp system/sys network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler</span></strong><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Import: Release 11.2.0.1.0 - Production on Thu Apr 8 10:01:16 2010</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Copyright (c) 1982, 2009, Oracle and/or its affiliates.&nbsp; All rights reserved.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">With the Partitioning, Oracle Label Security, OLAP, <a target="_self"><u><strong>Data</strong></u></a> Mining,</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Oracle Database Vault and Real Application Testing options</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":&nbsp; system/******** network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Estimate in progress using BLOCKS method...</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Total estimation using BLOCKS method: 9 MB</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/USER</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">ORA-31684: Object type USER:"SECOOLER" already exists</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/SYSTEM_GRANT</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/ROLE_GRANT</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/DEFAULT_ROLE</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/TABLE/TABLE</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">. . imported "SECOOLER"."T"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 71325 rows</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 10:02:45</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">3.查看secooler用户数据，验收迁移成果</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secDB /home/oracle$ sqlplus secooler/secooler</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 8 10:04:55 2010</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Copyright (c) 1982, 2009, Oracle.&nbsp; All rights reserved.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Connected to:</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">With the Partitioning, Oracle Label Security, OLAP, Data Mining,</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Oracle Database Vault and Real Application Testing options</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secooler&gt; select * from cat;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">TABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">------------------------------ -----------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler@secooler&gt; select count(*) from t;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; COUNT(*)</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">----------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp; 71325</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">令人激动地时刻到了，sec用户下的T表及其数据已经成功的&#8220;复制&#8221;到了secooler用户中。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">4.小结</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">使用IMPDP工具完成用户数据复制的优点：</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">1）节省了大量的磁盘空间，因为不用生成中间的dump文件；</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">2）操作简便，步骤精简；</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">3）因为操作环节的减少，整个操作过程不易出错。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Good luck.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">secooler</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">10.04.07</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">-- The End --</span><br />
<br />
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-23 15:50 <a href="http://www.blogjava.net/Dragon4s/articles/386118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Z]java.util.prefs.Preferences用法 </title><link>http://www.blogjava.net/Dragon4s/articles/386028.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Wed, 22 Aug 2012 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386028.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386028.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386028.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386028.html</trackback:ping><description><![CDATA[<div>
<p>我们经常需要将我们的程序中的设定，如窗口位置，开启过的文件，用户的选项设定等数据记录下来，以做便用户下一次开启程序能继续使用这些数据。<br />
以前我们通常的做法是使用Properties类，它提供以下方法:<br />
<span style="color: red;">void load(InputStream inStream)</span><br /><span style="color: red;">
void store(OutputStream out, String header)</span><br /><span style="color: red;">
String getProperty(String key, String defaultValue)</span><br /><span style="color: red;">
String getProperty(String key)</span><br />
这些方法让我们很容易的存取设定数据.<br />
另外的办法是使用ResourceBundle这个类来储存设定数据，甚至有些程序作者使用一个自定结构的文件来储存设定数据。<br />
但不管怎样，最让程序作者头痛的是：我该将这些数据保存在哪？</p>
<p>现在好了，JDK1.4为我们提供的java.util.prefs包，里面有一个Preferences类，能让以上的工作变得极其轻松!<br />
写VB程序的人常常用SaveSetting函数和getSettging来存取注册表中的用户设定数据。而Java的Preferences类也提供了类似的机制。<br />
<span style="color: red;">Preferences类在不同的平台中有不同的实现方式。而在Windows平台中，<u><strong>Preferences是将数据保存在注册表中的</strong></u>，而在其它平台中的实现我就不得而知了(我对Linux等系统都不太了解).</span><br />
但不管怎样，都是通过相同的接口来使用的，程序作者可以不管实现细节。</p>
<p><span style="font-size: medium;"><strong><em>建立Preferences对象</em> </strong> <br />
</span> 为了区分不同的应用程序的参数项，在建立Preferences时要指定一个节点路径。<br />
Preferences是一个抽象类，提供了一系列静态方法和抽象方法来操作参数项:<br />
抽象方法:<br />
<span style="color: #0000ff;">Preferences userData = Preferences.userNodeForPackage(this);<br />
Preferences sysData = Preferences.systemNodeForPackage(this);<br />
</span> 这两个方法是从指定的物件所在的包(package)返回一个节点路径，如this是javax.swing.JComponent,则返回/javax/swing<br />
静态方法:<br />
<span style="color: #0000ff;">Preferences userData = Preferences.userRoot().node("/com/sunway/spc");<br />
Preferences sysData = Preferences.systemRoot().node("/com/sunway/spc");</span> </p>
<p>以上每种方式提供了两套操作方法。其中一套是用户参数项，另一套是系统参数项。<br />
<strong>在Windows平台中，用户参数项在注册表中的根节点是<br /><span style="color: #ff0000;">HKEY_CURRENT_USER/Software/JavaSoft/Prefs<br />
</span> 系统参数项在注册表中的根节点是</strong>
<strong><br /><span style="color: #ff0000;">HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs</span></strong>
<strong> <br />
而我们指定的节点路径是位于这些根节点之下的.</strong></p>
<p><strong><em><span style="font-size: medium;">如何读写数据</span> </em> </strong> <br />
Preferences提供了多种类型数据的读写方法。<br />
先来看写(put)的方法,<br />
<span style="color: #0000ff;">put(String key, String value)<br />
putBoolean(String key, boolean value)<br />
putByteArray(String key, byte value[])<br />
putDouble(String key, double value)<br />
putFloat(String key, float value)<br />
putInt(String key, int value)<br />
putLong(String key, long value)<br />
</span> 下面的是读(get)的方法,<br />
<span style="color: #0000ff;">get(String key, String default)<br />
getBoolean(String key, boolean default)<br />
getByteArray(String key, byte default[])<br />
getDouble(String key, double default)<br />
getFloat(String key, float default)<br />
getInt(String key, int default)<br />
getLong(String key, long default)<br />
</span> 注意，每一种get方法的第二个参数需要我们为它指定缺省的参数。<br />
除了以上方式之外，Preferences还允许我们将它的数据导出到一个XML文件保存，<br />
<span style="color: #0000ff;">void exportNode(OutputStream os)<br />
void exportSubtree(OutputStream os)<br />
</span> 我们可以导出一个节点，或是导出整个子节点树.</p>
<p><strong><em>Preferences的一个演示</em> </strong> <br />
以上的讲解足可以写一个示例来看看Preferences是如何为我们工作的,看看下面的例子:<br />
<span style="color: #3300ff;">import java.io.*;<br />
import java.util.prefs.*;</span> </p>
<p><span style="color: #3300ff;">public class PrefsDemo {<br />
public static void main(String args[])<br />
{<br />
&nbsp;&nbsp;&nbsp; String keys[] =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"sunway","copyright","author"};<br />
&nbsp;&nbsp;&nbsp; String values[] =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"sunway technology company","copyright </span> <a style="font-size: 12px; color: blue; text-decoration: underline;" href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#50;&#48;&#48;&#50;"><span style="color: #3300ff;">2002","turbochen@163.com"}</span> </a> <span style="color: #3300ff;">;</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #55aa55;">/* 建立一个位于user root下的/com/sunway/spc节点参数项*/</span> <br />
&nbsp;&nbsp;&nbsp; Preferences prefsdemo =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Preferences.userRoot().node("/com/sunway/spc");</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #66aa55;">/* 储存参数项*/</span> <br />
&nbsp;&nbsp;&nbsp; for (int i=0 ; i &lt; keys.length; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.put(keys[i], values[i]);<br />
&nbsp;&nbsp;&nbsp; }</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #5ea25e;">/* 导出到XML文件 */</span> <br />
&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = new FileOutputStream("prefsdemo.xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.exportNode(fos);<br />
&nbsp;&nbsp;&nbsp; } catch (Exception e)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Cannot export nodes: " + e);<br />
&nbsp;&nbsp;&nbsp; }</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; </span> <span style="color: #5ea25e;">/* 去掉注释可以清除注册表中的参数项*/<br />
/*&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.removeNode();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (BackingStoreException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } */</span> </p>
<p><span style="color: #3300ff;">}<br />
}</span> </p>
<p>以上介绍了Preferences功能，要了解更多Preferences的方法，请<a style="font-size: 12px; color: blue; text-decoration: underline;" href="http://java.sun.com/j2se/1.4/docs/api/java/util/prefs/Preferences.html">查阅JDK文档java.util.prefs.Preferences</a> </p>
<p>转自：http://hi.baidu.com/wiselyman/blog/item/09c76c2798db5d0a918f9d8e.html</p>
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-22 14:28 <a href="http://www.blogjava.net/Dragon4s/articles/386028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]java.util.Preferences 数据管理</title><link>http://www.blogjava.net/Dragon4s/articles/386025.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Wed, 22 Aug 2012 05:48:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386025.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386025.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386025.html</trackback:ping><description><![CDATA[<div><span style="color: red;">java.util.Preferences </span>这是一个抽象类,具体有什么用呢?<br />
<span style="color: red;">主要用于保存用户或系统相关的数据</span>(&nbsp;&nbsp;比如:&nbsp;我们希望某个用户设置自己的主题,下次再登录进系统时,仍然是这个主题...&nbsp; ),具体的作用功能什么的我不做多的介绍...
<div>&nbsp;&nbsp;&nbsp; 由于这个类属于抽象类,所以不能直接通过new来创建,不过它提供了几个static method ,其实底层还是通过调用子类的实现来操作的..</div>
<div>&nbsp;&nbsp;&nbsp; Preferences的数据是可以跨平台的,在Windows下,设置的这些属性会添加到'注册表'中,Linux 或 Unix 我没有研究过...</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://img1.51cto.com/attachment/201208/235927312.jpg" border="0" /></div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 不多说,直接贴出源代码(代码中有详细的注释):</div>
<div>
<div>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana,宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px">package com.lixing.util; <br />
<br />
import java.io.File; <br />
import java.io.FileNotFoundException; <br />
import java.io.FileOutputStream; <br />
import java.io.IOException; <br />
import java.io.OutputStream; <br />
import java.util.prefs.BackingStoreException; <br />
import java.util.prefs.Preferences; <br />
<br />
/** <br />
* Preferences有两种保存文件的方式: <br />
*&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;1.</span><span style="color: red;"> sysRoot 与系统有关的用户配置文件,此文件只要是系统用户都可以访问 </span><br />
<span style="color: red;">*&nbsp;&nbsp;&nbsp;&nbsp;2. userRoot 与用户有关的用户配置文件,只有该用户才可以访问 </span><br />
*&nbsp;&nbsp;&nbsp;&nbsp;但两者的操作方法完全一样 <br />
*&nbsp;&nbsp;&nbsp;&nbsp; <br />
* @author Administrator <br />
* <br />
*/ <br />
public class PreferencesTest { <br />
&nbsp;&nbsp;private String[] keys = { "userName", "userPwd", "userEmail" }; <br />
&nbsp;&nbsp;private String[] values = { "Lixing", "123456", "hnlixing520@126.com" }; <br />
<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 设置Preferences的值 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private&nbsp;&nbsp;&nbsp;&nbsp;void setPreference(Preferences userRoot) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; keys.length; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.put(keys[i], values[i]); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 获得Preferences的指定值 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void getPreference(Preferences userRoot){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userName: " + userRoot.get("userName", "佚名") ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userPwd: " + userRoot.get("userPwd", "0000") ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userEmail: " + userRoot.get("userEmail", "xxx@126.com") ); <br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 移除Preferences的首层包 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void removeNode(Preferences userRoot){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.removeNode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (BackingStoreException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "removeNode success" ); <br />
&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 以树型结构导出为XML <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void exportSubTree(Preferences userRoot) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;OutputStream os = null; <br />
&nbsp;&nbsp;&nbsp;&nbsp;File file =new File("preferences.xml"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os = new FileOutputStream( file ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.exportSubtree(os); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (FileNotFoundException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (BackingStoreException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} finally { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "export tree success filename " + file.getName() ); <br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;public static void main(String[] args) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;PreferencesTest test = new PreferencesTest(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;//以包的方式建立用户配置,目的就是防止冲突,便于管理 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Preferences userRoot = Preferences.userNodeForPackage(PreferencesTest.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.setPreference(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.exportSubTree(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.getPreference(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.removeNode(userRoot); <br />
&nbsp;&nbsp;} <br />
}</div>
</div>
</div>
<div>&nbsp;</div>
<p>本文出自 &#8220;<a href="http://kinglixing.blog.51cto.com">李新博客</a>&#8221; 博客，请务必保留此出处<a href="http://kinglixing.blog.51cto.com/3421535/968777">http://kinglixing.blog.51cto.com/3421535/968777</a></p>
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-22 13:48 <a href="http://www.blogjava.net/Dragon4s/articles/386025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>