国产精品视频一区视频二区,日本韩国精品一区二区在线观看,亚洲综合色自拍一区http://www.aygfsteel.com/redcoatjk/萬物皆對(duì)象 萬事歸節(jié)奏zh-cnMon, 16 Jun 2025 07:47:41 GMTMon, 16 Jun 2025 07:47:41 GMT60Oracle維護(hù)常用SQLhttp://www.aygfsteel.com/redcoatjk/archive/2014/03/03/410543.htmlredcoatjkredcoatjkMon, 03 Mar 2014 07:48:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2014/03/03/410543.htmlhttp://www.aygfsteel.com/redcoatjk/comments/410543.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2014/03/03/410543.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/410543.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/410543.html--查詢表空間、表空間大小及表空間對(duì)應(yīng)物理路徑

select a.tablespace_name,b.file_name,a.block_size,a.block_size,b.bytes/1024

/1024 "Sum MB" from dba_tablespaces a,dba_data_files b where a.tablespace_name=b.tablespace_name;

--查詢表空間使用情況

  SELECT UPPER(F.TABLESPACE_NAME) "表空間名",

  D.TOT_GROOTTE_MB "表空間大小(M)",

  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",

  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",

  F.TOTAL_BYTES "空閑空間(M)",

  F.MAX_BYTES "最大塊(M)"

  FROM (SELECT TABLESPACE_NAME,

  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

  FROM SYS.DBA_FREE_SPACE

  GROUP BY TABLESPACE_NAME) F,

  (SELECT DD.TABLESPACE_NAME,

   ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

  FROM SYS.DBA_DATA_FILES DD

  GROUP BY DD.TABLESPACE_NAME) D

  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

  ORDER BY 1;

--查詢表空間的free space

  select tablespace_name,

  count(*) as extends,

  round(sum(bytes) / 1024 / 1024, 2) as MB,

  sum(blocks) as blocks

  from dba_free_space

group by tablespace_name;

 

--查詢表空間的總?cè)萘?/h3>

  select tablespace_name, sum(bytes) / 1024 / 1024 as MB

  from dba_data_files

  group by tablespace_name;

 

 

--查詢表空間使用率

  select total.tablespace_name,

  round(total.MB, 2) as Total_MB,考試大論壇

  round(total.MB - free.MB, 2) as Used_MB,

  round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct

  from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

  from dba_free_space

  group by tablespace_name) free,

  (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

  from dba_data_files

  group by tablespace_name) total

  where free.tablespace_name = total.tablespace_name;

 

 

1.查找當(dāng)前表級(jí)鎖的SQL如下:

select sess.sid,

    sess.serial#,

    lo.oracle_username,

    lo.os_user_name,

    ao.object_name,

    lo.locked_mode

    from v$locked_object lo,

    dba_objects ao,

    v$session sess

where ao.object_id = lo.object_id and lo.session_id = sess.sid;

 

2.殺掉鎖表進(jìn)程:

alter system kill session '436,35123';

 

3.RAC環(huán)境中鎖查找:

SELECT inst_id,DECODE(request,0,'Holder: ','Waiter: ')||sid sess,

        id1, id2, lmode, request, type,block,ctime

FROM GV$LOCK

WHERE (id1, id2, type) IN

       (SELECT id1, id2, type FROM GV$LOCK WHERE request>0)

ORDER BY id1, request;

  

 

 

4.監(jiān)控當(dāng)前數(shù)據(jù)庫(kù)誰在運(yùn)行什么SQL語句

select osuser, username, sql_text 

from  v$session a, v$sqltext b

where  a.sql_address =b.address order by address, piece;

 

 

 

5.找使用CPU多的用戶session

select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value

from  v$session a,v$process b,v$sesstat c

where  c.statistic#=12 and 

       c.sid=a.sid and 

       a.paddr=b.addr 

       order by value desc;

 

 

6.查看死鎖信息

SELECT (SELECT username

          FROM v$session

         WHERE SID = a.SID) blocker, a.SID, 'is blocking',

       (SELECT username

          FROM v$session

         WHERE SID = b.SID) blockee, b.SID

  FROM v$lock a, v$lock b

 WHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;

 

 

7.具有最高等待的對(duì)象

SELECT   o.OWNER,o.object_name, o.object_type, a.event,

         SUM (a.wait_time + a.time_waited) total_wait_time

    FROM v$active_session_history a, dba_objects o

   WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

     AND a.current_obj# = o.object_id

GROUP BY o.OWNER,o.object_name, o.object_type, a.event

ORDER BY total_wait_time DESC;

 

 

SELECT   a.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name,

         o.object_type, a.event,

         SUM (a.wait_time + a.time_waited) total_wait_time

    FROM v$active_session_history a, dba_objects o, v$session s

   WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

     AND a.current_obj# = o.object_id

     AND a.session_id = s.SID

GROUP BY o.owner,

         o.object_name,

         o.object_type,

         a.event,

         a.session_id,

         s.program,

         s.machine,

         s.osuser

ORDER BY total_wait_time DESC;

 

 

 

8.查詢當(dāng)前連接會(huì)話數(shù)

select s.value,s.sid,a.username

from

v$sesstat S,v$statname N,v$session A

where

n.statistic#=s.statistic# and

name='session pga memory'

and s.sid=a.sid

order by s.value;

 

 

 

9.等待最多的用戶

SELECT   s.SID, s.username, SUM (a.wait_time + a.time_waited) total_wait_time

    FROM v$active_session_history a, v$session s

   WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

GROUP BY s.SID, s.username

ORDER BY total_wait_time DESC;

 

 

 

