??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一区二区高清,欧美成人明星100排名,中文字幕视频一区http://www.aygfsteel.com/Dragon4s/天若有情天亦?人间正道是桑?/description>zh-cnWed, 18 Jun 2025 14:26:22 GMTWed, 18 Jun 2025 14:26:22 GMT60Oracle表删除大量数?千万)后查询变慢问?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/Dragon4s/articles/387238.html</guid><wfw:comment>http://www.aygfsteel.com/Dragon4s/comments/387238.html</wfw:comment><comments>http://www.aygfsteel.com/Dragon4s/articles/387238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Dragon4s/comments/commentRss/387238.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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> </div> <div>2.</div> <div>Oracle 表删除大量数据后Q即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来Q?/div> <div>原因是该表的I间大了Q查询v来很慢。解决的Ҏ是把该表所占用的表I间~小Q或者说释放表空间?br /> alter table XXXX move; q样处理后就释放了表I间了?/div> <div>但是释放表空间后Q表的行号rowid会发生变化,而基于rowid的烦引则会变成无效。因此该操作后必重建烦引?/div> <div>否则?提示“ORA-01502: 索引'SMP.ITEMLOG_MID_IDX'或这cȝ引的分区处于不可用状?#8221; </div> <div>而重建烦引的Ҏ当然可以先drop掉再create Q但是这样太ȝ了,</div> <div>用alter index XXX rebuild q样最快了Q不会改变原来的索引l构?br /><br /><div>3@URL><div>http://www.2cto.com/database/201106/94162.html</div><br />Oracle分析表简?/div><div> Oracle分析表是Oracle<a target="_blank">数据?/a>理的重要部分,下面׃ؓ您详l介l?a target="_blank">Oracle</a>分析表方面的知识Q希望对您学习Oracle分析表方<br />    面能有所帮助?br />    1、分析SQL:<br />    analyze table tablename compute statistics<br />    {同?analyze table tablename compute statistics for table for all indexes for all columns<br />    for table的统计信息存在于视图Quser_tables 、all_tables、dba_tables<br />    for all indexes的统计信息存在于视图Q?user_indexes 、all_indexes、dba_indexes<br />    for all columns的统计信息存在于试图Quser_tab_columns、all_tab_columns、dba_tab_columns<br />    删除分析SQL:<br />    analyze table tablename delete statistics 会删除所有的statistics<br />    2、Oracle分析表的作用Qؓ了ZCBO的执行计划更加准?br />    DBA_tables的数据有变化Q可做对比。详见官Ҏ档:<br />    Use the ANALYZE statement to collect non-optimizer statistics, for example, to:<br />    Collect or delete statistics about an index or index partition, table or table partition, index-organized<br />    table, cluster, or scalar object attribute.<br />    Validate the structure of an index or index partition, table or table partition, index-organized table,<br />    cluster, or object reference QREFQ?br />    Identify migrated and chained rows of a table or cluster.<br />    dbms_stats的作用主要是替代analyze的收集统计信息这一块的功能Q且在这一斚w做了相当大程度上的增强?br />    以analyze table table_name compute statistics;q条ZQ生成的l计信息会存在于user_tablesq个视图Q查看一?br />    select * from user_tables where table_name=table_name;<br />    观察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN几列你就会明白,q就是变化? </div></div> </div><img src ="http://www.aygfsteel.com/Dragon4s/aggbug/387238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Dragon4s/" target="_blank">Dragon4s</a> 2012-09-07 13:02 <a href="http://www.aygfsteel.com/Dragon4s/articles/387238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Triggerhttp://www.aygfsteel.com/Dragon4s/articles/386708.htmlDragon4sDragon4sFri, 31 Aug 2012 09:15:00 GMThttp://www.aygfsteel.com/Dragon4s/articles/386708.htmlhttp://www.aygfsteel.com/Dragon4s/comments/386708.htmlhttp://www.aygfsteel.com/Dragon4s/articles/386708.html#Feedback0http://www.aygfsteel.com/Dragon4s/comments/commentRss/386708.htmlhttp://www.aygfsteel.com/Dragon4s/services/trackbacks/386708.html
  
 Trigger 中的OLD,和NEW, 参数?/div>
 
