會飛的魚

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          J2EE應(yīng)用中與Oracle數(shù)據(jù)庫的連接

          J2EE應(yīng)用程序開發(fā)中,應(yīng)用程序與數(shù)據(jù)庫連接的建立是我們經(jīng)常遇到的問題之一。在這里我主要談?wù)勗诒镜貞?yīng)用程序中通過OCI方式、thin方式和JdbcOdbc橋方式連接Oracle數(shù)據(jù)庫,在iPlanet Application Server 6.5Sun Java System Application Server 7中對Oracle數(shù)據(jù)庫連接池的配置以及應(yīng)用中如何從連接池中獲得連接。

          一、本地通過JDBC獲得Oracle數(shù)據(jù)庫連接

          通過JDBC獲得Oracle數(shù)據(jù)庫連接,有三種方式:OCI方式、thin方式和JdbcOdbc橋方式。OCI方式依賴于本地的動態(tài)鏈接庫,如果在本地安裝了Oracle數(shù)據(jù)庫客戶端可以采用該方式;而thin方式為純java的數(shù)據(jù)庫連接方式;JdbcOdbc橋方式依賴于本地ODBC數(shù)據(jù)庫源的配置,這種方式一般不太被采用。

          1 OCI方式

          先在本地安裝Oracle客戶端,安裝完之后,在安裝的路徑中可以找到…/jdbc/lib/classes12.zip文件,我們在環(huán)境變量classpath中設(shè)置classes12.zip所在的路徑。

          然后通過以下的數(shù)據(jù)庫連接類,在本地通過OCI方式獲得Oracle數(shù)據(jù)庫連接。

          /**

          * 在本地獲得數(shù)據(jù)庫連接

          */

          ?

          package com.j2ee.db;

          ?

          import java.util.*;

          import java.sql.*;

          import javax.sql.*;

          import java.io.*;

          import oracle.jdbc.driver.*;

          import javax.naming.*;???

          ?

          /**

          * 通過 OCI 方式獲得 Oracle 數(shù)據(jù)庫連接

          */

          public class DbConnection

          {

          ? final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";

          ? final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199";

          ?

          ? /**

          ? *

          ? */

          ? public DbConnection()

          ? {

          ? }

          ?

          ? /**

          ? * 獲得 Oracle 數(shù)據(jù)庫連接

          ? */

          ? public java.sql.Connection connectDbByOci()

          ? {?

          ????? ? java.sql.Connection conn=null;?

          ????? ? try

          ????? ? {

          ??????????? ? Class.forName(sDBDriver);

          ??????????? ? conn = DriverManager.getConnection(sConnStr);

          ????? ? }

          ????? ? catch (Exception e)

          ????? ? {

          ????? ????? System.out.println("ERROR:"+e.getMessage());

          ????? ? }

          ????? ? return conn;

          ? }

          }

          在連接字符串 "jdbc:oracle:oci8:sr/sr@ora199" 中,"sr/sr"Oracle用戶的用戶名和口令,"ora199"為數(shù)據(jù)庫服務(wù)名。

          2 thin方式

          先到Oracle技術(shù)網(wǎng)(http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html)下載Oracle JDBC Drivers,同樣地將下載后的zip文件的路徑設(shè)置在環(huán)境變量classpath

          然后通過以下的數(shù)據(jù)庫連接類,在本地通過thin方式獲得Oracle數(shù)據(jù)庫連接。

          /**

          * 在本地獲得數(shù)據(jù)庫連接

          */

          ?

          package com.j2ee.db;

          ?

          import java.util.*;

          import java.sql.*;

          import javax.sql.*;

          import java.io.*;

          import oracle.jdbc.driver.*;

          import javax.naming.*;???

          ?

          /**

          * 通過 thin 方式獲得 Oracle 數(shù)據(jù)庫連接

          */

          public class DbConnection

          {

          ????? private???? String sConnStr = "";

          ?

          ????? /**

          ????? * 缺省構(gòu)造器

          ????? */

          ????? public DbConnection()

          ????? {

          ??????????? sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199";

          ????? }

          ?????

          ????? /**

          ????? * @param ip,serviceName

          ????? */

          ????? public DbConnection(String ip,String serviceName)

          ????? {

          ??????????? sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName;

          ????? }

          ?

          ????? /**

          ????? * 通過 thin 方式獲得 Oracle 數(shù)據(jù)庫的連接 .

          ????? */

          ????? public java.sql.Connection connectDbByThin()

          ????? {???? ?

          ??????????? java.sql.Connection conn=null;

          ??????????? try

          ??????????? {

          ????????????????? Class.forName(sDBDriver);

          ????????????????? conn = DriverManager.getConnection(sConnStr,"sr","sr");

          ????? ????? }

          ??????????? catch (Exception e)

          ??????????? {

          ????????????????? System.out.println("ERROR:"+e.getMessage());

          ??????????? }

          ??????????? return conn;

          ????? }

          ?

          ????? /**

          ????? * 通過 thin 方式獲得 Oracle 數(shù)據(jù)庫的連接 .

          ????? * @param userId,password

          ????? */

          ????? public java.sql.Connection connectByJdbc(String userId,String password)

          ????? {???? ?

          ??????????? java.sql.Connection conn=null;

          ??????????? try

          ??????????? {

          ????????????????? Class.forName(sDBDriver);

          ????????????????? conn = DriverManager.getConnection(sConnStr,userId,password);

          ??????????? }

          ??????????? catch (Exception e)

          ??????????? {

          ????????????????? System.out.println("ERROR:"+e.getMessage());

          ??????????? }

          ??????????? return conn;

          ????? }

          }

          這種方式運用起來比較靈活,簡單,具有較強的移植性和適用性。只要注意連接字符串"jdbc:oracle:thin:@10.1.4.199:1521:ora199"中具體參數(shù)的設(shè)置即可。

          3 JdbcOdbc橋方式

          先通過管理工具中的數(shù)據(jù)源來添加本地對Oracle數(shù)據(jù)庫的連接,然后通過以下的數(shù)據(jù)庫連接類,在本地通過JdbcOdbc橋方式獲得Oracle數(shù)據(jù)庫連接。

          /**

          * 在本地獲得數(shù)據(jù)庫連接

          */

          ?

          package com.j2ee.db;

          ?

          import java.util.*;

          import java.sql.*;

          import javax.sql.*;

          import java.io.*;

          import oracle.jdbc.driver.*;

          import javax.naming.*;???

          ?

          /**

          * 通過 JdbcOdbc 橋方式獲得 Oracle 數(shù)據(jù)庫連接

          */

          public class DbConnection

          {

          ? /**

          ? *

          ? */

          ? public DbConnection()

          ? {

          ? }

          ?

          ? /**

          ? * 獲得 Oracle 數(shù)據(jù)庫連接

          ? */

          ? public java.sql.Connection connectDbByJdbcOdbcBridge()

          ? {?

          ????? ? java.sql.Connection conn=null;?

          ????? ? try

          ????? ? {

          ??????????? ? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          ??????????? ? con=DriverManager.getConnection("jdbc:odbc:ora199","sr","sr");

          ????? ? }

          ????? ? catch (Exception e)

          ????? ? {

          ????? ????? System.out.println("ERROR:"+e.getMessage());

          ????? ? }

          ????? ? return conn;

          ? }

          }

          getConnection方法中第一個參數(shù)"jdbc:odbc:ora199" 中的"ora199"為本地ODBC數(shù)據(jù)源的數(shù)據(jù)源名稱,第二個參數(shù)和第三個參數(shù)分別為Oracle的用戶名和口令。

          二、通過連接池獲得Oracle數(shù)據(jù)庫連接

          這部分主要講述在iPlanet Application Server 6.5Sun Java System Application Server 7Oracle數(shù)據(jù)庫連接池的配置,以及在應(yīng)用中如何通過連接池獲得數(shù)據(jù)庫的連接。

          1 iPlanet Application Server 6.5連接池的配置

          先打開iPlanet Application Server 6.5的管理控制臺,選中"database"面板,再選擇"External JDBC Drivers"選項后,點擊"Add…"按鈕,在彈出的對話框中,添加一個名為"ora-type4"JDBC Driver

          ?

          Driver Classpath :該參數(shù)填寫classes12.zip文件的物理路徑。

          然后在"External JDBC DataSources"中選擇"Add…",在彈出的對話框中添加一個JNDI名稱為"credit2"的數(shù)據(jù)源。

          DriverType :選擇剛添加好的"ora-type4"

          Datasource ora199,為Oracle數(shù)據(jù)庫服務(wù)名;

          Connection Pool Parameters :圖中顯示的是缺省設(shè)置,可以根據(jù)自己環(huán)境情況來更改這些設(shè)置。

          保存完設(shè)置后,在"DataSource Selection Box"中,選擇剛添加的"credit2"數(shù)據(jù)源,再選擇"Vendor Specific Properties"按鈕。在對話中添加一個URL屬性。

          至此,iPlanet Application Server 6.5中的數(shù)據(jù)庫連接池配置完畢,重起服務(wù)使之生效。

          2 Sun Java System Application Server 7連接池的配置

          在配置之前將classes12.zip文件置于…/server1/lib目錄下。通過瀏覽器的4848端口打開Sun Java System Application Server 7的管理界面,選擇"server1"->"JDBC"-> "Connection Pools"下的"New…"

          添加一個名稱為"MyConnectionPool"Oracle數(shù)據(jù)庫連接池。"Next"下一步。

          "General"中填寫"Datasource Classname"

          "Properties"中將不需要的屬性刪除,同時添加"URL"屬性。

          "dataSourceName" 中填寫Oracle數(shù)據(jù)庫服務(wù)名。

          以下連接池的缺省設(shè)置,可以根據(jù)自己環(huán)境的情況作相應(yīng)的調(diào)整。

          選擇"Finish"完成連接池的設(shè)置。

          下一步為"MyConnectionPool"連接池創(chuàng)建一個JNDI,以便應(yīng)用程序能夠通過該名稱獲得連接池中的連接。 "server1"->"JDBC"-> "JDBC Resources"下的"New…"

          至此,Sun Java System Application Server7中的數(shù)據(jù)庫連接池配置完畢,重起服務(wù)使之生效。

          3 、通過連接池獲得連接

          以上在iPlanet Application Server 6.5Sun Java System Application Server7中配置的連接池都可以通過以下的數(shù)據(jù)庫連接類,從連接池中獲得Oracle數(shù)據(jù)庫連接。

          /**

          * 從連接池中獲得數(shù)據(jù)庫連接

          */

          ?

          package com.j2ee.db;

          ?

          import java.util.*;

          import java.sql.*;

          import javax.sql.*;

          import java.io.*;

          import oracle.jdbc.driver.*;

          import javax.naming.*;???

          ?

          /**

          * 通過連接池方式獲得 Oracle 數(shù)據(jù)庫連接

          */

          public class DbConnection

          {

          ? /**

          ? *

          ? */

          ? public DbConnection()

          ? {

          ? }

          ?

          ? /**

          ? * 獲得 Oracle 數(shù)據(jù)庫連接

          ? */

          ? public java.sql.Connection connectDbByConnectionPool()

          ? {?

          ????? ? java.sql.Connection conn=null;?

          ????? ? try

          ????? ? {

          ??????????? ????? Context ctx = new InitialContext();

          ????????? DataSource ds = (DataSource)ctx.lookup("jdbc/credit2");

          ??????????? ????? conn=ds.getConnection();

          ????? ? }

          ????? ? catch (Exception e)

          ????? ? {

          ????? ????? System.out.println("ERROR:"+e.getMessage());

          ????? ? }

          ????? ? return conn;

          ? }

          }

          4 、使用連接池的優(yōu)點

          使用連接池的優(yōu)點主要體現(xiàn)在兩個方面:

          1. 對數(shù)據(jù)庫的連接統(tǒng)一進行配置、管理、監(jiān)控,以及對數(shù)據(jù)庫連接池的參數(shù)進行優(yōu)化調(diào)整,同時對應(yīng)用中沒有關(guān)閉或其他原因造成沒有關(guān)閉的數(shù)據(jù)庫連接由連接池統(tǒng)一進行管理。
          2. 便于應(yīng)用的移植和后端數(shù)據(jù)庫的切換,因為在應(yīng)用中通過統(tǒng)一的JNDI獲得數(shù)據(jù)庫的連接,而具體連接的是哪一臺機器上的數(shù)據(jù)庫與應(yīng)用無關(guān)。

          posted on 2006-07-31 12:59 彭小波 閱讀(113) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汨罗市| 绥宁县| 青阳县| 五莲县| 桑日县| 漳州市| 西乌| 望奎县| 广州市| 开阳县| 毕节市| 托克逊县| 梅河口市| 青岛市| 莱芜市| 临清市| 桦南县| 牙克石市| 黔南| 东光县| 澜沧| 十堰市| 北宁市| 子长县| 蚌埠市| 江油市| 濉溪县| 广南县| 新密市| 漾濞| 威海市| 宁南县| 都安| 安平县| 汝阳县| 公安县| 鹤山市| 高州市| 丹棱县| 遂溪县| 汨罗市|