青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

OTL建立連接時可能會遇到的一個bug

來源:http://blog.superliufa.com/?q=node/352

  最近因為工作原因,從OCICPP改為用OTL做Oracle開發(fā)。初時挺詫異的,怎么只有.h沒有.cpp?看過才知道原來一個頭文件就全做完了。它是對OCI的一個封裝,可以用stream的方式去操作數(shù)據(jù)庫。用起來還是比較簡便,但是感覺封裝得多了點。雖然OCI那些函數(shù)也挺復(fù)雜的,但至少覺得一切都在自己掌握之中。OTL這么一封裝了之后,有一些實現(xiàn)細(xì)節(jié)就不得而知了,這就導(dǎo)致了今天發(fā)現(xiàn)的一個bug。

  根據(jù)OTL關(guān)于otl_connect的說明,其構(gòu)造函數(shù)之一是可以直接用來連接數(shù)據(jù)庫的。雖然正兒八經(jīng)做這個事情的是rlogon(db_string),但是對構(gòu)造函數(shù)otl_connect(connect_str, ...)的說明是其等于otl_connect(void)再加上一個rlogon(connect_str)。所以,一般就這樣寫了:otl_connect* pdb = new otl_connect("..."); 然后把pdb存在自己的數(shù)據(jù)庫連接池中。如果連接失敗,那么會拋出一個otl_exception異常。
  可是,今天卻遇到意外。連接字符串中,tnsname寫對了,但用戶名/密碼沒對。于是測試的時候發(fā)現(xiàn),多次連接之后,數(shù)據(jù)庫那邊內(nèi)存爆掉了,ORACLE.EXE的線程數(shù)也多到瘋掉。別的客戶端全連接不上了,報ORA-00020錯誤。
  process數(shù)滿,這倒也在情理之中。可是看了看session,發(fā)現(xiàn)會話其實很少。猜測是什么東西沒有釋放掉,不是connect就是cursor。查了一下代碼,發(fā)現(xiàn)沒有什么大問題,connect都是連接池管理,不會無限多下去的。otl_stream也都是在棧中聲明,花括號之后就自動析構(gòu)了,cursor也不應(yīng)該是問題。郁悶中,發(fā)現(xiàn)正常的連接反而不會有泄漏發(fā)生,會泄漏的都是連接錯誤的時候。但是連tnsname都不對反而就不會了,估計是因為OCI那邊根本就無法建立一個連接,也就耗不了資源。這下定位到了,就是這個創(chuàng)建連接的代碼上有問題。

  這段創(chuàng)建連接的代碼是這樣寫的。注意其中捕捉異常的部分:

try
{
  otl_connect
* pdb = NULL;
  pdb 
= new otl_connect("");
}

catch(otl_exception& e)
{
  ……
  
if (NULL != pdb)
    delete pdb;
  pdb 
= NULL;
}

  可以看到,如果連接不成功時沒有生成對象,那么應(yīng)該返回空指針,這樣delete指令也不會發(fā)生。如果有對象生成,那么在異常處理代碼中應(yīng)該已經(jīng)把這個對象給銷毀了,而對象占用的資源應(yīng)該也已經(jīng)釋放了。但事實就是不同,由于OTL在這個構(gòu)造函數(shù)中封裝了實現(xiàn)細(xì)節(jié),而顯然這個實現(xiàn)并不完美,于是有了泄漏。

  采用如下的代碼,便不存在這個問題了:

try
{
  otl_connect
* pdb = NULL;
  pdb 
= new otl_connect();
  pdb
->rlogon("");
}