?nbsp; INSERT Ӟ只有NEW,OLD为空QDELETEӞ只有OLD,NEW为空。update旉有啦
--q是写的W一个触发器Q纪念下?/div>
CREATE OR REPLACE TRIGGER TRG_SXYK_ST_SNAPSHOOT
  BEFORE INSERT OR UPDATE OR DELETE ON BMS_ST_QTY_LST
  REFERENCING OLD AS OLD NEW AS NEW
  FOR EACH ROW
       
DECLARE
  erpcompanyid varchar2(50);
  zxgoodsid varchar2(50);
  var_goodsname varchar2(50);
  issaved number(1);
  oldstqty number(10);
  pragma autonomous_transaction;
  var_goodsid NUMBER(10);
  var_storageid NUMBER(10);
 
BEGIN
 
  BEGIN
  --不管增删?Q找?stid
  SELECT nvl(:NEW.Storageid,:old.Storageid) INTO var_storageid FROM dual;
 
  IF  var_Storageid IN(5,2922) THEN
   
      --不管增删?Q找?goodsid
      SELECT nvl(:new.Goodsid,:old.Goodsid) INTO var_goodsid FROM dual;
     
      select goodsname,zx_goodsid INTO var_goodsname,zxgoodsid from pub_goods WHERE goodsid = var_goodsid;
      select max(value) into erpcompanyid from Sys_npbusi_config where keyword = 'ERPCOMPANYID';
     
           -- 验证 省货品编码,配送企业是否ؓI,为空则不插入
      IF zxgoodsid is not null and erpcompanyid is not null THEN
       
         select COUNT(1) into issaved FROM TB_KCB WHERE ERPDRUGID= var_goodsid ;
         select nvl(sum(goodsqty),0) into oldstqty from bms_st_qty_lst where  goodsid=var_goodsid and storageid IN (5,2922);
        
         --不管增删?Q如果存在则更新
         IF ISSAVED = 1 THEN
         UPDATE TB_KCB SET KCSL=(oldstqty - nvl(:OLD.GOODSQTY,0) + nvl(:NEW.GOODSQTY,0)),
         TB_KCB.UPDATETIME=SYSDATE WHERE TB_KCB.ERPDRUGID=var_GOODSID;
         COMMIT;
              
         ELSE
          
         --不管增删?Q如果不存在则插?br />        
         insert into TB_KCB (ERPDrugID,KCSL,UpdateTime,ERPCompanyID,GoodsID,ERPProductName)
         values (var_goodsid,(oldstqty - NVL(:OLD.GOODSQTY,0) + nvl(:NEW.GOODSQTY,0)),
         SYSDATE,erpcompanyid,zxgoodsid,var_goodsname);
         COMMIT;
              
         END IF;
    END IF;
    
  END IF;
 
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;
 
END;
/
Q?Q?span style="font-family: 宋体; font-size: 9pt">监管码上传重复时提示重复Q?span>js.ajax callback 处理response,但是成功Ӟ没有q回response 标签xml数据Q导致在 IE览器中报错Q对象ؓI)Q页面空白?br />火狐中没事~。? - Q?gt;完善代码Q上传成功也要返回reponse 标签xml数据 <response>ok</response>

 

 

一个事务逻辑Q一定要考虑周全Q?#8221;切记Q切讎ͼ“

 


