在J2EE應用程序開發中,應用程序與數據庫連接的建立是我們經常遇到的問題之一。在這裡我主要談談在本地應用程序中通過OCI方式、thin方式和 JdbcOdbc橋方式連接Oracle數據庫,在iPlanet Application Server 6.5和Sun ONE 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
{
private String 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的用戶名和口令。