catch(otl_exception& e)
{
  ……
  
if (NULL != pdb)
    delete pdb;
  pdb 
= NULL;
}

  根據(jù)OTL的說明,這兩種建立連接的方法應(yīng)該沒有區(qū)別。不過現(xiàn)在才有點明白為什么OTL提供的范例代碼都采用后一種方法了。

  追進(jìn)OTL的頭文件中去看,應(yīng)該可以弄明白原委。不過為了完成任務(wù),沒有那么多時間了,這個任務(wù)只好留到下次再說。大致估計了一下,應(yīng)該是因為在new otl_connect(connect_str)的時候就拋了異常,于是代碼跳轉(zhuǎn)到了catch處,pdb根本沒得到對象指針的賦值,這樣新生成的對象就丟了。建議用OTL的各位,在棧中是無所謂啦,但如果要在堆中初始化一個連接,千萬不要圖省事想用構(gòu)造函數(shù)直接一步到位哦!

posted on 2008-06-13 00:09 楊粼波 閱讀(2206) 評論(2)  編輯 收藏 引用

評論

# re: OTL建立連接時可能會遇到的一個bug [未登錄] 2008-06-13 17:24 starofrainnight

代碼有問題!

try
{
  otl_connect* pdb = NULL; // 此 pdb 變量在大括號範(fàn)圍外不存在!
  pdb = new otl_connect("");
}
catch(.....)
{
..... // 這裡對pdb進(jìn)行操作,哪裡來的 pdb 變量?
}

代碼應(yīng)該改為:

otl_connect* pdb = NULL;
try
{
  pdb = new otl_connect("");
}
catch(.....)
{
..... // 這裡對pdb進(jìn)行操作
}

否則,根本不能通過語法校驗!或者博主用的是一個特殊版本的C++編譯器?
  回復(fù)  更多評論   

# re: OTL建立連接時可能會遇到的一個bug 2008-06-18 10:22 superliufa