Dragon4s 2012-08-31 17:15 发表评论
]]>[Z] DBLINK详解http://www.aygfsteel.com/Dragon4s/articles/386132.htmlDragon4sDragon4sThu, 23 Aug 2012 09:19:00 GMThttp://www.aygfsteel.com/Dragon4s/articles/386132.htmlhttp://www.aygfsteel.com/Dragon4s/comments/386132.htmlhttp://www.aygfsteel.com/Dragon4s/articles/386132.html#Feedback0http://www.aygfsteel.com/Dragon4s/comments/commentRss/386132.htmlhttp://www.aygfsteel.com/Dragon4s/services/trackbacks/386132.html
DBLINK详解
FROM:>URL:>
http://space.itpub.net/16860121/viewspace-630043
1.创徏dblink语法Q?/div>
CREATE [PUBLIC] DATABASE LINK link 
CONNECT TO username IDENTIFIED BY password
USING ‘connectstring’
说明Q?/div>
1) 权限Q创?a target="_self">数据?/strong>?接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系l权限,用来d到远E数据库的帐号必LCREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的Q而一个私有链接仅对创建它的用户可用。由一个用L另外一个用h权私 有数据库链接是不可能的,一个数据库链接要么是公用的Q要么是U有的?/div>
2)link :  当GLOBAL_NAME=TRUEӞlink名必Mq程数据库的全局数据库名global_nameQ相同;否则Q可以Q意命名?/span>
3)connectstringQ连接字W串Qtnsnames.ora中定义远E数据库的连接串?/div>
4)username、passwordQ远E数据库的用户名Q口令。如果不指定Q则使用当前的用户名和口令登录到q程数据库?/div>
2.删除数据库链接的语句Q?/div>
DROP [PUBLIC] DATABASE LINK zrhs_link
3.查看已创建的dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
4.dblink的引用:
[user.]table|view@dblink
如:
SELECT * FROM worker@zrhs_link;
SELECT * FROM camel.worker@zrhs_link ;
5.创徏同义词:
对于l常使用的数据库链接Q可以徏立一个本地的同义词,方便使用Q?/div>
CREATE SYNONYM worker_syn FOR worker@zrhs_link;
6.创徏q程视图Q?/div>
CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…;
现在本视囑֏与本地数据库中的M其它视图一样对待,也可以授权给其它用户讉K此视图,但该用户必须有访问数据库链接的权限?/div>
其他Q?/div>
修改GLOBAL_NAME的方法:
1.在远E数据库的init.ora文g中将global_names设ؓfalse?/div>
或?/div>
2.用sys用户执行如下语句QALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
修改后重新启动数据库讄才能生效?/div>
数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;


===== dblink 实战 ======
1.dblink分ؓ公有和私有两cR?/div>
公有dblink使用public修饰关键字。在create和drop的时候都需要用public关键字?/div>
公有dblinkҎ有h开放,在该dblink之上创徏的同义词也会随之Ҏ有h开放。(q确认,不过试是在一个实例多个用户之间进行)
U有dblink只有创徏者可以访问,其上的同义词不能被其他用戯问。需为用户创图,q将视图授权l所需用户后,用户才可讉K该视图?/div>
另外Q不能将带有dblink的同义词直接授权l用戗否则报错,其等价于Q?/div>
grant select on table1@user1 to user2                           *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
2.创徏dblinkӞ可以使用q接字符Ԍ与tnsname.ora中的Q,效率较高?/div>


Dragon4s 2012-08-23 17:19 发表评论
]]>[Z] 【IMPDP】同一数据库实例不同用户间数据q移复制——NETWORK_LINK参数http://www.aygfsteel.com/Dragon4s/articles/386118.htmlDragon4sDragon4sThu, 23 Aug 2012 07:50:00 GMThttp://www.aygfsteel.com/Dragon4s/articles/386118.htmlhttp://www.aygfsteel.com/Dragon4s/comments/386118.htmlhttp://www.aygfsteel.com/Dragon4s/articles/386118.html#Feedback0http://www.aygfsteel.com/Dragon4s/comments/commentRss/386118.htmlhttp://www.aygfsteel.com/Dragon4s/services/trackbacks/386118.html
@URL > http://space.itpub.net/519536/viewspace-631571

如何快速的复制一?a target="_self">用户的数据到另外一个用Pq个用户可能在不同的数据?/strong>中)Q?/span>
一般答案:使用EXPQEXPDPQ与IMPQIMPDPQ相l合完成用户数据的导入和导出