10.等待最多的SQL

SELECT   a.program, a.session_id, a.user_id, d.username, s.sql_text,

         SUM (a.wait_time + a.time_waited) total_wait_time

    FROM v$active_session_history a, v$sqlarea s, dba_users d

   WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

     AND a.sql_id = s.sql_id

     AND a.user_id = d.user_id

GROUP BY a.program, a.session_id, a.user_id, s.sql_text, d.username;

 

 

 

11.查看消耗資源最多的SQL

SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls

FROM V$SQLAREA

WHERE buffer_gets > 10000000 OR disk_reads > 1000000

ORDER BY buffer_gets + 100 * disk_reads DESC;

 

 

 

12.查看某條SQL語句的資源消耗

SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls

FROM V$SQLAREA

WHERE hash_Value = 228801498 AND address = hextoraw('CBD8E4B0');

 

 

13.查詢會(huì)話執(zhí)行的實(shí)際SQL

SELECT   a.SID, a.username, s.sql_text

    FROM v$session a, v$sqltext s

   WHERE a.sql_address = s.address

     AND a.sql_hash_value = s.hash_value

     AND a.status = 'ACTIVE'

ORDER BY a.username, a.SID, s.piece;

 

 

14.顯示正在等待鎖的所有會(huì)話

SELECT * FROM DBA_WAITERS;

 

DDL

--------------------------------------------------------------

/*注意點(diǎn):

 

1.如果在PL/SQL 等工具里打開的話,直接修改下面的代碼中[斜體加粗部分]執(zhí)行

 

2.確保路徑存在,比如【D:\oracle\oradata\Oracle9i\】也就是你要保存文件的路徑存在

 

/*分為四步 */

 

/*第1步:創(chuàng)建臨時(shí)表空間  */

 

create temporary tablespace user_temp 

 

tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'

 

size 50m 

 

autoextend on 

 

next 50m maxsize 20480m 

 

extent management local; 

 

 

 

/*第2步:創(chuàng)建數(shù)據(jù)表空間  */

 

create tablespace user_data 

 

logging 

 

datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'

 

size 50m 

 

autoextend on 

 

next 50m maxsize 20480m 

 

extent management local; 

 

 

 

/*第3步:創(chuàng)建用戶并指定表空間  */

 

create user username identified by password 

 

default tablespace user_data 

 

temporary tablespace user_temp; 

 

 

 

/*第4步:給用戶授予權(quán)限  */

 

grant connect,resource,dba to username; 



redcoatjk 2014-03-03 15:48 發(fā)表評(píng)論
]]>
瀏覽器事件監(jiān)聽http://www.aygfsteel.com/redcoatjk/archive/2013/11/04/405972.htmlredcoatjkredcoatjkMon, 04 Nov 2013 06:22:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2013/11/04/405972.htmlhttp://www.aygfsteel.com/redcoatjk/comments/405972.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2013/11/04/405972.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/405972.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/405972.htmlhttp://www.douban.com/note/235086917/
http://jackleechina.iteye.com/blog/1595397

為什么一般要采用事件監(jiān)聽而不是直接對(duì)元素的事件屬性(如:onclick、onmouseover)賦值?

原來用事件屬性只能賦值一種方法,即:

button1.onclick = function() { alert(1); };
button1.onclick = function() { alert(2); };

這樣后面的賦值語句就將前面的onclick屬性覆蓋了

而使用添加事件監(jiān)聽的方式就可以實(shí)現(xiàn)并行。特別是當(dāng)團(tuán)隊(duì)合作時(shí),事件并行的需求增多,比如:監(jiān)聽document對(duì)象的鼠標(biāo)事件或者window對(duì)象的載入事件等。使用事件屬性則很容易造成事件覆蓋掉

使用事件監(jiān)聽有兩種方式:attachEvent和addEventListener

attachEvent與addEventListener區(qū)別
適應(yīng)的瀏覽器版本不同,同時(shí)在使用的過程中要注意
attachEvent方法 按鈕onclick
addEventListener方法 按鈕click
attachEvent方法, (ie系列)
addEventListener方法 Mozilla系列

例子如下:
 1<!DOCTYPE html>
 2<html>
 3
 4<SCRIPT LANGUAGE="JavaScript">
 5function method1(){
 6    alert("method1");
 7}

 8function method2(){
 9    alert("method2");
10}

11function method3(){
12    alert("method3");
13}

14
</SCRIPT>
15<body>
16<input type="button"  value="dom 元素事件屬性綁定的按鈕" id="button1"/>
17<input type="button"  value="IE瀏覽器: attachEvent進(jìn)行事件綁定的按鈕" id="btn1"/>
18<input type="button"  value="火狐瀏覽器: addEventListener進(jìn)行事件綁定的按鈕" id="btn2"/>
19
20<SCRIPT LANGUAGE="JavaScript">
21     /**方法一: 使用元素的事件屬性. [這種方式事件只可綁定一次,最后綁定的執(zhí)行]**/
22     button1.onclick = function() { alert("1-1"); };
23     button1.onclick = function() { alert("1-2"); };
24     /**方法二: 使用attachEvent注冊(cè)事件. 格式如下object.attachEvent(event,function);**/
25   var btn1Obj = document.getElementById("btn1");
26    btn1Obj.attachEvent("onclick", method1);
27   btn1Obj.attachEvent("onclick", method2);
28    btn1Obj.attachEvent("onclick", method3);
29     /**方法三: addEventListener. 格式如下element.addEventListener(type,listener,useCapture);**/
30    var btn2Obj = document.getElementById("btn2");
31    btn2Obj.addEventListener("click",method1,false);
32    btn2Obj.addEventListener("click",method2,false);
33    btn2Obj.addEventListener("click",method3,false);
34    //執(zhí)行順序?yàn)閙ethod1->method2->method3
35
</SCRIPT>
36<br/>attachEvent按照注冊(cè)倒敘執(zhí)行:    執(zhí)行順序?yàn)閙ethod3->method2->method1 
37<br/>addEventListener按照注冊(cè)順序執(zhí)行:    執(zhí)行順序?yàn)閙ethod1->method2->method3 
38</body>
39</html>

