<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆:93 文章:11 評論:22 引用:0
    首頁 發(fā)新隨筆
    發(fā)新文章 聯(lián)系 聚合管理

    2012年2月27日

    --查詢表空間、表空間大小及表空間對應(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)前表級鎖的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ù)庫誰在運(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.具有最高等待的對象

    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)前連接會話數(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.查詢會話執(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.顯示正在等待鎖的所有會話

    SELECT * FROM DBA_WAITERS;

     

    DDL

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

    /*注意點(diǎn):

     

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

     

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

     

    /*分為四步 */

     

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

     

    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; 

    posted @ 2014-03-03 15:48 redcoatjk 閱讀(345) | 評論 (0)編輯 收藏
     
    摘自: http://www.douban.com/note/235086917/
    http://jackleechina.iteye.com/blog/1595397

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

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

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

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

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

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

    attachEvent與addEventListener區(qū)別
    適應(yīng)的瀏覽器版本不同,同時在使用的過程中要注意
    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注冊事件. 格式如下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按照注冊倒敘執(zhí)行:    執(zhí)行順序?yàn)閙ethod3->method2->method1 
    37<br/>addEventListener按照注冊順序執(zhí)行:    執(zhí)行順序?yàn)閙ethod1->method2->method3 
    38</body>
    39</html>

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

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

    posted @ 2013-11-04 14:22 redcoatjk 閱讀(436) | 評論 (0)編輯 收藏
     
         摘要: 摘自http://zhangjunhd.blog.51cto.com/113473/20629/ 1.Servlet過濾器 1.1 什么是過濾器 過濾器是一個程序,它先于與之相關(guān)的servlet或JSP頁面運(yùn)行在服務(wù)器上。過濾器可附加到一個或多個servlet或JSP頁面上,并且可以檢查進(jìn)入這些資源的請求信息。在這之后,過濾器可以作如下的選擇: ①以常規(guī)的方式調(diào)用資源(即,調(diào)...  閱讀全文
    posted @ 2013-04-16 17:28 redcoatjk 閱讀(262) | 評論 (0)編輯 收藏
     
         摘要: 摘自 http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/ 要查看MySQL運(yùn)行狀態(tài),要優(yōu)化MySQL運(yùn)行效率都少不了要運(yùn)行show status查看各種狀態(tài),下面是參考官方文檔及網(wǎng)上資料整理出來的中文詳細(xì)解釋:  如有問題,歡迎指正 狀態(tài)名 作用域 ...  閱讀全文
    posted @ 2012-09-05 15:33 redcoatjk 閱讀(2112) | 評論 (1)編輯 收藏
     
         摘要: 代碼中反復(fù)開關(guān)自動提交沒有必要. 其他方面寫得還是很不錯的.清晰.摘自 http://wangqinqin.iteye.com/blog/547277  PreparedStatement: 1) addBatch()將一組參數(shù)添加到PreparedStatement對象內(nèi)部。 2) executeBatch()將一批參數(shù)提交給數(shù)據(jù)庫來執(zhí)行,如果全部命令執(zhí)行成功...  閱讀全文
    posted @ 2012-07-20 15:04 redcoatjk 閱讀(18633) | 評論 (1)編輯 收藏
     
    摘自 http://neoremind.net/2010/12/preparedstatement_diff/

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

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

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

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

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

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

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

    SELECT colume FROM TABLE WHERE colume=:x;

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

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

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

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

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

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

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

    SQL注入或者說SQL注入攻擊就是利用Statement的漏洞完成的,例如用個用戶登錄,那么form表單有用戶名和密碼
    那么我提交時,在用戶名輸入框內(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注入就無從談起了。
    posted @ 2012-07-20 11:14 redcoatjk 閱讀(4418) | 評論 (2)編輯 收藏
     
    摘自: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服務(wù)
    在命令行下執(zhí)行:
    net stop MySQL
    net start MySQL

    3、設(shè)置新的ROOT密碼
    然后用命令提示符cd到對應(yīng)安裝目錄的bin下執(zhí)行:
    MySQL -u root -p MySQL或mysql -u root -p
    直接回車無需密碼即可進(jìn)入數(shù)據(jù)庫了。
    此時,在命令行下執(zhí)行 use mysql;
    現(xiàn)在我們執(zhí)行如下語句把root密碼更新為:
    update user set password=PASSWORD("root") where user='root';
    (注意:此時不用使用mysqladmin -u root -p password '你的新密碼'這條命令修改密碼,因?yàn)?skip-grant-tables'配置,
    不信的話,你可以試用一下,它肯定會報(bào)如下所示的錯誤:
    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 加個密碼root。首先進(jìn)入cmd中,然后鍵入
    以下命令,至于在CMD下能否使用mysqladmin,
    就要看你的Windows環(huán)境變量PATH中是否添加“E:\Program Files\MySQL\MySQL Server 5.1\bin;”(請改為你自己的安裝路徑)了。)
    mysqladmin -u root password root
    注:因?yàn)殚_始時root 沒有密碼,所以-p 舊密碼一項(xiàng)就可以省略了。
    例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')
    當(dāng)然你也可以這樣寫:mysqladmin –u root -p password admin回車,
    然后再輸入你的舊密碼,這樣也是完全也可以的,看你的愛好了.
    例3:再將root用戶的密碼去掉.
    F:\Documents and Settings\long>mysqladmin -u root -p password  ;
    Enter password: root
    此時,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ù)庫,如果你選擇了允許root通過遠(yuǎn)程登錄進(jìn)來時,你在mysql數(shù)據(jù)庫下的user表中,
    use mysql;
    select * from user;可以看到有兩條記錄,如果你沒有配置這一項(xiàng)的話,只會第一條記錄!
    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'

    (注:下面的這些方法我本人沒有試過,不知對不對,我只是轉(zhuǎn)載了一下:)
    下面的方法都在mysql提示符下使用,且必須有mysql的root權(quán)限:
    方法4
    mysql> INSERT INTO mysql.user (Host,User,Password)
    VALUES('%','jeffrey',PASSWORD('biscuit'));
    mysql> FLUSH PRIVILEGES
    確切地說這是在增加一個用戶,用戶名為jeffrey,密碼為biscuit。
    在《mysql中文參考手冊》里有這個例子,所以我也就寫出來了。
    注意要使用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)表,
    否則會出現(xiàn)拒絕訪問,還有一種方法,就是重新啟動mysql服務(wù)器,來使新設(shè)置生效。

    posted @ 2012-07-19 10:54 redcoatjk 閱讀(326) | 評論 (0)編輯 收藏
     

    怎么查看端口占用情況?

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

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

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

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

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

    TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016


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

    C:\>tasklist|findstr "2016"

    tor.exe 2016 Console 0 16,064 K

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

    posted @ 2012-06-13 13:51 redcoatjk 閱讀(256) | 評論 (0)編輯 收藏
     
    JSON 即 JavaScript Object Natation,它是一種輕量級的數(shù)據(jù)交換格式,非常適合于服務(wù)器與 JavaScript 的交互。本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務(wù)器端進(jìn)行 JSON 格式數(shù)據(jù)的處理。
    管有許多宣傳關(guān)于 XML 如何擁有跨平臺,跨語言的優(yōu)勢,然而,除非應(yīng)用于 Web Services,否則,在普通的 Web 應(yīng)用中,開發(fā)者經(jīng)常為 XML 的解析傷透了腦筋,無論是服務(wù)器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導(dǎo)致復(fù)雜的代碼,極低的開發(fā)效率。實(shí)際上,對于大多數(shù) Web 應(yīng)用來說,他們根本不需要復(fù)雜的 XML 來傳輸數(shù)據(jù),XML 的擴(kuò)展性很少具有優(yōu)勢,許多 AJAX 應(yīng)用甚至直接返回 HTML 片段來構(gòu)建動態(tài) Web 頁面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統(tǒng)的復(fù)雜性,但同時缺少了一定的靈活性。

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

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

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

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

    "abc"

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

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

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

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

    ["abc",12345,false,null]

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

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

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

    用 JSON 表示如下:

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

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

    {"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ù)。我們通過一個簡單的 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}
    }

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


    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í)際上對應(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 對象,我們編寫一個入口方法 toJson(Object),能夠?qū)⑷我獾?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 對象作嚴(yán)格的檢查。不被支持的對象(例如 List)將直接拋出 RuntimeException 。此外,為了保證輸出的 JSON 是有效的,Map<String, Object> 對象的 Key 也不能包含特殊字符。細(xì)心的讀者可能還會發(fā)現(xiàn)循環(huán)引用的對象會引發(fā)無限遞歸,例如,精心構(gòu)造一個循環(huán)引用的 Map,就可以檢測到 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)化為簡單的 JavaScript 對象,因此,遞歸引用的可能性很小。

    最后,通過 Servlet 或 MVC 框架輸出 JSON 時,需要設(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)的一部分。目前,主流的瀏覽器對 JSON 支持都非常完善。應(yīng)用 JSON,我們可以從 XML 的解析中擺脫出來,對那些應(yīng)用 Ajax 的 Web 2.0 網(wǎng)站來說,JSON 確實(shí)是目前最靈活的輕量級方案。

    posted @ 2012-02-27 11:00 redcoatjk 閱讀(337) | 評論 (0)編輯 收藏
    CALENDER
    <2012年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    26272829123
    45678910

    常用鏈接

    留言簿(3)

    隨筆分類(22)

    隨筆檔案(76)

    文章分類(12)

    文章檔案(17)

    搜索

    •  

    積分與排名

    • 積分 - 250544
    • 排名 - 227

    最新評論

    評論排行榜


    Powered By: 博客園
    模板提供滬江博客

    主站蜘蛛池模板: 亚洲明星合成图综合区在线| 狼群影院在线观看免费观看直播| 亚洲国产福利精品一区二区| 亚洲精品国产福利一二区| 成人免费AA片在线观看| 两个人日本免费完整版在线观看1| 亚洲日本在线电影| 国产精品免费久久久久影院| 亚洲av无码久久忘忧草| 亚洲AV无码久久| 久久精品国产亚洲精品| 免费a级黄色毛片| 成人毛片18女人毛片免费视频未| 91香蕉国产线在线观看免费| 久久九九久精品国产免费直播| 亚洲VA中文字幕无码毛片| 午夜亚洲福利在线老司机| 成年美女黄网站18禁免费| 亚欧色视频在线观看免费| 最近2019中文免费字幕在线观看 | 午夜色a大片在线观看免费| WWW亚洲色大成网络.COM| 亚洲一区二区三区播放在线| 亚洲一区二区三区电影| 亚洲αv在线精品糸列| 自拍偷自拍亚洲精品情侣| 亚洲欧洲日产国码高潮αv| 国产hs免费高清在线观看| 国产裸模视频免费区无码| 成全视频在线观看免费高清动漫视频下载 | 国产精品亚洲综合一区在线观看 | 男男AV纯肉无码免费播放无码| 91精品国产免费入口| 最近高清中文字幕免费| 69av免费观看| 18国产精品白浆在线观看免费| 中文字幕免费观看| 成年人免费的视频| 欧美日韩国产免费一区二区三区| 国内外成人免费视频| 国产精品成人免费综合|