开发伊始就想试一试封装数据库访问。
 
前言:
1。开发工具 Myeclipse。
2。数据库 Oracle 10g ,MSSQL2005
3。在Tomcat5.0和MyEclipse 中分别 配置好了Oracle 10g 的JDBC 驱动程序、MSSQL2005的JDBC 驱动程序。
 
 
 
接下来步骤如下:
一.、配置tomcat连接池

<Context path="/test" docBase="test"
    debug="5" reloadable="true" crossContext="true">

  <Logger className="org.apache.catalina.logger.FileLogger"
             prefix="localhost_test_log." suffix=".txt"
             timestamp="true"/>
  <resource name="jdbc/test"    auth="Container"
          type="javax.sql.DataSource">
           </resource>
   < ResourceParams name ="jdbc/test" >
     < parameter >
         < name >factory </name>
         < value >org.apache.commons.dbcp.BasicDataSourceFactory </value>
     </parameter>
     < parameter >
             < name >maxActive </name>
             < value >100 </value>
         </parameter>
         < parameter >
             < name >maxIdle </name>
             < value >30 </value>
         </parameter>
         < parameter >
             < name >maxWait </name>
             < value >10000 </value>
         </parameter>
         < parameter >
             < name >username </name>
             < value >test </value>
         </parameter>
         < parameter >
             < name >password </name>
             < value >123 </value>
         </parameter>
         < parameter >
                 < name >driverClassName </name>
                 < value >oracle.jdbc.driver.OracleDriver </value>
         </parameter>
         < parameter >
             < name >url </name>
             < value >jdbc:oracle:thin:@172.0.0.1:1521:test </value>
       </parameter>
   </ResourceParams>
    
< ! -- connect mssql -- >

   < ResourceParams name ="jdbc/cor" >
     < parameter >
         < name >factory </name>
         < value >org.apache.commons.dbcp.BasicDataSourceFactory </value>
     </parameter>
     < parameter >
             < name >maxActive </name>
             < value >100 </value>
         </parameter>
         < parameter >
             < name >maxIdle </name>
             < value >30 </value>
         </parameter>
         < parameter >
             < name >maxWait </name>
             < value >10000 </value>
         </parameter>
         < parameter >
             < name >username </name>
             < value >test </value>
         </parameter>
         < parameter >
             < name >password </name>
             < value >123 </value>
         </parameter>
         < parameter >
                 < name >driverClassName </name>
                 < value >com.microsoft.sqlserver.jdbc.SQLServerDriver </value>
         </parameter>
         < parameter >
             < name >url </name>
             < value >jdbc:sqlserver://172.0.0.1;database=testdb;user=test;password=123 </value>
       </parameter>
   </ResourceParams>            
</Context>            
 
二、配置项目的 web.xml
< resource-ref >
   < description >DB Connection </description>
   < res-ref-name >jdbc/test </res-ref-name>
   < res-type >javax.sql.DataSource </res-type>
   < res-auth >Container </res-auth>
</resource-ref>

< resource-ref >
   < description >DB Connection </description>
   < res-ref-name >jdbc/cor </res-ref-name>
   < res-type >javax.sql.DataSource </res-type>
   < res-auth >Container </res-auth>
</resource-ref>
 
三、创建包com/cn,    新建AccessDB.java
package com.cn;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;


public class AccessDB {

   private Statement stmt;
   private ResultSet rs;
   private String lookupStr; //数据库连接字符串如:java:comp/enc/jdbc/test
   private Connection con;
    
/***********************************************
* 函数功能:构造函数。需要调用setLookupStr            
* ************************************************/

public AccessDB() {
     super();
  }
    
/***********************************************
* 函数功能:获取数据库连接                
* ************************************************/

public Connection getCon() throws Exception{
  Context ctx;
  DataSource ds;
   try{
    ctx = new InitialContext();
    ds = (DataSource)ctx.lookup(lookupStr);
     return ds.getConnection();
  }
   catch(SQLException e){
     throw e;
  }
   catch(NamingException e){
     throw e;
  }
}
    
/***********************************************
* 函数功能:获取数据库集合不用于SELECT语句        
* ************************************************/
    
public Statement getStmt(){
  stmt = null;
   try{
     try{
    con= this.getCon();
    }
     catch(Exception e)
    {
      System.out.println( "getCon");
      System.out.println(e.getMessage());
    }
    stmt=con.createStatement();
  }
   catch(SQLException e){
    System.out.println( "getStmt");
    System.out.println(e.getMessage());
  }
   return stmt;
}
/***********************************************
* 函数功能:获取数据库中数据                
************************************************/

public ResultSet getRs(String sqlstr){
  rs= null;
   try{
    stmt = this.getStmtread();
    rs=stmt.executeQuery(sqlstr);
  }
   catch(Exception e){
    System.out.println( "getRs");
    System.out.println(e.getMessage());
  }
   return rs;
}
四、创建包com/myComp
   新建ConnOrcl.java:   
package com.test;
import com.cn.*;

public class ConnOrcl extends AccessDB {
   public ConnOrcl(){
     super();
    String lookupString = "java:comp/env/jdbc/test";
     super.setLookupStr(lookupString);
  }

}
新建ConnSql.java:
package com.test;
import com.cn.*;

public class ConnSql extends AccessDB {

   public ConnSql() {
     super();
    String lookupString= "java:comp/env/jdbc/cor";
     super.setLookupStr(lookupString);
  }

}
 
五、在jsp中调用javabean:
<body>
    
        <jsp:useBean id= "db" class= "com.test.ConnOrcl" scope= "page"></jsp:useBean>
    
  显示oracle数据:
  <hr>
        <%
        String sqlStr= "select * from table1 ";
    ResultSet rs=db.getRs(sqlStr);
         while(rs.next())
        {
          out.print(rs.getInt(0)+ " ");
          out.print(rs.getString(1)+ "<br>");
        }
        rs.close();
        db.closeDB();
         %>
  <hr>
  <jsp:useBean id= "db2" class= "com.test.ConnSql" scope= "page"></jsp:useBean>    
  显示SQL数据:
  <hr>
  <%
  sqlStr = "select * from table2";
  ResultSet rs2=db2.getRs(sqlStr);
     while(rs2.next())
        {
          out.print(rs2.getString(0)+ " ");
          out.print(rs2.getString(1)+ "<br>");
        }        
        rs2.close();
        db2.closeDB();
            %>
 </body>
 
六、运行显示:
 
七、结语
以后修改数据源时,即使是异构的数据源,只需要:
1。修改Context
2。修改web.xml。
3。增加类,继承AccessDB父类,设置lookupStr,就可以使用数据库访问的功能了。应用层的调用不会受到影响。
 
好用吧。