相關(guān)衍生閱讀:

JavaScript欲速則不達(dá)——基本處理事件詳解和阻止事件傳播



redcoatjk 2013-11-04 14:22 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]Servlet過濾器介紹之原理分析http://www.aygfsteel.com/redcoatjk/archive/2013/04/16/397932.htmlredcoatjkredcoatjkTue, 16 Apr 2013 09:28:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2013/04/16/397932.htmlhttp://www.aygfsteel.com/redcoatjk/comments/397932.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2013/04/16/397932.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/397932.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/397932.html閱讀全文

redcoatjk 2013-04-16 17:28 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]MySQL運(yùn)行狀態(tài)show status中文詳解http://www.aygfsteel.com/redcoatjk/archive/2012/09/05/387100.htmlredcoatjkredcoatjkWed, 05 Sep 2012 07:33:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/09/05/387100.htmlhttp://www.aygfsteel.com/redcoatjk/comments/387100.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/09/05/387100.html#Feedback1http://www.aygfsteel.com/redcoatjk/comments/commentRss/387100.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/387100.html閱讀全文

redcoatjk 2012-09-05 15:33 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]Statement和PreparedStatement批量更新http://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383599.htmlredcoatjkredcoatjkFri, 20 Jul 2012 07:04:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383599.htmlhttp://www.aygfsteel.com/redcoatjk/comments/383599.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383599.html#Feedback1http://www.aygfsteel.com/redcoatjk/comments/commentRss/383599.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/383599.html閱讀全文

redcoatjk 2012-07-20 15:04 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]JDBC中Statement與PreparedStatement的區(qū)別http://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383583.htmlredcoatjkredcoatjkFri, 20 Jul 2012 03:14:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383583.htmlhttp://www.aygfsteel.com/redcoatjk/comments/383583.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/07/20/383583.html#Feedback2http://www.aygfsteel.com/redcoatjk/comments/commentRss/383583.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/383583.html摘自 http://neoremind.net/2010/12/preparedstatement_diff/

JDBC中Statement與PreparedStatement的區(qū)別

1. statement每次執(zhí)行sql語句,相關(guān)數(shù)據(jù)庫(kù)都要執(zhí)行sql語句的編譯;preparedstatement是預(yù)編譯的, 采用Cache機(jī)制(預(yù)編譯語句,放在Cache中,下次執(zhí)行相同SQL語句時(shí),則可以直接從Cache中取出來,有利于sql生成查詢計(jì)劃。),對(duì)于批量處理可以大大提高效率. 也叫JDBC存儲(chǔ)過程。

例如,如果要執(zhí)行兩條sql語句

SELECT colume FROM TABLE WHERE colume=1;
SELECT colume FROM TABLE WHERE colume=2;

會(huì)生成兩個(gè)執(zhí)行計(jì)劃

一千個(gè)查詢就生成一千個(gè)執(zhí)行計(jì)劃!

PreparedStatement用于使用綁定變量重用執(zhí)行計(jì)劃

SELECT colume FROM TABLE WHERE colume=:x;

通過set不同數(shù)據(jù)只需要生成一次執(zhí)行計(jì)劃,可以重用

是否使用綁定變量對(duì)系統(tǒng)影響非常大,生成執(zhí)行計(jì)劃極為消耗資源

兩種實(shí)現(xiàn) 速度差距可能成百上千倍

后者使用了PreparedStatement對(duì)象,而前者是普通的Statement對(duì)象。PreparedStatement對(duì)象不僅包含了SQL語句,而且大多數(shù)情況下這個(gè)語句已經(jīng)被預(yù)編譯過,因而當(dāng)其執(zhí)行時(shí),只需DBMS運(yùn)行SQL語句,而不必先編譯。當(dāng)你需要執(zhí)行Statement對(duì)象多次的時(shí)候,PreparedStatement對(duì)象將會(huì)大大降低運(yùn)行時(shí)間,當(dāng)然也加快了訪問數(shù)據(jù)庫(kù)的速度

這種轉(zhuǎn)換也給你帶來很大的便利,不必重復(fù)SQL語句的句法,而只需更改其中變量的值,便可重新執(zhí)行SQL語句。選擇PreparedStatement對(duì)象與否,在于相同句法的SQL語句是否執(zhí)行了多次,而且兩次之間的差別僅僅是變量的不同。如果僅僅執(zhí)行了一次的話,在對(duì)數(shù)據(jù)庫(kù)只執(zhí)行一次性存取的時(shí)侯,用 Statement 對(duì)象進(jìn)行處理,PreparedStatement 對(duì)象的開銷比Statement大,對(duì)于一次性操作并不會(huì)帶來額外的好處。

2. PrepareStatement中執(zhí)行的SQL語句中是可以帶參數(shù)的,也就是說可以替換變量,盡量采用使用?號(hào)的方式傳遞參數(shù),增加代碼的可讀性又可以預(yù)編譯加速;而Statement則不可以。

