JAVA数据库连接池例子

 
PoolDbSource 类

[java]view plaincopyprint?
package com.***.connectionpool.db;   
   
import java.sql.Connection;   
import java.sql.SQLException;   
   
import javax.sql.PooledConnection;   
   
import oracle.jdbc.pool.*;   
   
public class PoolDbSource    
{   
    private static PoolDbSource instance;   
    private OracleConnectionPoolDataSource ocpds;   
    private PoolDbSource() throws SQLException{   
        ocpds = new OracleConnectionPoolDataSource();   
        ocpds.setDriverType("thin");   
        ocpds.setServerName("202.112.119.177");   
        ocpds.setNetworkProtocol("tcp");   
        ocpds.setDatabaseName("orcl");   
        ocpds.setPortNumber(1521);   
        ocpds.setUser("idc_yjs");    
        ocpds.setPassword("yjs");   
    }      
   
    /**     
    * 返回唯一实例.如果是第一次调用此方法,则创建实例     
    *     
    * @return PoolDbSource 唯一实例     
     * @throws SQLException   
    */       
    static synchronized public PoolDbSource getInstance()     
    {       
        if (instance == null)       
        {       
             synchronized (PoolDbSource.class) // 加锁       
             {     
                 if(instance == null) // 第二次检查       
                 {     
                     try    
                     {   
                         instance = new PoolDbSource();   
                     }    
                     catch (SQLException e)   
                     {   
                        System.out.print("=================================");    
                        System.out.print("链接数据库失败!");    
                        System.out.print("=================================");    
                        System.out.print("错误信息:");   
                        e.printStackTrace();   
                        return null;   
                     }      
                 }     
             }     
        }         
        return instance;       
    }       
   
    /**  
     * 取得数据库连接  
     * @return  
     */   
    public Connection getConnection()   
    {   
        PooledConnection pc; // 数据库连接池连接    
        Connection conn; // 数据库连接对象    
        try    
        {   
            pc = ocpds.getPooledConnection(); // 从连接池获取连接    
            conn = pc.getConnection();   
        }   
        catch (SQLException e)   
        {   
            System.out.print("=================================");    
            System.out.print("获得数据库连接失败!");    
            System.out.print("=================================");    
            System.out.print("错误信息:");   
            e.printStackTrace();   
            return null;   
        }   
        return conn;   
    }          
}  

 

BaseManager 类

[java]view plaincopyprint?
package com.***.connectionpool.common;   
   
import java.sql.Connection;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
import java.sql.Statement;   
   
import com.***.connectionpool.db.PoolDbSource;   
   
public class BaseManager {   
    PoolDbSource poolDbSource; //数据源连接管理对象    
    Connection conn; // 数据库连接对象    
       
    public BaseManager()   
    {   
        super();   
    }   
       
    /**  
     * 执行查询语句返回数据集  
     * @param sql  
     * @return  
     */   
    public ResultSet executeQuerySql(String sql)   
    {      
        Statement statement;   
        ResultSet rs = null;   
        try    
        {   
            poolDbSource = PoolDbSource.getInstance();   
                     conn = poolDbSource.getConnection();   
            statement = conn.createStatement();   
            rs = statement.executeQuery(sql);   
        }   
        catch (SQLException e)    
        {   
            e.printStackTrace();   
        }   
        finally   
        {   
//          if(conn!=null)    
// 因为他们有自己的数据结构,所以在这个方    
// 法中实际返回的应该是他们的数据结构类型而不是ResultSet,    
// 这里返回的是ResultSet所以在这里关闭conn会导致返回的rs无法使用。暂时注释掉了    
//          {    
//              try     
//              {    
//                  conn.close();    
//              }    
//              catch (SQLException e)    
//              {    
//                  System.out.print("关闭数据库连接出现异常。");    
//              }    
//          }    
        }   
           
        return rs;   
    }   
}  

ConnectionPoolTestAction

[java]view plaincopyprint?
package com.***.connectionpool.sources;   
   
import java.sql.ResultSet;   
   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
   
import org.apache.struts.action.Action;   
import org.apache.struts.action.ActionForm;   
import org.apache.struts.action.ActionForward;   
import org.apache.struts.action.ActionMapping;   
   
import com.***.connectionpool.common.BaseManager;   
   
   
public class ConnectionPoolTestAction extends Action {   
   
    public  ActionForward execute(ActionMapping mapping, ActionForm form,   
        HttpServletRequest request, HttpServletResponse response)   
        throws Exception   
    {   
        BaseManager baseManager = new BaseManager();   
        ResultSet rs = baseManager.executeQuerySql("SELECT * FROM code_school where xsbz = '0'");   
        if(rs.next())   
        {   
            request.setAttribute("lsh", rs.getString(1));   
            request.setAttribute("zgh", rs.getString(2));   
        }   
           
        return mapping.findForward("success"); // 返回到一个测试页面读取request.setAttribute的两个变量    
    }   
   
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值