高ҎQIMPDP工具提供?a target="_self">NETWORK_LINK参数可以一步到位的完成此项艰巨的Q务?/span>
q种Ҏ非常cM于用CTASҎ在表复制中的应用Q只不过q里我们实现的是用户间的数据复制?/span>

使用q种Ҏ的一般步骤如下:
a.创徏database linkQ?/span>
b.使用IMPDP的network_link、schemas和remap_schema相结合完成用L数据?a target="_self">q移Q?/span>

真实的感受一下此Ҏ术带l我们的快乐?/span>
实现案例Q同一?a target="_self">实例中不同用户间的迁Ud制?/span>

1.创徏指向自n的DATABASE LINK
1Q确认tnsnames.ora文g中的q接?/span>
secooler@secDB /home/oracle$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/ora11gR2/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

SECOOLER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secDB)(PORT = 1526))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = secooler)
    )
  )

2Q在数据库系l中创徏一个指向自w的DATABASE LINK
sys@secooler> create public database link dblink_to_myself connect to system identified by sys using 'SECOOLER';

Database link created.

2.复制sec用户的数据到secooler用户
1Q确认sec用户下的T表及其数据量
sys@secooler> conn sec/sec
Connected.
sec@secooler> select * From cat;

TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
T                              TABLE

sec@secooler> select count(*) from t;

  COUNT(*)
----------
     71325

2Q查看secooler用户
sys@secooler> conn secooler/secooler
Connected.
secooler@secooler> select * from cat;

no rows selected

此时secooler用户中不包含MT表信息?/span>

3Q用IMPDP工具实现数据从sec用户向secooler用户复制的功?/span>
secooler@secDB /home/oracle$ impdp system/sys network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler

Import: Release 11.2.0.1.0 - Production on Thu Apr 8 10:01:16 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 9 MB
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"SECOOLER" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "SECOOLER"."T"                               71325 rows
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 10:02:45

3.查看secooler用户数据Q验收迁UL?/span>
secooler@secDB /home/oracle$ sqlplus secooler/secooler

SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 8 10:04:55 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

secooler@secooler> select * from cat;

TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
T                              TABLE

secooler@secooler> select count(*) from t;

  COUNT(*)
----------
     71325

令hȀ动地时刻CQsec用户下的T表及其数据已l成功的“复制”Csecooler用户中?/span>

4.结
使用IMPDP工具完成用户数据复制的优点:
1Q节省了大量的磁盘空_因ؓ不用生成中间的dump文gQ?/span>
2Q操作简便,步骤_Q?/span>
3Q因为操作环节的减少Q整个操作过E不易出错?/span>

Good luck.

secooler
10.04.07

-- The End --



Dragon4s 2012-08-23 15:50 发表评论
]]>[Z]java.util.prefs.Preferences用法 http://www.aygfsteel.com/Dragon4s/articles/386028.htmlDragon4sDragon4sWed, 22 Aug 2012 06:28:00 GMThttp://www.aygfsteel.com/Dragon4s/articles/386028.htmlhttp://www.aygfsteel.com/Dragon4s/comments/386028.htmlhttp://www.aygfsteel.com/Dragon4s/articles/386028.html#Feedback1http://www.aygfsteel.com/Dragon4s/comments/commentRss/386028.htmlhttp://www.aygfsteel.com/Dragon4s/services/trackbacks/386028.html

