DataSource数据源连接数据库的配置及实例(Java)

Java数据库连接- 数据源 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);
 

DataSource数据源配置(Java)

  

***********************************************************************

这里说明的是两个文件context.xml  和  web.xml  配置

context.xml  代码:

------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<Context  reloadable="true">
    <Resource name="jdbc/BookDB"  auth="Container"   type="javax.sql.DataSource"
              maxActive="100"     maxIdle="30"       maxWait="10000"
              username="root"     password="1234"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/bookdb?autoReconnect=true" />
</Context>
------------------------------------------------------------

web.xml  文件:

------------------------------------------------------------

<web-app>

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/BookDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref> 
</web-app>

------------------------------------------------------------

JSP 页面:
------------------------------------------------------------ 
 Context ctx=new InitialContext();
 DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
conn=ds.getConnection();
 

-----------------------------

JSP页面在WEB.xml中寻找映射,而在context.xml  有JNDI与之对应,则回调结果,显示。

posted on 2012-09-12 15:10  金慧海  阅读(3331)  评论(0)    收藏  举报

导航