筆誤,寫博的時候隨手寫的代碼上去。一開始并沒考慮寫try/catch括起來。多謝指出!  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            暖暖成人免费视频| 亚洲国产视频直播| 欧美一区二区性| 久久青青草综合| 91久久黄色| 欧美视频你懂的| 校园春色综合网| 免费人成网站在线观看欧美高清| 亚洲欧洲精品天堂一级| 欧美日韩在线第一页| 亚洲欧美激情四射在线日| 久久五月天婷婷| 亚洲毛片av| 国产日韩欧美精品| 美女免费视频一区| 亚洲色图制服丝袜| 麻豆成人精品| 亚洲性感美女99在线| 国内外成人在线| 欧美精品一区在线| 久久精品99久久香蕉国产色戒| 亚洲大片免费看| 亚洲欧美日韩在线综合| 伊人伊人伊人久久| 国产精品yjizz| 毛片一区二区三区| 亚洲一区二区三区免费视频| 牛牛精品成人免费视频| 亚洲一区二区三区激情| 在线欧美福利| 国产欧美日韩视频| 欧美日韩国产黄| 久久久亚洲人| 午夜精品一区二区三区四区| 91久久久亚洲精品| 久久人人爽爽爽人久久久| 亚洲一区国产| 亚洲精品中文字幕在线观看| 国语对白精品一区二区| 国产精品v欧美精品v日韩| 免费欧美高清视频| 久久se精品一区二区| 亚洲网站在线观看| 亚洲国产欧美一区二区三区同亚洲 | 在线观看亚洲一区| 国产精品午夜春色av| 欧美激情小视频| 久久免费视频网站| 久久爱www久久做| 亚洲一区二区高清| 日韩亚洲不卡在线| 亚洲国产经典视频| 欧美大学生性色视频| 久久激情一区| 欧美一区二区三区四区视频| 亚洲图片欧美午夜| 在线视频欧美日韩精品| 亚洲欧洲午夜| 亚洲精品久久久久久久久| 亚洲成人在线| 18成人免费观看视频| 伊人成人开心激情综合网| 国产亚洲精品久久久| 国产欧美一区二区三区沐欲| 国产精品欧美经典| 亚洲人体影院| 欧美高清视频在线播放| 可以看av的网站久久看| 久久综合电影| 裸体歌舞表演一区二区| 老司机免费视频一区二区三区| 欧美中文在线免费| 欧美一级午夜免费电影| 午夜精品久久久久| 久久9热精品视频| 欧美制服丝袜第一页| 欧美在线亚洲在线| 久久精品国产在热久久| 久久久久久久欧美精品| 久久裸体艺术| 欧美激情精品久久久久久久变态| 欧美成人免费网| 亚洲国产日韩欧美| 亚洲人成网站精品片在线观看 | 欧美日韩精品免费在线观看视频| 欧美jizz19性欧美| 欧美日韩国产色视频| 欧美手机在线| 国产日韩精品在线| 在线观看视频欧美| 亚洲精品视频免费观看| 亚洲视频一二区| 欧美一区二区三区四区夜夜大片| 欧美一区二视频| 美女视频黄a大片欧美| 欧美黄免费看| 日韩午夜电影av| 亚洲专区一区二区三区| 久久久久一区二区三区四区| 欧美大片在线观看一区二区| 欧美视频国产精品| 国产真实乱偷精品视频免| 亚洲欧洲视频| 亚洲欧美日韩专区| 欧美 日韩 国产在线| 亚洲另类自拍| 欧美影院精品一区| 欧美日韩成人网| 国产一区二区三区直播精品电影| 亚洲国产欧美一区二区三区同亚洲 | 亚洲国产欧美日韩精品| 亚洲一级一区| 欧美成人激情视频免费观看| 99re66热这里只有精品3直播| 欧美一级网站| 欧美日本精品| 国模叶桐国产精品一区| 在线一区视频| 欧美大片va欧美在线播放| 一本色道久久综合| 久久久久久久999| 欧美午夜电影一区| 91久久视频| 久久精品五月婷婷| 夜夜爽av福利精品导航| 久久亚洲春色中文字幕| 国产乱人伦精品一区二区 | 老司机67194精品线观看| 国产精品国产三级国产专播精品人 | 亚洲欧美日韩国产成人精品影院 | 国产日韩欧美一区在线| 99这里只有精品| 欧美成人精品| 欧美一区久久| 国产乱理伦片在线观看夜一区 | 欧美激情国产精品| 午夜欧美不卡精品aaaaa| 欧美日韩亚洲综合一区| 亚洲七七久久综合桃花剧情介绍| 久久精品国产一区二区三| 亚洲裸体俱乐部裸体舞表演av| 久久精品女人的天堂av| 国产精品一区二区三区四区五区| 一区二区三区福利| 亚洲欧洲三级电影| 蜜乳av另类精品一区二区| 国产一区二区三区久久久久久久久| 亚洲性夜色噜噜噜7777| 亚洲精品国产精品久久清纯直播| 久久人人爽爽爽人久久久| 国产一区二区三区免费不卡| 欧美一区二区日韩| 亚洲视频在线一区观看| 国产精品成人国产乱一区| 亚洲视频福利| 在线亚洲激情| 国产精品美女久久久久av超清 | 久久中文字幕一区| 精品成人在线| 开心色5月久久精品| 久久成人精品无人区| 国外成人免费视频| 久久综合色一综合色88| 久久精品99久久香蕉国产色戒| 国产日韩欧美制服另类| 久久久久久久久一区二区| 欧美诱惑福利视频| 国产综合亚洲精品一区二| 老巨人导航500精品| 久久久精品性| 亚洲精品欧洲| 亚洲九九精品| 国产精品美女主播| 久久精品视频在线| 久久久精品999| 亚洲韩国精品一区| 亚洲精品视频在线观看免费| 欧美日韩一区二区三区四区在线观看| 亚洲手机在线| 亚洲综合丁香| 在线国产欧美| 亚洲精品久久久久| 国产精品日韩欧美| 久久久久久久久久久久久女国产乱 | 亚洲制服少妇| 欧美亚洲在线视频| 亚洲国产成人91精品| 亚洲破处大片| 国产精品色在线| 美女视频黄a大片欧美| 欧美黄在线观看| 欧美亚洲日本网站| 久久久久久一区二区三区| 日韩亚洲欧美在线观看| 亚洲在线视频网站| 1769国内精品视频在线播放| 亚洲九九精品| 黄色成人免费观看| 亚洲免费成人| 黄网动漫久久久|