我们l常需要将我们的程序中的设定,如窗口位|,开启过的文Ӟ用户的选项讑֮{数据记录下来,以做便用户下一ơ开启程序能l箋使用q些数据?br /> 以前我们通常的做法是使用Propertiesc,它提供以下方?
void load(InputStream inStream)
void store(OutputStream out, String header)
String getProperty(String key, String defaultValue)
String getProperty(String key)
q些Ҏ让我们很Ҏ的存取设定数?
另外的办法是使用ResourceBundleq个cL储存讑֮数据Q甚x些程序作者用一个自定结构的文g来储存设定数据?br /> 但不怎样Q最让程序作者头痛的是:我该这些数据保存在哪?

现在好了QJDK1.4为我们提供的java.util.prefs包,里面有一个Preferencesc,能让以上的工作变得极其轻?
写VBE序的h常常用SaveSetting函数和getSettging来存取注册表中的用户讑֮数据。而Java的PreferencescM提供了类似的机制?br /> Preferencescd不同的^C有不同的实现方式。而在Windowsq_中,Preferences是将数据保存在注册表中的Q而在其它q_中的实现我就不得而知?我对Linux{系l都不太了解).
但不怎样Q都是通过相同的接口来使用的,E序作者可以不实现细节?/p>

建立Preferences对象
Z区分不同的应用程序的参数,在徏立Preferences时要指定一个节点\径?br /> Preferences是一个抽象类Q提供了一pd静态方法和抽象Ҏ来操作参数项:
抽象Ҏ:
Preferences userData = Preferences.userNodeForPackage(this);
Preferences sysData = Preferences.systemNodeForPackage(this);
q两个方法是从指定的物g所在的?package)q回一个节点\径,如this是javax.swing.JComponent,则返?javax/swing
静态方?
Preferences userData = Preferences.userRoot().node("/com/sunway/spc");
Preferences sysData = Preferences.systemRoot().node("/com/sunway/spc");

以上每种方式提供了两套操作方法。其中一套是用户参数,另一套是pȝ参数V?br /> 在Windowsq_中,用户参数在注册表中的根节点?br />HKEY_CURRENT_USER/Software/JavaSoft/Prefs
pȝ参数在注册表中的根节点?/strong>
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs

而我们指定的节点路径是位于这些根节点之下?

如何d数据
Preferences提供了多U类型数据的dҎ?br /> 先来看写(put)的方?
put(String key, String value)
putBoolean(String key, boolean value)
putByteArray(String key, byte value[])
putDouble(String key, double value)
putFloat(String key, float value)
putInt(String key, int value)
putLong(String key, long value)
下面的是?get)的方?
get(String key, String default)
getBoolean(String key, boolean default)
getByteArray(String key, byte default[])
getDouble(String key, double default)
getFloat(String key, float default)
getInt(String key, int default)
getLong(String key, long default)
注意Q每一UgetҎ的第二个参数需要我们ؓ它指定缺省的参数?br /> 除了以上方式之外QPreferencesq允许我们将它的数据导出C个XML文g保存Q?br /> void exportNode(OutputStream os)
void exportSubtree(OutputStream os)
我们可以导出一个节点,或是导出整个子节Ҏ.

Preferences的一个演C?/em>
以上的讲解可以写一个示例来看看Preferences是如何ؓ我们工作?看看下面的例?
import java.io.*;
import java.util.prefs.*;

public class PrefsDemo {
public static void main(String args[])
{
    String keys[] =
      {"sunway","copyright","author"};
    String values[] =
      {"sunway technology company","copyright
2002","turbochen@163.com"} ;

    /* 建立一个位于user root下的/com/sunway/spc节点参数?/
    Preferences prefsdemo =
      Preferences.userRoot().node("/com/sunway/spc");

    /* 储存参数?/
    for (int i=0 ; i < keys.length; i++)
    {
      prefsdemo.put(keys[i], values[i]);
    }

    /* 导出到XML文g */
    try
    {
      FileOutputStream fos = new FileOutputStream("prefsdemo.xml");
      prefsdemo.exportNode(fos);
    } catch (Exception e)
    {
      System.err.println("Cannot export nodes: " + e);
    }

    /* L注释可以清除注册表中的参数项*/
/*    try
      {
        prefsdemo.removeNode();
      } catch (BackingStoreException e)
      {
      } */

}
}

以上介绍了Preferences功能Q要了解更多Preferences的方法,?a style="font-size: 12px; color: blue; text-decoration: underline;" >查阅JDK文java.util.prefs.Preferences

转自Qhttp://hi.baidu.com/wiselyman/blog/item/09c76c2798db5d0a918f9d8e.html



Dragon4s 2012-08-22 14:28 发表评论
]]>[转]java.util.Preferences 数据理http://www.aygfsteel.com/Dragon4s/articles/386025.htmlDragon4sDragon4sWed, 22 Aug 2012 05:48:00 GMThttp://www.aygfsteel.com/Dragon4s/articles/386025.htmlhttp://www.aygfsteel.com/Dragon4s/comments/386025.htmlhttp://www.aygfsteel.com/Dragon4s/articles/386025.html#Feedback0http://www.aygfsteel.com/Dragon4s/comments/commentRss/386025.htmlhttp://www.aygfsteel.com/Dragon4s/services/trackbacks/386025.htmljava.util.Preferences q是一个抽象类,具体有什么用?
主要用于保存用户或系l相关的数据(  比如: 我们希望某个用户讄自己的主?下次再登录进pȝ?仍然是这个主?..  ),具体的作用功能什么的我不做多的介l?..
    ׃q个cd于抽象类,所以不能直接通过new来创?不过它提供了几个static method ,其实底层q是通过调用子类的实现来操作?.
    Preferences的数据是可以跨^台的,在Windows?讄的这些属性会d?注册??Linux ?Unix 我没有研I过...
     
 
    不多?直接贴出源代?代码中有详细的注?:
