




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Domino連接Oracle解決方案前言本文只簡(jiǎn)單介紹了Domino與Oracle交互的基本方法,沒有設(shè)計(jì)到復(fù)雜的技術(shù)。文中使用了連接池,在本文中并沒有具體介紹連接池的設(shè)計(jì)方案,在下一篇文章中將會(huì)就具體連接池設(shè)計(jì)方案作個(gè)說明!本文只做技術(shù)探討之用,對(duì)文中的錯(cuò)誤歡迎指正。應(yīng)用背景在Domino中開發(fā)應(yīng)用程序經(jīng)常要存取一些關(guān)系數(shù)據(jù)庫中的數(shù)據(jù),在以前的Domino系統(tǒng)中除了使用昂貴的LEI,再有就是ODBC了(誰還用過其他的工具?)。但是就像社會(huì)在不斷進(jìn)步一樣,Domino也在不斷進(jìn)步。在IBM推出Domino6.0后,一切似乎都在改變!IBM似乎意識(shí)到了Domino與其他系統(tǒng)交互數(shù)據(jù)的重要性,在Domino6.0中增加了DCR,DECS,當(dāng)然LEI還是在跟進(jìn)。雖然Domino6.0的數(shù)據(jù)整合功能更加強(qiáng)大了,但有一點(diǎn),都是通過配置來實(shí)現(xiàn)與其他數(shù)據(jù)庫的交互。配置的好處就是,點(diǎn)幾下鼠標(biāo),建幾個(gè)文檔一個(gè)應(yīng)用就OK了,根本不需要復(fù)雜的編程,繁瑣的測(cè)試。缺陷就是不夠靈活,往往這些配置類的工具不能滿足我們的需要,或者這些工具本身有缺陷,造成我們需要過多的人工維護(hù),比如DECS。當(dāng)然,我們的需求不同,要求就不一樣,在我做的項(xiàng)目里DECS和lEI并不能滿足我的要求,DCR只能與DB2關(guān)聯(lián),不是我需要的。因此我的這篇文章里所講的方法并不一定適合您。好了,繼續(xù)。既然這些工具不能為我所用,那我們就想辦法通過其他途徑達(dá)到我們目地。幸好在Domino6以后對(duì)Java的支持力度增強(qiáng)了,可實(shí)現(xiàn)的功能增多了,給我們選擇的方法也多了。我就想一個(gè)問題,以前我做項(xiàng)目需要存取其他數(shù)據(jù)庫中的數(shù)據(jù),只能利用Windows平臺(tái)的ODBC驅(qū)動(dòng)。這么做的代價(jià)就是只能在Windows平臺(tái)上部署應(yīng)用,而不能用類Unix系統(tǒng),這就好像被人束縛了手腳一樣。我的要求是能跨平臺(tái),這么一來就只有一個(gè)選擇了—JDBC。這并不奇怪,當(dāng)今企業(yè)應(yīng)用中只有JDBC和ODBC兩種跨數(shù)據(jù)庫連接技術(shù),非彼即此,倒也沒什么可選的,不過在跨平臺(tái)這一項(xiàng)上,只有JDBC才能勝任。那么怎么才能讓Domino使用JDBC驅(qū)動(dòng)呢,其實(shí)也很簡(jiǎn)單。大家跟著我一步一步去做,一樣能辦到。以下開始切入正題。二.實(shí)際操作1.準(zhǔn)備開發(fā)環(huán)境現(xiàn)說一下開發(fā)環(huán)境:Domino平臺(tái):Domino6.5.5操作系統(tǒng):AIX5.3數(shù)據(jù)庫:Oracle開發(fā)工具:LotusDesigner+Eclipse大家也可以在自己的機(jī)器上試驗(yàn)Domino6.5.5+WinXp+MySQL的組合,完全可以實(shí)現(xiàn)。準(zhǔn)備Oracle的JDBC驅(qū)動(dòng)classes12.jar,將Jar包拷貝到Domino程序目錄下的jvm/lib/ext目錄下,然后重啟Domino服務(wù)器。好了在你的程序中可以使用JDBC驅(qū)動(dòng)了,很簡(jiǎn)單吧!2.新建Domino設(shè)計(jì)元素現(xiàn)在我開始實(shí)際的操作。新建一個(gè)數(shù)據(jù)庫jdbctest.nsf,然后在新建一個(gè)表單frmjdbctest,在表單中新建幾個(gè)字段,和兩個(gè)按鈕。如圖下圖是在IE瀏覽器中的樣式。3.在Oracle中新建表新建jdbctest表,包含字段fld_name,fld_general,fld_birthdayyear,fld_birthdaymonth,fld_birthdayday4.編寫程序編寫兩個(gè)代理agtDominoToOracle(附件一)和agtOracleToDomino(附件二)按鈕“存數(shù)據(jù)”觸發(fā)代理agtDominoToOracle。按鈕“取數(shù)據(jù)”觸發(fā)代理agtOracleToDomino。5.運(yùn)行程序先在表單填寫數(shù)據(jù),然后點(diǎn)擊“存數(shù)據(jù)”按鈕。然后點(diǎn)擊“取數(shù)據(jù)”按鈕現(xiàn)實(shí)存在Oracle中的數(shù)據(jù)。這是通過pl/SQL取的數(shù)據(jù),如下圖在Domino中輸入的數(shù)據(jù)已經(jīng)存進(jìn)Oracle中,而Domino中沒有任何數(shù)據(jù)保存。下圖是點(diǎn)擊“取數(shù)據(jù)”按鈕,得到的Oracle中的數(shù)據(jù)小結(jié)通過以上步驟大家應(yīng)該可以看到Domino與Oracle甚至是其他數(shù)據(jù)庫的交互其實(shí)很簡(jiǎn)單,這并不是什么高深的技術(shù),本文的目的也是拋磚引玉。希望大家都貢獻(xiàn)出自己的智慧,讓我們共同努力,Domino的明天會(huì)更好!附件一:代理agtDominoToOracle源程序importlotus.domino.*;importjava.sql.*;importcom.sinosoft.dao.PoolManager;publicclassagtDominoToOracleextendsAgentBase{ publicvoidNotesMain(){ Sessionsession=null; AgentContextagentContext=null; DocumentdocContext=null; StringBufferstrSQL=null; Stringstrname=null; Stringstrgeneral=null; Stringstrbir_year=null; Stringstrbir_month=null; Stringstrbir_day=null; Connectionconn=null; Statementstmt=null; intiUpdate=0; try{ session=getSession(); agentContext=session.getAgentContext(); docContext=agentContext.getDocumentContext(); //下面這段程序,大家可能不太明白了,這是取連接池 PoolManagerpm=PoolManager.getInstance(); conn=pm.getConnection("platform"); //下面這段是采取直連方式訪問Oracle /* Class.forName(strDbDriver); conn=DriverManager.getConnection(strDbURL,strUser,strPasswd); */ if(conn!=null){ stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);// strname=docContext.getItemValueString("fld_name"); strgeneral=docContext.getItemValueString("fld_general"); strbir_year=docContext.getItemValueString("fld_birthdayyear"); strbir_month=docContext.getItemValueString("fld_birthdaymonth"); strbir_day=docContext.getItemValueString("fld_birthdayday"); strSQL=newStringBuffer(); strSQL.append("INSERTINTOJDBCTEST(FLD_NAME,FLD_GENERAL,FLD_BIRTHDAYYEAR,FLD_BIRTHDAYMONTH,FLD_BIRTHDAYDAY)"); strSQL.append("VALUES('"+strname+"',"); strSQL.append("'"+strgeneral+"',"); strSQL.append("'"+strbir_year+"',"); strSQL.append("'"+strbir_month+"',"); strSQL.append("'"+strbir_day+"')"); iUpdate=stmt.executeUpdate(strSQL.toString()); } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(docContext!=null){ docContext.recycle(); } if(agentContext!=null){ agentContext.recycle(); } if(session!=null){ session.recycle(); } if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } }catch(Exceptione){ } } }}附件二:代理agtOracleToDomino源程序importlotus.domino.*;importjava.sql.*;importcom.sinosoft.dao.PoolManager;publicclassagtOracleToDominoextendsAgentBase{ publicvoidNotesMain(){ Sessionsession=null; AgentContextagentContext=null; DocumentdocContext=null; StringstrSQL=null; Stringstrname=null; Stringstrgeneral=null; Stringstrbir_year=null; Stringstrbir_month=null; Stringstrbir_day=null; StringBufferstrHtml=null; Connectionconn=null; Statementstmt=null; ResultSetrs=null; try{ session=getSession(); agentContext=session.getAgentContext(); docContext=agentContext.getDocumentContext(); System.out.println("run"); //下面這段程序,大家可能不太明白了,這是取連接池 PoolManagerpm=PoolManager.getInstance(); conn=pm.getConnection("platform"); //下面這段是采取直連方式訪問Oracle /* Class.forName(strDbDriver); conn=DriverManager.getConnection(strDbURL,strUser,strPasswd); */ if(conn!=null){ stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); strSQL="SELECT*FROMJDBCTEST"; rs=stmt.executeQuery(strSQL); strHtml=newStringBuffer(); strHtml.append("[<table>"); strHtml.append("<tr><td>姓名</td>"); strHtml.append("<td>性別</td>"); strHtml.append("<td>生日</td></tr>"); while(rs.next()){ strname=rs.getString("fld_name"); strgeneral=rs.getString("fld_general"); strbir_year=rs.getString("fld_birthdayyear"); strbir_month=rs.getString("fld_birthdaymonth"); strbir_day=rs.getString("fld_birthdayday"); strHtml.append("<tr><td>"+strname+"</td>"); strHtml.append("<td>"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑勞務(wù)清包合同
- 園林綠化工程施工合同
- 展廳裝修施工合同協(xié)議書
- 中介房屋買賣合同大全年
- 醫(yī)療健康領(lǐng)域醫(yī)療資源分布統(tǒng)計(jì)表
- 導(dǎo)購(gòu)員聘用合同協(xié)議書
- 2025年潮州貨運(yùn)上崗證模擬考試0題
- 2025年部編版小學(xué)三年級(jí)下冊(cè)課外閱讀專項(xiàng)復(fù)習(xí)題(有答案)
- ic芯片購(gòu)銷合同范本
- 制動(dòng)氣室市場(chǎng)分析及競(jìng)爭(zhēng)策略分析報(bào)告
- 一年級(jí)美術(shù)課后輔導(dǎo)方案-1
- 新法律援助基礎(chǔ)知識(shí)講座
- 《鍛造安全生產(chǎn)》課件
- 小學(xué)數(shù)學(xué)1-6年級(jí)(含奧數(shù))找規(guī)律專項(xiàng)及練習(xí)題附詳細(xì)答案
- 《同濟(jì)大學(xué)簡(jiǎn)介》課件
- 《建筑攝影5構(gòu)》課件
- 機(jī)電安裝工程質(zhì)量控制
- 愛自己是終身浪漫的開始 心理課件
- 新房房屋買賣合同
- 地鐵出入口雨棚施工工藝
- 人工智能引論智慧樹知到課后章節(jié)答案2023年下浙江大學(xué)
評(píng)論
0/150
提交評(píng)論