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

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

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

    月掛夜中央

    懶惰程序員

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    2008年2月19日 #

    網(wǎng)易微博的OAUTH認(rèn)證開(kāi)發(fā)(java版)

         摘要:     網(wǎng)易微博最近也開(kāi)放了它的開(kāi)發(fā)平臺(tái)http://open.t.163.com,其中java版的oauth認(rèn)證和新浪微博的很類似(貌似都是從twitter那邊copy過(guò)來(lái)的)。但說(shuō)句實(shí)話,網(wǎng)易java版的sdk和新浪微博的比起來(lái),的確上手比較麻煩,里面提供的example都是把a(bǔ)ccess token寫(xiě)死,作為參數(shù),具體的代碼如下: public&nb...  閱讀全文

    posted @ 2011-02-16 21:31 月掛夜中央 閱讀(6304) | 評(píng)論 (6)編輯 收藏

    springside3.*中l(wèi)og4j和java.util.concurrent的結(jié)合使用

         摘要:         在springside3.*中的showcase案例中,有一個(gè)把log4j的日志存入數(shù)據(jù)庫(kù)的演示,下面是我對(duì)這個(gè)案例的學(xué)習(xí)筆記。 1、我們首先來(lái)看下log4j相關(guān)日志的配置: #Async Database Appender (Store business&n...  閱讀全文

    posted @ 2011-02-13 21:20 月掛夜中央 閱讀(2213) | 評(píng)論 (0)編輯 收藏

    使用XmemcachedClient設(shè)置緩存對(duì)象過(guò)期時(shí)間的問(wèn)題

    前幾天在做一個(gè)涉及到memcache的項(xiàng)目,使用XmemcachedClient來(lái)操作memcache,由于是一個(gè)季度的數(shù)據(jù),保存數(shù)據(jù)時(shí)這樣的
     memcachedClient.set(key, expiredTime, value)
    其中設(shè)置了過(guò)期時(shí)間為90天
    int cacheExpireTime = 60*60*24*90;
    結(jié)果就杯具了,保存后用get方法取時(shí)都是null;后來(lái)無(wú)意中把過(guò)期時(shí)間改成小于30天,就完全沒(méi)有問(wèn)題,經(jīng)過(guò)谷歌大神的幫忙,終于發(fā)現(xiàn)了原因。
    服務(wù)端的處理
    時(shí)間處理源代碼【memcached.c】如下:
    #define REALTIME_MAXDELTA 
    60*60*24*30                     // 定義30天的秒數(shù)
    static rel_time_t realtime(const time_t exptime) {
           
    if (exptime == 0return 0;
           
    if (exptime > REALTIME_MAXDELTA) {                       // 超過(guò)30天,是絕對(duì)時(shí)間
                  if (exptime <= process_started)                         // 小于進(jìn)程啟動(dòng)日期
                          return (rel_time_t)1;                                  //
                  return (rel_time_t)(exptime - process_started);   // 返回進(jìn)程啟動(dòng)之后的時(shí)間差
           }
     else {                                                                   // 不超過(guò)30天,是相對(duì)時(shí)間
                  return (rel_time_t)(exptime + current_time);       // exptime + (tvsec - process_started)
           }

    }
    原來(lái)超過(guò)30天就自動(dòng)轉(zhuǎn)換成絕對(duì)時(shí)間,和進(jìn)程啟動(dòng)時(shí)間比較,顯然60*60*24*90小于啟動(dòng)日期的絕對(duì)數(shù),所以對(duì)象一存入就過(guò)期了,肯定取不到數(shù)據(jù)。
    具體的問(wèn)題請(qǐng)圍觀這篇文章:http://blog.sina.com.cn/s/blog_539d361e0100nc9h.html

    posted @ 2011-01-21 16:18 月掛夜中央 閱讀(4914) | 評(píng)論 (0)編輯 收藏

    xfire的webservice方法中date類型參數(shù)為null出現(xiàn)空指針錯(cuò)誤的問(wèn)題

    最近在使用xfire開(kāi)發(fā)webservice,發(fā)現(xiàn)一個(gè)這樣的問(wèn)題,如果注冊(cè)的webservice 方法中的參數(shù)有Date類型時(shí),調(diào)用該方法時(shí)把Date型參數(shù)填入null,就會(huì)報(bào)空指針錯(cuò)誤,這是xfire的一個(gè)bug,很可惜在xfire官方網(wǎng)站上最新版的xfire版本是1.2.6,在這個(gè)版本中問(wèn)題仍然沒(méi)有解決,而解決的方法在codeHaus的jira中其實(shí)發(fā)現(xiàn)了這個(gè)問(wèn)題,這個(gè)問(wèn)題主要出在org.codehaus.xfire.aegis.type.basic.DateTimeType的writeObject方法,在1.2.6中這個(gè)方法的代碼是這樣的:

    public void writeObject(Object object, MessageWriter writer, MessageContext context)
        
    {
            Calendar c 
    = Calendar.getInstance();
            c.setTime((Date) object);
            writer.writeValue(format.format(c));
        }
    修改過(guò)后的代碼如下:
    public void writeObject(Object object, MessageWriter writer,
                MessageContext context) 
    {
            
    if (object != null{
                Calendar c 
    = Calendar.getInstance();
                c.setTime((Date) object);
                writer.writeValue(format.format(c));
            }
     else {
                writer.writeXsiNil();
            }

        }
    加了個(gè)對(duì)null的判斷就好了。很不幸的是xfire現(xiàn)在變成了cxf,指望官方在新的xfire版本中改正這個(gè)bug是沒(méi)戲了,大家還是自己改改用吧。

    posted @ 2010-02-24 09:12 月掛夜中央 閱讀(3747) | 評(píng)論 (2)編輯 收藏

    oracle中in,not in和exists,not exists之間的區(qū)別

             一直聽(tīng)到的都是說(shuō)盡量用exists不要用in,因?yàn)閑xists只判斷存在而in需要對(duì)比值,所以exists比較快,但看了看網(wǎng)上的一些東西才發(fā)現(xiàn)根本不是這么回事。
    下面這段是抄的
    Select * from T1 where x in ( select y from T2 )
    執(zhí)行的過(guò)程相當(dāng)于:
    select *
      from t1, ( select distinct y from t2 ) t2
     where t1.x = t2.y;

    select * from t1 where exists ( select null from t2 where y = x )
    執(zhí)行的過(guò)程相當(dāng)于:
    for x in ( select * from t1 )
       loop
          if ( exists ( select null from t2 where y = x.x )
          then
             OUTPUT THE RECORD
          end if
    end loop

    從我的角度來(lái)說(shuō),in的方式比較直觀,exists則有些繞,而且in可以用于各種子查詢,而exists好像只用于關(guān)聯(lián)子查詢(其他子查詢當(dāng)然也可以用,可惜沒(méi)意義)。
    由于exists是用loop的方式,所以,循環(huán)的次數(shù)對(duì)于exists影響最大,所以,外表要記錄數(shù)少,內(nèi)表就無(wú)所謂了,而in用的是hash join,所以內(nèi)表如果小,整個(gè)查詢的范圍都會(huì)很小,如果內(nèi)表很大,外表如果也很大就很慢了,這時(shí)候exists才真正的會(huì)快過(guò)in的方式。
             下面這段還是抄的
    not in 和not exists
    如果查詢語(yǔ)句使用了not in 那么內(nèi)外表都進(jìn)行全表掃描,沒(méi)有用到索引;
    而not extsts 的子查詢依然能用到表上的索引。
    所以無(wú)論那個(gè)表大,用not exists都比not in要快。
              也就是說(shuō),in和exists需要具體情況具體分析,not in和not exists就不用分析了,盡量用not exists就好了。

    posted @ 2009-01-07 15:03 月掛夜中央 閱讀(6271) | 評(píng)論 (2)編輯 收藏

    如何查看sql的執(zhí)行計(jì)劃

    在pl/sql developer中,直接寫(xiě)條sql,按F5,就可以調(diào)出執(zhí)行計(jì)劃,但在只有sql plus的情況下,只能用下面這個(gè)語(yǔ)句了,
    explain plan for select ....
    然后再來(lái)一句
    select * from table(dbms_xplan.display());
    就會(huì)出現(xiàn)一個(gè)類似下面的信息
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------

    ----------------------------------------------------------------------------
    | Id  | Operation                    |  Name       | Rows  | Bytes | Cost  |
    ----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |             |       |       |       |
    |   1 |  NESTED LOOPS                |             |       |       |       |
    |   2 |   TABLE ACCESS FULL          | AC01        |       |       |       |
    |   3 |   TABLE ACCESS BY INDEX ROWID| AB01        |       |       |       |
    |   4 |    INDEX UNIQUE SCAN         | PK_AB01     |       |       |       |
    ----------------------------------------------------------------------------


    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Note: rule based optimization, PLAN_TABLE' is old version

    就能看到執(zhí)行計(jì)劃了。

    posted @ 2009-01-07 12:00 月掛夜中央 閱讀(1291) | 評(píng)論 (0)編輯 收藏

    根據(jù)條件動(dòng)態(tài)定義游標(biāo)

    在oracle的函數(shù)或過(guò)程中,有時(shí)候需要根據(jù)傳進(jìn)來(lái)的參數(shù)或者別的什么原因動(dòng)態(tài)定義游標(biāo),那么該怎么定義呢,方法如下:
    首先,定義游標(biāo)變量:
    type   cur   is   ref   cursor
    cv_name cur;
    然后,動(dòng)態(tài)定義游標(biāo):
    If length(v_1)>0 Then 
          
    Open cv_name For 'select column1 from table1 where column1 = '||v_1;      
        
    Else 
          
    Open cv_name For 'select column1 from table1';      
        
    End If;
    后面的就按游標(biāo)的正常使用就好了。

    posted @ 2008-07-08 14:46 月掛夜中央 閱讀(485) | 評(píng)論 (0)編輯 收藏

    關(guān)于oracle中的列使用別名后在sql中的操作

        在oracle中如果列在sql中操作,是很正常的事,比如:
        select col1,col2,col1+col2 from table1;
        但如果使用了別名,情況就不同了:
        select col1 a,col2 b,a+b from table1;
        會(huì)報(bào)以下的錯(cuò)誤:
        ORA-00904: "B": invalid identifier
        怎么解決呢,就是套一個(gè)select在外面:
        select a,b,a+b from (select col1 a,col2 b from table1);
        這樣就沒(méi)有問(wèn)題了。

    posted @ 2008-03-20 10:47 月掛夜中央 閱讀(1576) | 評(píng)論 (1)編輯 收藏

    關(guān)于oracle的dbms_output的兩個(gè)小問(wèn)題

    1、如果dbms_output.put_line的內(nèi)容不能顯示,需要在命令行中先敲入set serveroutput on;只要敲一遍就好,之后dbms_output.put_line的內(nèi)容就能顯示出來(lái)了;
    2、dbms_output.put_line每行只能顯示255個(gè)字符,超過(guò)了就會(huì)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容如下
          ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line
    解決這個(gè)問(wèn)題的方法如下:

    declare 
      v_result 
    Varchar2(1000);--這是需要打印出結(jié)果的字符串
      v_pos Number := 1;--用來(lái)記錄v_result每行開(kāi)始字符的位置

    WHILE v_pos<= LENGTH(v_result) LOOP
              DBMS_OUTPUT.PUT_LINE(SUBSTR(v_result, v_pos, 
    200));
              v_pos:
    = v_pos+ 200;
          
    END LOOP;
    這樣就能打印超過(guò)255長(zhǎng)度的字符串,超過(guò)200長(zhǎng)度的自動(dòng)換行打印出來(lái)

    posted @ 2008-02-19 11:37 月掛夜中央 閱讀(41622) | 評(píng)論 (1)編輯 收藏

    主站蜘蛛池模板: 亚洲日本在线观看| 老司机免费午夜精品视频| 亚洲日韩一中文字暮| 免费A级毛片av无码| 亚洲中文无码永久免| av在线亚洲欧洲日产一区二区| 国产99视频精品免费专区| 亚洲一区二区三区高清不卡| 亚洲人成色7777在线观看不卡 | 水蜜桃视频在线观看免费播放高清 | 国产成人精品日本亚洲11| 大胆亚洲人体视频| 青青免费在线视频| 久久久久亚洲AV无码专区首JN | 亚洲婷婷第一狠人综合精品| 亚洲 国产 图片| 国产92成人精品视频免费| 免费人成在线观看播放a| 亚洲日本在线免费观看| 爱情岛论坛网亚洲品质自拍| 日韩毛片免费无码无毒视频观看| 色婷婷六月亚洲婷婷丁香| 50岁老女人的毛片免费观看| 亚洲人成网站日本片| 免费黄色app网站| 亚洲精品伦理熟女国产一区二区 | 亚洲色最新高清av网站| 亚洲AV无码成人精品区在线观看| 今天免费中文字幕视频| 亚洲日本在线看片| 久久亚洲国产精品123区| 精品免费久久久久久成人影院| 久久久久成人片免费观看蜜芽| 亚洲成a人片在线观| 国精无码欧精品亚洲一区| 国产伦精品一区二区三区免费下载| 免费观看国产网址你懂的| 成人性生交大片免费看中文| 日韩免费码中文在线观看| 亚洲AV无码国产精品永久一区| 亚洲精品国产福利在线观看|