久久精品国产亚洲AV无码娇色,亚洲色无码专区在线观看,国产偷国产偷亚洲高清人http://www.tkk7.com/redcoatjk/萬物皆對象 萬事歸節奏zh-cnFri, 09 May 2025 13:38:20 GMTFri, 09 May 2025 13:38:20 GMT60Oracle維護常用SQLhttp://www.tkk7.com/redcoatjk/archive/2014/03/03/410543.htmlredcoatjkredcoatjkMon, 03 Mar 2014 07:48:00 GMThttp://www.tkk7.com/redcoatjk/archive/2014/03/03/410543.htmlhttp://www.tkk7.com/redcoatjk/comments/410543.htmlhttp://www.tkk7.com/redcoatjk/archive/2014/03/03/410543.html#Feedback0http://www.tkk7.com/redcoatjk/comments/commentRss/410543.htmlhttp://www.tkk7.com/redcoatjk/services/trackbacks/410543.html--查詢表空間、表空間大小及表空間對應物理路徑

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;

 

--查詢表空間的總容量

  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.查找當前表級鎖的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.殺掉鎖表進程:

alter system kill session '436,35123';

 

3.RAC環境中鎖查找:

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.監控當前數據庫誰在運行什么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.具有最高等待的對象

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.查詢當前連接會話數

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.查詢會話執行的實際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.顯示正在等待鎖的所有會話

SELECT * FROM DBA_WAITERS;

 

DDL

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

/*注意點:

 

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

 

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

 

/*分為四步 */

 

/*第1步:創建臨時表空間  */

 

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步:創建數據表空間  */

 

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步:創建用戶并指定表空間  */

 

create user username identified by password 

 

default tablespace user_data 

 

temporary tablespace user_temp; 

 

 

 

/*第4步:給用戶授予權限  */

 

grant connect,resource,dba to username; 



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

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

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

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

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

而使用添加事件監聽的方式就可以實現并行。特別是當團隊合作時,事件并行的需求增多,比如:監聽document對象的鼠標事件或者window對象的載入事件等。使用事件屬性則很容易造成事件覆蓋掉

使用事件監聽有兩種方式:attachEvent和addEventListener