3. 防止SQL注入。在SQL中包含特殊字符或SQL的關(guān)鍵字(如:’ or 1 or ‘)時(shí),Statement將出現(xiàn)不可預(yù)料的結(jié)果(出現(xiàn)異常或查詢的結(jié)果不正確),可用PreparedStatement來解決。

SQL注入或者說SQL注入攻擊就是利用Statement的漏洞完成的,例如用個(gè)用戶登錄,那么form表單有用戶名和密碼
那么我提交時(shí),在用戶名輸入框內(nèi) 輸入 “aaa’ or ’a’=’a” 密碼框隨便輸入,那么這樣意味著 sql的
查詢語言就是 “select * from 表 where 用戶名=’aaa’ or ’a’=’a’ and 密碼=’123’  ”,這樣查詢出來所有的數(shù)據(jù)或者是混亂。那么不被授權(quán)的用戶照樣可以登錄,豈不是被黑了?!實(shí)際中現(xiàn)在java程序員早都不用這種方式寫查詢了,一般都用PreparedStatement來查詢,或干脆就用hibernate之類的持久層框架,這樣通過sql注入就無從談起了。


redcoatjk 2012-07-20 11:14 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]如何修改mysql root密碼 http://www.aygfsteel.com/redcoatjk/archive/2012/07/19/383487.htmlredcoatjkredcoatjkThu, 19 Jul 2012 02:54:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/07/19/383487.htmlhttp://www.aygfsteel.com/redcoatjk/comments/383487.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/07/19/383487.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/383487.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/383487.html摘自:http://ryxxlong.iteye.com/blog/552884

如何修改mysql root密碼
  忘記MySQL ROOT密碼是在MySQ使用中很常見的問題,可是有很多朋友并不會(huì)重置ROOT密碼,那叫苦啊,特寫此文章與大家交流:

1、編輯MySQL的配置文件:my.ini
一般在MySQL安裝目錄下有my.ini即MySQL的配置文件。
在此配置文件的最后添加如下一行:
skip-grant-tables
保存退出編輯。

2、然后重啟MySQL服務(wù)
在命令行下執(zhí)行:
net stop MySQL
net start MySQL

3、設(shè)置新的ROOT密碼
然后用命令提示符cd到對(duì)應(yīng)安裝目錄的bin下執(zhí)行:
MySQL -u root -p MySQL或mysql -u root -p
直接回車無需密碼即可進(jìn)入數(shù)據(jù)庫(kù)了。
此時(shí),在命令行下執(zhí)行 use mysql;
現(xiàn)在我們執(zhí)行如下語句把root密碼更新為:
update user set password=PASSWORD("root") where user='root';
(注意:此時(shí)不用使用mysqladmin -u root -p password '你的新密碼'這條命令修改密碼,因?yàn)?skip-grant-tables'配置,
不信的話,你可以試用一下,它肯定會(huì)報(bào)如下所示的錯(cuò)誤:
F:\Documents and Settings\long>mysqladmin -u root -p password 'root'
Enter password:
Warning: single quotes were not trimmed from the password by your command
line client, as you might have expected.
mysqladmin:
You cannot use 'password' command as mysqld runs
 with grant tables disabled (was started with --skip-grant-tables).
Use: "mysqladmin flush-privileges password '*'" instead)
exit 退出MySQL。

4、還原配置文件并重啟服務(wù)

然后修改MySQL配置文件把剛才添加的那一行'skip-grant-tables'刪除。
再次重起MySQL服務(wù),密碼修改完畢。
用新密碼root試一下吧,又能登入重新進(jìn)入mysql了?



附mysql修改密碼的一些方法:
1. 用MYSQL的grant語句,例如
mysql -h hostname –u root 命令登錄到mysqld server 用grant 命令改變口令:
mysql -h 192.168.1.101 -u root
上邊的192.168.1.101 是偶的mysqld 運(yùn)行機(jī)器,你換成自己的,這樣登錄上去,就可以修改密碼了,
其實(shí)沒必要這么麻煩,直接mysql -u root就可以了。
GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION

2. mysqladmin -u 用戶名 -p 舊密碼 password 新密碼
例1:給root 加個(gè)密碼root。首先進(jìn)入cmd中,然后鍵入
以下命令,至于在CMD下能否使用mysqladmin,
就要看你的Windows環(huán)境變量PATH中是否添加“E:\Program Files\MySQL\MySQL Server 5.1\bin;”(請(qǐng)改為你自己的安裝路徑)了。)
mysqladmin -u root password root
注:因?yàn)殚_始時(shí)root 沒有密碼,所以-p 舊密碼一項(xiàng)就可以省略了。
例2:再將root 的密碼改為admin。
mysqladmin –u root -proot password admin(注意-p 不要和后面的密碼分
開寫,要寫在一起,不然會(huì)出錯(cuò),錯(cuò)誤如下所示:
F:\Documents and Settings\long>mysqladmin -u root -p root password admin
Enter password: ****
mysqladmin: Unknown command: 'root')
當(dāng)然你也可以這樣寫:mysqladmin –u root -p password admin回車,
然后再輸入你的舊密碼,這樣也是完全也可以的,看你的愛好了.
例3:再將root用戶的密碼去掉.
F:\Documents and Settings\long>mysqladmin -u root -p password  ;
Enter password: root
此時(shí),root用戶又沒有密碼了.可以通過下面的方法設(shè)置:
F:\Documents and Settings\long>mysql -u root
mysql>set password for 'root'@'localhost'=password('root');(語法:SET PASSWORD FOR '用戶名'@'主機(jī)' = PASSWORD('密碼'))
mysql>set password for 'root'@'%'=password('root');
//本條可選,這是在配置mysql數(shù)據(jù)庫(kù),如果你選擇了允許root通過遠(yuǎn)程登錄進(jìn)來時(shí),你在mysql數(shù)據(jù)庫(kù)下的user表中,
use mysql;
select * from user;可以看到有兩條記錄,如果你沒有配置這一項(xiàng)的話,只會(huì)第一條記錄!
Host                    User     Password
'localhost', 'root', '*9C9F4927129ECC3209D8550DC8B67156FDBF9418', ...
'%', 'root', '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B', ...
通過以上設(shè)置,root的密碼將變?yōu)閞oot這樣就完成了根用戶root密碼的設(shè)置工作。

