5. 数据源 DataSource 连接数据库

DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。

该工厂用于提供到此 DataSource 对象表示的物理数据源的连接。作为 DriverManager 设施的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。

 

DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

a) 基本实现 - 生成标准 Connection 对象

b) 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。

c) 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,并且几乎始终参与连接池。此实现与中间层事务管理器一起使用,并且几乎始终与连接池管理器一起使用。

 

DataSource 对象的属性在需要时可以修改。例如,如果将数据源移动到另一个服务器,则可更改与服务器相关的属性。其优点是,因为可以更改数据源的属性,所以任何访问该数据源的代码都无需更改。

 

一般步骤:

5.1 导入两个类包commons-dbcp和commons-pool(来自apache)

5.2 创建数据源 BasicDataSource ds = new BasicDataSource();

5.3 设置数据库连接池基本信息,如:

    数据库驱动,数据库连接协议地址,数据库用户名,密码

    数据库最大活动连接,最大空闲连接,是否预编译等等

5.4 激活连接 java.sql.Connection conn = ds.getConnection();

 

关键代码:

   

  

BasicDataSource ds = new BasicDataSource();
    
    ds.setDriverClassName(driverClassName);
    ds.setUrl(url);
    ds.setUsername(username);
    ds.setPassword(password);
    
    /**
     * 最大活动连接数
     * 同时进行的数据库连接数不超过这个数目
     * */
    ds.setMaxActive(20);
    
    /**
     * 最大空闲连接数
     * 当释放数据库连接后,空闲连接数超过这个数目时关闭一些空闲连接
     */
    ds.setMaxIdle(8);
    
    /**
     * 是否预编译SQL语句
     * */
    ds.setPoolPreparedStatements(true);
    
    conn = ds.getConnection();

注意: 不支持org.apache.commons.dbcp.BasicDataSource不支持getConnection(String username, String password)方法,该类重写javax.sql.DataSource类中成员方法,方法体直接抛出UnsupportedOperationException,代码如下:

public Connection getConnection(String user, String pass) throws SQLException {
        // This method isn't supported by the PoolingDataSource returned by
        // the createDataSource
        throw new UnsupportedOperationException("Not supported by BasicDataSource");
        // return createDataSource().getConnection(username, password);