attachEvent與addEventListener區別
適應的瀏覽器版本不同,同時在使用的過程中要注意
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進行事件綁定的按鈕" id="btn1"/>
18<input type="button"  value="火狐瀏覽器: addEventListener進行事件綁定的按鈕" id="btn2"/>
19
20<SCRIPT LANGUAGE="JavaScript">
21     /**方法一: 使用元素的事件屬性. [這種方式事件只可綁定一次,最后綁定的執行]**/
22     button1.onclick = function() { alert("1-1"); };
23     button1.onclick = function() { alert("1-2"); };
24     /**方法二: 使用attachEvent注冊事件. 格式如下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    //執行順序為method1->method2->method3
35
</SCRIPT>
36<br/>attachEvent按照注冊倒敘執行:    執行順序為method3->method2->method1 
37<br/>addEventListener按照注冊順序執行:    執行順序為method1->method2->method3 
38</body>
39</html>

相關衍生閱讀:

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



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

redcoatjk 2013-04-16 17:28 發表評論
]]>
[轉]MySQL運行狀態show status中文詳解http://www.tkk7.com/redcoatjk/archive/2012/09/05/387100.htmlredcoatjkredcoatjkWed, 05 Sep 2012 07:33:00 GMThttp://www.tkk7.com/redcoatjk/archive/2012/09/05/387100.htmlhttp://www.tkk7.com/redcoatjk/comments/387100.htmlhttp://www.tkk7.com/redcoatjk/archive/2012/09/05/387100.html#Feedback1http://www.tkk7.com/redcoatjk/comments/commentRss/387100.htmlhttp://www.tkk7.com/redcoatjk/services/trackbacks/387100.html閱讀全文

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

redcoatjk 2012-07-20 15:04 發表評論
]]>
[轉]JDBC中Statement與PreparedStatement的區別http://www.tkk7.com/redcoatjk/archive/2012/07/20/383583.htmlredcoatjkredcoatjkFri, 20 Jul 2012 03:14:00 GMThttp://www.tkk7.com/redcoatjk/archive/2012/07/20/383583.htmlhttp://www.tkk7.com/redcoatjk/comments/383583.htmlhttp://www.tkk7.com/redcoatjk/archive/2012/07/20/383583.html#Feedback2http://www.tkk7.com/redcoatjk/comments/commentRss/383583.htmlhttp://www.tkk7.com/redcoatjk/services/trackbacks/383583.html摘自 http://neoremind.net/2010/12/preparedstatement_diff/

JDBC中Statement與PreparedStatement的區別

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

例如,如果要執行兩條sql語句

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

會生成兩個執行計劃

一千個查詢就生成一千個執行計劃!

PreparedStatement用于使用綁定變量重用執行計劃

SELECT colume FROM TABLE WHERE colume=:x;

通過set不同數據只需要生成一次執行計劃,可以重用

是否使用綁定變量對系統影響非常大,生成執行計劃極為消耗資源

兩種實現 速度差距可能成百上千倍

后者使用了PreparedStatement對象,而前者是普通的Statement對象。PreparedStatement對象不僅包含了SQL語句,而且大多數情況下這個語句已經被預編譯過,因而當其執行時,只需DBMS運行SQL語句,而不必先編譯。當你需要執行Statement對象多次的時候,PreparedStatement對象將會大大降低運行時間,當然也加快了訪問數據庫的速度

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

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

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

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


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

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

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

2、然后重啟MySQL服務
在命令行下執行:
net stop MySQL
net start MySQL

3、設置新的ROOT密碼
然后用命令提示符cd到對應安裝目錄的bin下執行:
MySQL -u root -p MySQL或mysql -u root -p
直接回車無需密碼即可進入數據庫了。
此時,在命令行下執行 use mysql;
現在我們執行如下語句把root密碼更新為:
update user set password=PASSWORD("root") where user='root';
(注意:此時不用使用mysqladmin -u root -p password '你的新密碼'這條命令修改密碼,因為'skip-grant-tables'配置,
不信的話,你可以試用一下,它肯定會報如下所示的錯誤:
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、還原配置文件并重啟服務

然后修改MySQL配置文件把剛才添加的那一行'skip-grant-tables'刪除。
再次重起MySQL服務,密碼修改完畢。
用新密碼root試一下吧,又能登入重新進入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 運行機器,你換成自己的,這樣登錄上去,就可以修改密碼了,
其實沒必要這么麻煩,直接mysql -u root就可以了。
GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION

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

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

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


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

注:mysql 新設置用戶或更改密碼后需用flush privileges刷新MySQL的系統權限相關表,
否則會出現拒絕訪問,還有一種方法,就是重新啟動mysql服務器,來使新設置生效。



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

       開始--運行--cmd 進入命令提示符 輸入netstat -ano 即可看到所有連接的PID 之后在任務管理器中找到這個PID所對應的程序如果任務管理器中沒有PID這一項,可以在任務管理器中選"查看"-"選擇列"

        經常,我們在啟動應用的時候發現系統需要的端口被別的程序占用,如何知道誰占有了我們需要的端口,很多人都比較頭疼,下面就介紹一種非常簡單的方法,希望對大家有用

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

1、Windows平臺
在windows命令行窗口下執行:

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

TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016


看到了嗎,端口被進程號為2016的進程占用,繼續執行下面命令:

C:\>tasklist|findstr "2016"

tor.exe 2016 Console 0 16,064 K

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



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

現在, JSON 為 Web 應用開發者提供了另一種數據交換格式。讓我們來看看 JSON 到底是什么,同 XML 或 HTML 片段相比,JSON 提供了更好的簡單性和靈活性。

JSON 數據格式解析

和 XML 一樣,JSON 也是基于純文本的數據格式。由于 JSON 天生是為 JavaScript 準備的,因此,JSON 的數據格式非常簡單,您可以用 JSON 傳輸一個簡單的 String,Number,Boolean,也可以傳輸一個數組,或者一個復雜的 Object 對象。

String,Number 和 Boolean 用 JSON 表示非常簡單。例如,用 JSON 表示一個簡單的 String “ abc ”,其格式為:

"abc"

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

12345(整數)
-3.9e10(浮點數)

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

JSON 還可以表示一個數組對象,使用 [] 包含所有元素,每個元素用逗號分隔,元素可以是任意的 Value,例如,以下數組包含了一個 String,Number,Boolean 和一個 null:

["abc",12345,false,null]

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

例如,一個 Address 對象包含如下 Key-Value:

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

用 JSON 表示如下:

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

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

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

JavaScript 處理 JSON 數據

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

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

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

假定服務器返回的 JSON 數據是上文的:

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

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

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

服務器端輸出 JSON 格式數據

下面我們討論如何在服務器端輸出 JSON 格式的數據。以 Java 為例,我們將演示將一個 Java 對象編碼為 JSON 格式的文本。

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


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 的多態,我們可以處理 Integer,Long,Float 等多種 Number 格式:


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

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


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

要將數組編碼為 JSON 格式,可以通過循環將每一個元素編碼出來:


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(',');
}
// 將最后添加的 ',' 變為 ']':
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}

最后,我們需要將 Map<String, Object> 編碼為 JSON 格式,因為 JavaScript 的 Object 實際上對應的是 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(',');
}
// 將最后的 ',' 變為 '}':
sb.setCharAt(sb.length()-1, '}');
return sb.toString();
}

為了統一處理任意的 Java 對象,我們編寫一個入口方法 toJson(Object),能夠將任意的 Java 對象編碼為 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());
}

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


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

好在服務器處理的 JSON 數據最終都應該轉化為簡單的 JavaScript 對象,因此,遞歸引用的可能性很小。

最后,通過 Servlet 或 MVC 框架輸出 JSON 時,需要設置正確的 MIME 類型(application/json)和字符編碼。假定服務器使用 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();

小結

JSON 已經是 JavaScript 標準的一部分。目前,主流的瀏覽器對 JSON 支持都非常完善。應用 JSON,我們可以從 XML 的解析中擺脫出來,對那些應用 Ajax 的 Web 2.0 網站來說,JSON 確實是目前最靈活的輕量級方案。



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

要了解JNDI的作用,我們可以從“如果不用JNDI我們怎樣做?用了JNDI后我們又將怎樣做?”這個問題來探討。

沒有JNDI的做法:
程序員開發時,知道要開發訪問MySQL數據庫的應用,于是將一個對 MySQL JDBC 驅動程序類的引用進行了編碼,并通過使用適當的 JDBC URL 連接到數據庫。
就像以下代碼這樣:

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并進行SQL操作 */......
conn.close();
}
catch(Exception e)
{e.printStackTrace();}
finally {if(conn!=null)
{try {conn.close();}
catch(SQLException e) {
}}}

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