3. use mysql;
 update user set password =password('yourpass') where user='root'

(注:下面的這些方法我本人沒有試過,不知對(duì)不對(duì),我只是轉(zhuǎn)載了一下:)
下面的方法都在mysql提示符下使用,且必須有mysql的root權(quán)限:
方法4
mysql> INSERT INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
確切地說這是在增加一個(gè)用戶,用戶名為jeffrey,密碼為biscuit。
在《mysql中文參考手冊(cè)》里有這個(gè)例子,所以我也就寫出來了。
注意要使用PASSWORD函數(shù),然后還要使用FLUSH PRIVILEGES。

方法5
和方法三一樣,只是使用了REPLACE語句
mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES

方法6
使用SET PASSWORD語句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
你也必須使用PASSWORD()函數(shù),
但是不需要使用FLUSH PRIVILEGES。


方法7
使用GRANT ... IDENTIFIED BY語句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
這里PASSWORD()函數(shù)是不必要的,也不需要使用FLUSH PRIVILEGES。

注:mysql 新設(shè)置用戶或更改密碼后需用flush privileges刷新MySQL的系統(tǒng)權(quán)限相關(guān)表,
否則會(huì)出現(xiàn)拒絕訪問,還有一種方法,就是重新啟動(dòng)mysql服務(wù)器,來使新設(shè)置生效。



redcoatjk 2012-07-19 10:54 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]怎么查看端口占用情況? http://www.aygfsteel.com/redcoatjk/archive/2012/06/13/380682.htmlredcoatjkredcoatjkWed, 13 Jun 2012 05:51:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/06/13/380682.htmlhttp://www.aygfsteel.com/redcoatjk/comments/380682.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/06/13/380682.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/380682.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/380682.html怎么查看端口占用情況?

       開始--運(yùn)行--cmd 進(jìn)入命令提示符 輸入netstat -ano 即可看到所有連接的PID 之后在任務(wù)管理器中找到這個(gè)PID所對(duì)應(yīng)的程序如果任務(wù)管理器中沒有PID這一項(xiàng),可以在任務(wù)管理器中選"查看"-"選擇列"

        經(jīng)常,我們?cè)趩?dòng)應(yīng)用的時(shí)候發(fā)現(xiàn)系統(tǒng)需要的端口被別的程序占用,如何知道誰占有了我們需要的端口,很多人都比較頭疼,下面就介紹一種非常簡(jiǎn)單的方法,希望對(duì)大家有用

假如我們需要確定誰占用了我們的9050端口

1、Windows平臺(tái)
在windows命令行窗口下執(zhí)行:

C:\>netstat -aon|findstr "9050"

TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016


看到了嗎,端口被進(jìn)程號(hào)為2016的進(jìn)程占用,繼續(xù)執(zhí)行下面命令:

C:\>tasklist|findstr "2016"

tor.exe 2016 Console 0 16,064 K

很清楚吧,tor占用了你的端口。



redcoatjk 2012-06-13 13:51 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]JSON 入門指南http://www.aygfsteel.com/redcoatjk/archive/2012/02/27/370825.htmlredcoatjkredcoatjkMon, 27 Feb 2012 03:00:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/02/27/370825.htmlhttp://www.aygfsteel.com/redcoatjk/comments/370825.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/02/27/370825.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/370825.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/370825.html管有許多宣傳關(guān)于 XML 如何擁有跨平臺(tái),跨語言的優(yōu)勢(shì),然而,除非應(yīng)用于 Web Services,否則,在普通的 Web 應(yīng)用中,開發(fā)者經(jīng)常為 XML 的解析傷透了腦筋,無論是服務(wù)器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導(dǎo)致復(fù)雜的代碼,極低的開發(fā)效率。實(shí)際上,對(duì)于大多數(shù) Web 應(yīng)用來說,他們根本不需要復(fù)雜的 XML 來傳輸數(shù)據(jù),XML 的擴(kuò)展性很少具有優(yōu)勢(shì),許多 AJAX 應(yīng)用甚至直接返回 HTML 片段來構(gòu)建動(dòng)態(tài) Web 頁面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統(tǒng)的復(fù)雜性,但同時(shí)缺少了一定的靈活性。

現(xiàn)在, JSON 為 Web 應(yīng)用開發(fā)者提供了另一種數(shù)據(jù)交換格式。讓我們來看看 JSON 到底是什么,同 XML 或 HTML 片段相比,JSON 提供了更好的簡(jiǎn)單性和靈活性。

JSON 數(shù)據(jù)格式解析

和 XML 一樣,JSON 也是基于純文本的數(shù)據(jù)格式。由于 JSON 天生是為 JavaScript 準(zhǔn)備的,因此,JSON 的數(shù)據(jù)格式非常簡(jiǎn)單,您可以用 JSON 傳輸一個(gè)簡(jiǎn)單的 String,Number,Boolean,也可以傳輸一個(gè)數(shù)組,或者一個(gè)復(fù)雜的 Object 對(duì)象。

