J2EE應用中與Oracle資料庫的串連
最後更新:2017-02-28
來源:互聯網
上載者:User
j2ee|oracle|資料|資料庫 在J2EE應用程式開發中,應用程式與資料庫連接的建立是我們經常遇到的問題之一。在這裡我主要談談在本地應用程式中通過OCI方式、thin方式和JdbcOdbc橋方式串連Oracle資料庫,在iPlanet Application Server 6.5和Sun Java System Application Server 7中對Oracle資料庫連接池的配置以及應用中如何從串連池中獲得串連。
一、本地通過JDBC獲得Oracle資料庫連接
通過JDBC獲得Oracle資料庫連接,有三種方式:OCI方式、thin方式和JdbcOdbc橋方式。OCI方式依賴於本地的動態連結程式庫,如果在本地安裝了Oracle資料庫用戶端可以採用該方式;而thin方式為純java的資料庫連接方式;JdbcOdbc橋方式依賴於本地ODBC資料庫源的配置,這種方式一般不太被採用。
1、OCI方式
先在本地安裝Oracle用戶端,安裝完之後,在安裝的路徑中可以找到…/jdbc/lib/classes12.zip檔案,我們在環境變數classpath中設定classes12.zip所在的路徑。
然後通過以下的資料庫連接類,在本地通過OCI方式獲得Oracle資料庫連接。
/**
* 在本地獲得資料庫連接
*/
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資料庫連接
*/
public class DbConnection
{
final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";
final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199";
/**
*
*/
public DbConnection()
{
}
/**
* 獲得Oracle資料庫連接
*/
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"為資料庫服務名。
2、thin方式
先到Oracle技術網(http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html)下載Oracle JDBC Drivers,同樣地將下載後的zip檔案的路徑設定在環境變數classpath。
然後通過以下的資料庫連接類,在本地通過thin方式獲得Oracle資料庫連接。
/**
* 在本地獲得資料庫連接
*/
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資料庫連接
*/
public class DbConnection
{
privateString sConnStr = "";
/**
* 預設構造器
*/
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資料庫的串連.
*/
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資料庫的串連.
* @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"中具體參數的設定即可。
3、JdbcOdbc橋方式
先通過管理工具中的資料來源來添加本地對Oracle資料庫的串連,然後通過以下的資料庫連接類,在本地通過JdbcOdbc橋方式獲得Oracle資料庫連接。
/**
* 在本地獲得資料庫連接
*/
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資料庫連接
*/
public class DbConnection
{
/**
*
*/
public DbConnection()
{
}
/**
* 獲得Oracle資料庫連接
*/
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方法中第一個參數"jdbc:odbc:ora199" 中的"ora199"為本地ODBC資料來源的資料來源名稱,第二個參數和第三個參數分別為Oracle的使用者名稱和口令。
二、通過串連池獲得Oracle資料庫連接
這部分主要講述在iPlanet Application Server 6.5和Sun Java System Application Server 7中Oracle資料庫連接池的配置,以及在應用中如何通過串連池獲得資料庫的串連。
1、iPlanet Application Server 6.5串連池的配置
先開啟iPlanet Application Server 6.5的管理主控台,選中"database"面板,再選擇"External JDBC Drivers"選項後,點擊"Add…"按鈕,在彈出的對話方塊中,添加一個名為"ora-type4"的JDBC Driver。
Driver Classpath:該參數填寫classes12.zip檔案的實體路徑。
然後在"External JDBC DataSources"中選擇"Add…",在彈出的對話方塊中添加一個JNDI名稱為"credit2"的資料來源。
DriverType:選擇剛添加好的"ora-type4";
Datasource:ora199,為Oracle資料庫服務名;
Connection Pool Parameters:圖中顯示的是預設設定,可以根據自己環境情況來更改這些設定。
儲存完設定後,在"DataSource Selection Box"中,選擇剛添加的"credit2"資料來源,再選擇"Vendor Specific Properties"按鈕。在對話中添加一個URL屬性。
至此,iPlanet Application Server 6.5中的資料庫連接池配置完畢,重起服務使之生效。
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資料庫連接池。"Next"下一步。
在"General"中填寫"Datasource Classname"。
在"Properties"中將不需要的屬性刪除,同時添加"URL"屬性。
"dataSourceName"中填寫Oracle資料庫服務名。
以下串連池的預設設定,可以根據自己環境的情況作相應的調整。
選擇"Finish"完成串連池的設定。
下一步為"MyConnectionPool"串連池建立一個JNDI,以便應用程式能夠通過該名稱獲得串連池中的串連。 "server1"->"JDBC"-> "JDBC Resources"下的"New…"
至此,Sun Java System Application Server7中的資料庫連接池配置完畢,重起服務使之生效。
3、通過串連池獲得串連
以上在iPlanet Application Server 6.5和Sun Java System Application Server7中配置的串連池都可以通過以下的資料庫連接類,從串連池中獲得Oracle資料庫連接。
/**
* 從串連池中獲得資料庫連接
*/
package com.j2ee.db;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;
/**
* 通過串連池方式獲得Oracle資料庫連接
*/
public class DbConnection
{
/**
*
*/
public DbConnection()
{
}
/**
* 獲得Oracle資料庫連接
*/
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、使用串連池的優點
使用串連池的優點主要體現在兩個方面:
對資料庫的串連統一進行配置、管理、監控,以及對資料庫連接池的參數進行最佳化調整,同時對應用中沒有關閉或其他原因造成沒有關閉的資料庫連接由串連池統一進行管理。
便於應用的移植和後端資料庫的切換,因為在應用中通過統一的JNDI獲得資料庫的串連,而具體串連的是哪一台機器上的資料庫與應用無關。