沒有JNDI的做法存在的問題:
1、數據庫服務器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發JDBC URL需要修改;
2、數據庫可能改用別的產品,如改用DB2或者Oracle,引發JDBC驅動程序包和類名需要修改;
3、隨著實際使用終端的增加,原配置的連接池參數可能需要調整;
4、......

解決辦法:
程序員應該不需要關心“具體的數據庫后臺是什么?JDBC驅動程序是什么?JDBC URL格式是什么?訪問數據庫的用戶名和口令是什么?”等等這些問題,程序員編寫的程序應該沒有對 JDBC 驅動程序的引用,沒有服務器名稱,沒有用戶名稱或口令 —— 甚至沒有數據庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。

由此,就有了JNDI。

用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI參數,定義一個數據源,也就是JDBC引用參數,給這個數據源設置一個名稱;然后,在程序中,通過數據源名稱引用數據源從而訪問后臺數據庫。
具體操作如下(以JBoss為例):
1、配置數據源
在JBoss的 D:\jboss420GA\docs\examples\jca 文件夾下面,有很多不同數據庫引用的數據源定義模板。將其中的 mysql-ds.xml 文件Copy到你使用的服務器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的內容,使之能通過JDBC正確訪問你的MySQL數據庫,如下:
<?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>

這里,定義了一個名為MySqlDS的數據源,其參數包括JDBC的URL,驅動類名,用戶名及密碼等。

2、在程序中引用數據源:

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

由此可見,JNDI避免了程序與數據庫之間的緊耦合,使應用更加易于配置、易于部署。

JNDI的擴展:
JNDI在滿足了數據源配置的要求的基礎上,還進一步擴充了作用:所有與系統外部的資源的引用,都可以通過JNDI定義和引用。

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

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


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

在 J2EE 中,JNDI 是把 J2EE 應用程序合在一起的粘合劑,JNDI 提供的間接尋址允許跨企業交付可伸縮的、功能強大且很靈活的應用程序。這是 J2EE 的承諾,而且經過一些計劃和預先考慮,這個承諾是完全可以實現的。

redcoatjk 2012-02-14 10:24 發表評論
]]>
主站蜘蛛池模板: 91手机看片国产永久免费| a级毛片在线免费| 性生交片免费无码看人| 亚洲国产精品免费视频| 最近免费中文字幕MV在线视频3| 亚洲电影日韩精品 | 亚洲国产电影av在线网址| 亚洲成AV人影片在线观看| 成人国产mv免费视频| 国产成人亚洲午夜电影| www.亚洲色图| 91在线视频免费观看| 亚洲黄色网址大全| 国产91色综合久久免费| 亚洲一卡一卡二新区无人区| 老司机永久免费网站在线观看| 亚洲AV无码AV日韩AV网站| 免费观看午夜在线欧差毛片 | 你懂的网址免费国产| 亚洲精品无码不卡| 啦啦啦完整版免费视频在线观看| 91情国产l精品国产亚洲区 | 国产黄色片免费看| 亚洲精品无码精品mV在线观看| 免费国产黄网站在线观看视频| 亚洲人成网男女大片在线播放| 日本视频免费在线| 国产免费人成视频在线播放播| 久久久久亚洲精品无码系列| 又粗又大又黑又长的免费视频| 亚洲av无码专区国产不乱码| 久久久久亚洲AV无码专区桃色| 少妇无码一区二区三区免费| 亚洲一线产区二线产区区| 亚洲国产一区视频| 无码国产精品一区二区免费vr | 亚洲国产精品一区二区三区久久| 99久久99这里只有免费的精品| 最新国产成人亚洲精品影院| 国产在线19禁免费观看| 久久这里只精品国产免费10|