String,Number 和 Boolean 用 JSON 表示非常簡(jiǎn)單。例如,用 JSON 表示一個(gè)簡(jiǎn)單的 String “ abc ”,其格式為:

"abc"

這與絕大多數(shù)編程語言的表示方法一致,例如:

12345(整數(shù))
-3.9e10(浮點(diǎn)數(shù))

Boolean 類型表示為 truefalse 。此外,JavaScript 中的 null 被表示為 null,注意,truefalsenull 都沒有雙引號(hào),否則將被視為一個(gè) String 。

JSON 還可以表示一個(gè)數(shù)組對(duì)象,使用 [] 包含所有元素,每個(gè)元素用逗號(hào)分隔,元素可以是任意的 Value,例如,以下數(shù)組包含了一個(gè) String,Number,Boolean 和一個(gè) null:

["abc",12345,false,null]

Object 對(duì)象在 JSON 中是用 {} 包含一系列無序的 Key-Value 鍵值對(duì)表示的,實(shí)際上此處的 Object 相當(dāng)于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。

例如,一個(gè) Address 對(duì)象包含如下 Key-Value:

city:Beijing 
street:Chaoyang Road
postcode:100025(整數(shù))

用 JSON 表示如下:

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

其中 Value 也可以是另一個(gè) Object 或者數(shù)組,因此,復(fù)雜的 Object 可以嵌套表示,例如,一個(gè) Person 對(duì)象包含 name 和 address 對(duì)象,可以表示如下:

{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}

JavaScript 處理 JSON 數(shù)據(jù)

上面介紹了如何用 JSON 表示數(shù)據(jù),接下來,我們還要解決如何在服務(wù)器端生成 JSON 格式的數(shù)據(jù)以便發(fā)送到客戶端,以及客戶端如何使用 JavaScript 處理 JSON 格式的數(shù)據(jù)。

我們先討論如何在 Web 頁面中用 JavaScript 處理 JSON 數(shù)據(jù)。我們通過一個(gè)簡(jiǎn)單的 JavaScript 方法就能看到客戶端如何將 JSON 數(shù)據(jù)表示給用戶:

function handleJson() { 
var j={"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
};
document.write(j.name);
document.write(j.address.city);
}

假定服務(wù)器返回的 JSON 數(shù)據(jù)是上文的:

{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}

只需將其賦值給一個(gè) JavaScript 變量,就可以立刻使用該變量并更新頁面中的信息了,相比 XML 需要從 DOM 中讀取各種節(jié)點(diǎn)而言,JSON 的使用非常容易。我們需要做的僅僅是發(fā)送一個(gè) Ajax 請(qǐng)求,然后將服務(wù)器返回的 JSON 數(shù)據(jù)賦值給一個(gè)變量即可。有許多 Ajax 框架早已包含了處理 JSON 數(shù)據(jù)的能力,例如 Prototype(一個(gè)流行的 JavaScript 庫(kù):http://prototypejs.org)提供了 evalJSON() 方法,能直接將服務(wù)器返回的 JSON 文本變成一個(gè) JavaScript 變量:

new Ajax.Request("http://url", { 
method: "get",
onSuccess: function(transport) {
var json = transport.responseText.evalJSON();
// TODO: document.write(json.xxx);
}
});

服務(wù)器端輸出 JSON 格式數(shù)據(jù)

下面我們討論如何在服務(wù)器端輸出 JSON 格式的數(shù)據(jù)。以 Java 為例,我們將演示將一個(gè) Java 對(duì)象編碼為 JSON 格式的文本。

將 String 對(duì)象編碼為 JSON 格式時(shí),只需處理好特殊字符即可。另外,必須用 (") 而非 (') 表示字符串:


static String string2Json(String s) {
StringBuilder sb = new StringBuilder(s.length()+20);
sb.append('\"');
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
case '\\':
sb.append("\\\\");
break;
case '/':
sb.append("\\/");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(c);
}
}
sb.append('\"');
return sb.toString();
}

將 Number 表示為 JSON 就容易得多,利用 Java 的多態(tài),我們可以處理 Integer,Long,F(xiàn)loat 等多種 Number 格式:


static String number2Json(Number number) {
return number.toString();
}

Boolean 類型也可以直接通過 toString() 方法得到 JSON 的表示:


static String boolean2Json(Boolean bool) {
return bool.toString();
}

要將數(shù)組編碼為 JSON 格式,可以通過循環(huán)將每一個(gè)元素編碼出來:


static String array2Json(Object[] array) {
if (array.length==0)
return "[]";
StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (Object o : array) {
sb.append(toJson(o));
sb.append(',');
}
// 將最后添加的 ',' 變?yōu)?']':
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}

最后,我們需要將 Map<String, Object> 編碼為 JSON 格式,因?yàn)?JavaScript 的 Object 實(shí)際上對(duì)應(yīng)的是 Java 的 Map<String, Object> 。該方法如下:


static String map2Json(Map<String, Object> map) {
if (map.isEmpty())
return "{}";
StringBuilder sb = new StringBuilder(map.size() << 4);
sb.append('{');
Set<String> keys = map.keySet();
for (String key : keys) {
Object value = map.get(key);
sb.append('\"');
sb.append(key);
sb.append('\"');
sb.append(':');
sb.append(toJson(value));
sb.append(',');
}
// 將最后的 ',' 變?yōu)?'}':
sb.setCharAt(sb.length()-1, '}');
return sb.toString();
}

