domino連接oracle解決方案---jdbc

原文地址:domino連接oracle解決方案-- 原文作者:zwm136200

前言

本文只簡單介紹了Domino與Oracle交互的基本方法,沒有設計到複雜的技術。具體複雜的應用還請讀者參考其他文章。文中使用了連接池,在本文中並沒有具體介紹連接池的設計方案,在下一篇文章中將會就具體連接池設計方案作個說明!本文只做技術探討之用,對文中的錯誤歡迎指正。

應用背景

在Domino中開發應用程序經常要存取一些關係數據庫中的數據,在以前的Domino系統中除了使用昂貴的LEI,再有就是ODBC了(誰還用過其他的工具?)。但是就像社會在不斷進步一樣,Domino也在不斷進步。在IBM推出Domino6.0後,一切似乎都在改變!IBM似乎意識到了Domino與其他系統交互數據的重要性,在Domino6.0中增加了DCR,DECS,當然LEI還是在跟進。雖然Domino6.0的數據整合功能更加強大了,但有一點,都是通過配置來實現與其他數據庫的交互。配置的好處就是,點幾下鼠標,建幾個文檔一個應用就OK了,根本不需要複雜的編程,繁瑣的測試。缺陷就是不夠靈活,往往這些配置類的工具不能滿足我們的需要,或者這些工具本身有缺陷,造成我們需要過多的人工維護,比如DECS。當然,我們的需求不同,要求就不一樣,在我做的項目裏DECS和lEI並不能滿足我的要求,DCR只能與DB2關聯,不是我需要的。因此我的這篇文章裏所講的方法並不一定適合您。好了,繼續。

既然這些工具不能爲我所用,那我們就想辦法通過其他途徑達到我們目地。幸好在Domino6以後對Java的支持力度增強了,可實現的功能增多了,給我們選擇的方法也多了。

我就想一個問題,以前我做項目需要存取其他數據庫中的數據,只能利用Windows平臺的ODBC驅動。這麼做的代價就是只能在Windows平臺上部署應用,而不能用類Unix系統,這就好像被人束縛了手腳一樣。我的要求是能跨平臺,這麼一來就只有一個選擇了—JDBC。

這並不奇怪,當今企業應用中只有JDBC 和ODBC兩種跨數據庫連接技術,非彼即此,倒也沒什麼可選的,不過在跨平臺這一項上,只有JDBC才能勝任。那麼怎麼才能讓Domino使用JDBC驅動那,其實也很簡單。大家跟着我一步一步去做,一樣能辦到。以下開始切入正題。

二.實際操作

1.準備開發環境

先說一下開發環境:

Domino平臺:Domino6.5.5

操作系統:AIX5.3

數據庫:Oracle 9.2.0.8

開發工具:LotusDesigner + Eclipse

大家也可以在自己的機器上試驗Domino6.5.5+ WinXp + MySQL的組合,完全可以實現。

準備Oracle的JDBC驅動classes12.jar,講Jar包拷貝到Domino程序目錄下的jvm/lib/ext目錄下,然後重啓Domino服務器。好了在你的程序中可以使用JDBC驅動了,很簡單吧!

2.新建Domino設計元素

現在我開始實際的操作。新建一個數據庫jdbctest.nsf,然後在新建一個表單frmjdbctest

,在表單中新建幾個字段,和兩個按鈕。如圖


下圖是在IE瀏覽器中的樣式。


3.在Oracle中新建表

如圖。新建jdbctest表,包含字段fld_name,fld_general,fld_birthdayyear, fld_birthdaymonth, fld_birthdayday


4.編寫程序

編寫兩個代理agtDominoToOracle(附件一) 和agtOracleToDomino(附件二)

按鈕“存數據”觸發代理agtDominoToOracle。

按鈕“取數據”觸發代理agtOracleToDomino。

5.運行程序

先在表單填寫數據,然後點擊“存數據”按鈕。

然後點擊“取數據”按鈕現實存在Oracle中的數據。

這是通過pl/SQL取的數據,如下圖


在Domino中輸入的數據已經存進Oracle中,而Domino中沒有任何數據保存。


下圖是點擊“取數據”按鈕,得到的Oracle中的數據


二.

小結

通過以上步驟大家應該可以看到Domino與Oracle 甚至是其他數據庫的交互其實很簡單,這並不是什麼高深的技術,本文的目的也是拋磚引玉。希望大家都貢獻出自己的智慧,讓我們共同努力,Domino的明天會更好!

附件:Domino連接Oracle

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

agtDominoTooracle.java

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××


import lotus.domino.*;

import java.sql.*;

import com.sinosoft.dao.PoolManager;




public class agtDominoToOracle extends AgentBase {




	public void NotesMain() {

		Session session = null;

		AgentContext agentContext = null;

		Document docContext = null;



		StringBuffer strSQL = null;

		String strname = null;

		String strgeneral = null;

		String strbir_year = null;

		String strbir_month = null;

		String strbir_day = null;

		Connection conn = null;

		Statement stmt = null;

		int iUpdate = 0; 



		try {

			session = getSession();

			agentContext = session.getAgentContext();

			docContext = agentContext.getDocumentContext();



			//下面這段程序,大家可能不太明白了,這是取連接池 

			PoolManager pm = 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 = new StringBuffer();

				strSQL.append("INSERT INTO JDBCTEST(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(Exception e) {

			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(Exception e){



			}

		}

	}

}

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××



agtOracleToDomino.java

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××



import lotus.domino.*;

import java.sql.*;

import com.sinosoft.dao.PoolManager;




public class agtOracleToDomino extends AgentBase {




	public void NotesMain() {

		Session session = null;

		AgentContext agentContext = null;

		Document docContext = null;



		String strSQL = null;

		String strname = null;

		String strgeneral = null;

		String strbir_year = null;

		String strbir_month = null;

		String strbir_day = null;

		StringBuffer strHtml = null;

		Connection conn = null;

		Statement stmt = null;

		ResultSet rs = null;



		try {

			session = getSession();

			agentContext = session.getAgentContext();

			docContext = agentContext.getDocumentContext();

			System.out.println("run");

			//下面這段程序,大家可能不太明白了,這是取連接池 

			PoolManager pm = 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 * FROM JDBCTEST";

				rs = stmt.executeQuery(strSQL);

				strHtml = new StringBuffer();

				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>" + strgeneral + "</td>");

					strHtml.append("<td>" + strbir_year + "年" +strbir_month + "月" + strbir_day +  "日" +"</td>");

				}

				strHtml.append("</table>]");

				docContext.replaceItemValue("disOracledata", strHtml.toString()).recycle();

			}




		} catch(Exception e) {

			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(Exception e){



			}

		}

	}

}


發佈了3 篇原創文章 · 獲贊 2 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章