package com.lixing.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

/**
* Preferences有两U保存文件的方式:
*    1. sysRoot 与系l有关的用户配置文g,此文件只要是pȝ用户都可以访?
*    2. userRoot 与用h关的用户配置文g,只有该用h可以讉K
*    但两者的操作Ҏ完全一?
*    
* @author Administrator
*
*/
public class PreferencesTest {
  private String[] keys = { "userName", "userPwd", "userEmail" };
  private String[] values = { "Lixing", "123456", "hnlixing520@126.com" };

  /**
    * 讄Preferences的?
    * @param userRoot
    */
  private    void setPreference(Preferences userRoot) {
    for (int i = 0; i < keys.length; i++) {
      userRoot.put(keys[i], values[i]);
    }

  }
    
  /**
    * 获得Preferences的指定?
    * @param userRoot
    */
  private void getPreference(Preferences userRoot){
    System.out.println( "userName: " + userRoot.get("userName", "佚名") );
    System.out.println( "userPwd: " + userRoot.get("userPwd", "0000") );
    System.out.println( "userEmail: " + userRoot.get("userEmail", "xxx@126.com") );
  }
    
  /**
    * U除Preferences的首层包
    * @param userRoot
    */
  private void removeNode(Preferences userRoot){
    try {
      userRoot.removeNode();
    } catch (BackingStoreException e) {
      e.printStackTrace();
    }
    System.out.println( "removeNode success" );
  }

  /**
    * 以树型结构导ZؓXML
    * @param userRoot
    */
  private void exportSubTree(Preferences userRoot) {
    OutputStream os = null;
    File file =new File("preferences.xml");
    try {
      os = new FileOutputStream( file );
      userRoot.exportSubtree(os);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (BackingStoreException e) {
      e.printStackTrace();
    } finally {
      try {
        os.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    System.out.println( "export tree success filename " + file.getName() );
  }
    
    

  public static void main(String[] args) {
    PreferencesTest test = new PreferencesTest();
    
    //以包的方式徏立用户配|?目的是防止冲突,便于理
    Preferences userRoot = Preferences.userNodeForPackage(PreferencesTest.class);
    test.setPreference(userRoot);
    test.exportSubTree(userRoot);
    test.getPreference(userRoot);
    test.removeNode(userRoot);
  }
}
 

本文 “李新博客” 博客Q请务必保留此出?a >http://kinglixing.blog.51cto.com/3421535/968777



Dragon4s 2012-08-22 13:48 发表评论
]]> վ֩ģ壺 ӳ| ½| | ԭ| | ʡ| ȷɽ| | Ϳ| | ˼| տ| ƽ| IJ| | | Դ| ٲ| ϰ| ֦| | ɽ| ̨| | | ƽ| | | | | Ϫ| | | ƽ| | | ɽ| | | ԰| |