為了統(tǒng)一處理任意的 Java 對(duì)象,我們編寫一個(gè)入口方法 toJson(Object),能夠?qū)⑷我獾?Java 對(duì)象編碼為 JSON 格式:


public static String toJson(Object o) {
if (o==null)
return "null";
if (o instanceof String)
return string2Json((String)o);
if (o instanceof Boolean)
return boolean2Json((Boolean)o);
if (o instanceof Number)
return number2Json((Number)o);
if (o instanceof Map)
return map2Json((Map<String, Object>)o);
if (o instanceof Object[])
return array2Json((Object[])o);
throw new RuntimeException("Unsupported type: " + o.getClass().getName());
}

我們并未對(duì) Java 對(duì)象作嚴(yán)格的檢查。不被支持的對(duì)象(例如 List)將直接拋出 RuntimeException 。此外,為了保證輸出的 JSON 是有效的,Map<String, Object> 對(duì)象的 Key 也不能包含特殊字符。細(xì)心的讀者可能還會(huì)發(fā)現(xiàn)循環(huán)引用的對(duì)象會(huì)引發(fā)無限遞歸,例如,精心構(gòu)造一個(gè)循環(huán)引用的 Map,就可以檢測(cè)到 StackOverflowException


@Test(expected=StackOverflowError.class)
public void testRecurrsiveMap2Json() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", map);
JsonUtil.map2Json(map);
}

好在服務(wù)器處理的 JSON 數(shù)據(jù)最終都應(yīng)該轉(zhuǎn)化為簡(jiǎn)單的 JavaScript 對(duì)象,因此,遞歸引用的可能性很小。

最后,通過 Servlet 或 MVC 框架輸出 JSON 時(shí),需要設(shè)置正確的 MIME 類型(application/json)和字符編碼。假定服務(wù)器使用 UTF-8 編碼,則可以使用以下代碼輸出編碼后的 JSON 文本:


response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
pw.write(JsonUtil.toJson(obj));
pw.flush();

小結(jié)

JSON 已經(jīng)是 JavaScript 標(biāo)準(zhǔn)的一部分。目前,主流的瀏覽器對(duì) JSON 支持都非常完善。應(yīng)用 JSON,我們可以從 XML 的解析中擺脫出來,對(duì)那些應(yīng)用 Ajax 的 Web 2.0 網(wǎng)站來說,JSON 確實(shí)是目前最靈活的輕量級(jí)方案。



redcoatjk 2012-02-27 11:00 發(fā)表評(píng)論
]]>
[轉(zhuǎn)]JDNI入門http://www.aygfsteel.com/redcoatjk/archive/2012/02/14/369917.htmlredcoatjkredcoatjkTue, 14 Feb 2012 02:24:00 GMThttp://www.aygfsteel.com/redcoatjk/archive/2012/02/14/369917.htmlhttp://www.aygfsteel.com/redcoatjk/comments/369917.htmlhttp://www.aygfsteel.com/redcoatjk/archive/2012/02/14/369917.html#Feedback0http://www.aygfsteel.com/redcoatjk/comments/commentRss/369917.htmlhttp://www.aygfsteel.com/redcoatjk/services/trackbacks/369917.html那么,JNDI到底起什么作用?

要了解JNDI的作用,我們可以從“如果不用JNDI我們?cè)鯓幼觯坑昧薐NDI后我們又將怎樣做?”這個(gè)問題來探討。

沒有JNDI的做法:
程序員開發(fā)時(shí),知道要開發(fā)訪問MySQL數(shù)據(jù)庫(kù)的應(yīng)用,于是將一個(gè)對(duì) MySQL JDBC 驅(qū)動(dòng)程序類的引用進(jìn)行了編碼,并通過使用適當(dāng)?shù)?JDBC URL 連接到數(shù)據(jù)庫(kù)。
就像以下代碼這樣:

Connection conn=null;
try {Class.forName("com.mysql.jdbc.Driver",true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");
/* 使用conn并進(jìn)行SQL操作 */......
conn.close();
}
catch(Exception e)
{e.printStackTrace();}
finally {if(conn!=null)
{try {conn.close();}
catch(SQLException e) {
}}}

這是傳統(tǒng)的做法,也是以前非Java程序員(如Delphi、VB等)常見的做法。這種做法一般在小規(guī)模的開發(fā)過程中不會(huì)產(chǎn)生問題,只要程序員熟悉Java語言、了解JDBC技術(shù)和MySQL,可以很快開發(fā)出相應(yīng)的應(yīng)用程序。

沒有JNDI的做法存在的問題:
1、數(shù)據(jù)庫(kù)服務(wù)器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發(fā)JDBC URL需要修改;
2、數(shù)據(jù)庫(kù)可能改用別的產(chǎn)品,如改用DB2或者Oracle,引發(fā)JDBC驅(qū)動(dòng)程序包和類名需要修改;
3、隨著實(shí)際使用終端的增加,原配置的連接池參數(shù)可能需要調(diào)整;
4、......

解決辦法:
程序員應(yīng)該不需要關(guān)心“具體的數(shù)據(jù)庫(kù)后臺(tái)是什么?JDBC驅(qū)動(dòng)程序是什么?JDBC URL格式是什么?訪問數(shù)據(jù)庫(kù)的用戶名和口令是什么?”等等這些問題,程序員編寫的程序應(yīng)該沒有對(duì) JDBC 驅(qū)動(dòng)程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 —— 甚至沒有數(shù)據(jù)庫(kù)池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對(duì)這些配置和管理進(jìn)行引用即可。

由此,就有了JNDI。

用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI參數(shù),定義一個(gè)數(shù)據(jù)源,也就是JDBC引用參數(shù),給這個(gè)數(shù)據(jù)源設(shè)置一個(gè)名稱;然后,在程序中,通過數(shù)據(jù)源名稱引用數(shù)據(jù)源從而訪問后臺(tái)數(shù)據(jù)庫(kù)。
具體操作如下(以JBoss為例):
1、配置數(shù)據(jù)源
在JBoss的 D:\jboss420GA\docs\examples\jca 文件夾下面,有很多不同數(shù)據(jù)庫(kù)引用的數(shù)據(jù)源定義模板。將其中的 mysql-ds.xml 文件Copy到你使用的服務(wù)器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的內(nèi)容,使之能通過JDBC正確訪問你的MySQL數(shù)據(jù)庫(kù),如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/lw</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
</local-tx-datasource>
</datasources>

這里,定義了一個(gè)名為MySqlDS的數(shù)據(jù)源,其參數(shù)包括JDBC的URL,驅(qū)動(dòng)類名,用戶名及密碼等。

2、在程序中引用數(shù)據(jù)源:

Connection conn=null;
try
{
Context ctx=new InitialContext();
Object datasourceRef=ctx.lookup("java:MySqlDS");
//引用數(shù)據(jù)源
DataSource ds=(Datasource)datasourceRef;
conn=ds.getConnection();
/* 使用conn進(jìn)行數(shù)據(jù)庫(kù)SQL操作 */......
c.close();
}
catch(Exception e)
{e.printStackTrace();}
finally {if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException e)
{
}}}
直接使用JDBC或者通過JNDI引用數(shù)據(jù)源的編程代碼量相差無幾,但是現(xiàn)在的程序可以不用關(guān)心具體JDBC參數(shù)了。
在系統(tǒng)部署后,如果數(shù)據(jù)庫(kù)的相關(guān)參數(shù)變更,只需要重新配置 mysql-ds.xml 修改其中的JDBC參數(shù),只要保證數(shù)據(jù)源的名稱不變,那么程序源代碼就無需修改。

由此可見,JNDI避免了程序與數(shù)據(jù)庫(kù)之間的緊耦合,使應(yīng)用更加易于配置、易于部署。

JNDI的擴(kuò)展:
JNDI在滿足了數(shù)據(jù)源配置的要求的基礎(chǔ)上,還進(jìn)一步擴(kuò)充了作用:所有與系統(tǒng)外部的資源的引用,都可以通過JNDI定義和引用。

所以,在J2EE規(guī)范中,J2EE 中的資源并不局限于 JDBC 數(shù)據(jù)源。引用的類型有很多,其中包括資源引用(已經(jīng)討論過)、環(huán)境實(shí)體和 EJB 引用。特別是 EJB 引用,它暴露了 JNDI 在 J2EE 中的另外一項(xiàng)關(guān)鍵角色:查找其他應(yīng)用程序組件。

EJB 的 JNDI 引用非常類似于 JDBC 資源的引用。在服務(wù)趨于轉(zhuǎn)換的環(huán)境中,這是一種很有效的方法。可以對(duì)應(yīng)用程序架構(gòu)中所得到的所有組件進(jìn)行這類配置管理,從 EJB 組件到 JMS 隊(duì)列和主題,再到簡(jiǎn)單配置字符串或其他對(duì)象,這可以降低隨時(shí)間的推移服務(wù)變更所產(chǎn)生的維護(hù)成本,同時(shí)還可以簡(jiǎn)化部署,減少集成工作。 外部資源”。


總結(jié):
J2EE 規(guī)范要求所有 J2EE 容器都要提供 JNDI 規(guī)范的實(shí)現(xiàn)。JNDI 在 J2EE 中的角色就是“交換機(jī)” —— J2EE 組件在運(yùn)行時(shí)間接地查找其他組件、資源或服務(wù)的通用機(jī)制。在多數(shù)情況下,提供 JNDI 供應(yīng)者的容器可以充當(dāng)有限的數(shù)據(jù)存儲(chǔ),這樣管理員就可以設(shè)置應(yīng)用程序的執(zhí)行屬性,并讓其他應(yīng)用程序引用這些屬性(Java 管理擴(kuò)展(Java Management Extensions,JMX)也可以用作這個(gè)目的)。JNDI 在 J2EE 應(yīng)用程序中的主要角色就是提供間接層,這樣組件就可以發(fā)現(xiàn)所需要的資源,而不用了解這些間接性。

在 J2EE 中,JNDI 是把 J2EE 應(yīng)用程序合在一起的粘合劑,JNDI 提供的間接尋址允許跨企業(yè)交付可伸縮的、功能強(qiáng)大且很靈活的應(yīng)用程序。這是 J2EE 的承諾,而且經(jīng)過一些計(jì)劃和預(yù)先考慮,這個(gè)承諾是完全可以實(shí)現(xiàn)的。

redcoatjk 2012-02-14 10:24 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 白玉县| 安顺市| 昌黎县| 日土县| 罗源县| 胶南市| 沂南县| 林芝县| 恩施市| 临潭县| 长汀县| 大理市| 新民市| 乾安县| 岳西县| 安陆市| 汕头市| 江油市| 沁阳市| 雅安市| 汝南县| 库尔勒市| 辽阳县| 文水县| 榆林市| 藁城市| 绿春县| 普洱| 拉孜县| 黎川县| 海盐县| 乌兰县| 开江县| 景宁| 咸丰县| 同仁县| 鸡东县| 广宁县| 大邑县| 临猗县| 怀远县|