JDBC--学习笔记(三)数据源与连接池

来源:互联网 发布:智能语音助手软件 编辑:程序博客网 时间:2024/05/16 05:14
================数据源和连接池==============
数据源是在JDBC 2.0中引入的一个概念。JDBC扩展包中定义了javax.sql.DataSource接口,它负责建立与数据库的连接。
在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接。
在DataSource中事先建立了多个数据库连接,这些数据库连接保存在连接池(Connection Pool)中,Java程序访问数据库时,
只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,再将数据库连接返回给连接池,这样做可以提高访问
数据库的效率。
总之,数据源(DataSource)的作用是获取数据库连接,而连接池则是对已经创建好的连接对象进行管理,二者的作用不同。
数据源的配置:
1.在Tomcat服务器中添加数据库驱动(将数据库jar包文件复制到Tomcar安装目录下的lib文件夹中);
2.配置Tomcat服务器的配置文件:
  在Tomcat服务器的conf/context.xml文件中添加配置信息:
  --MySQL数据库配置与Oracle的配置有差异:--
  -------MySQL---------
  <Resource name="jdbc/demo1" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="100" maxWait="10000" username="root" password="aptech"
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/项目使用的数据库名?useUnicode=true&amp;characterEncoding=UTF-8" />

  -------Oracle--------
  <Resource name="jdbc/demo2" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@localhost:1521:orcl" />


  Resource元素属性说明:
  name:指定Resource的JNDI名称
  auth:指定管理Resource的Manager(Container由容器创建和管理,Application由Web应用创建和管理)
  type:指定Resource所属的Java类,javax.sql.DataSource有一组特性可以用于确定和描述它所表示的现实
       存在的数据源。
  maxActive:指定连接池中处于活动状态的数据库连接的最大数量
  maxIdle:指定连接池中处于空闲状态的数据库连接的最大数量
  maxWait:指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限制
          等待,单位为毫秒。
  username:数据库用户名
  password:数据库密码
  url:数据库的url


  ----------使用JNDI读取数据源-------
  JNDI:Java Naming and Directory Interface,Java命名与目录接口
  是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
  可简单理解为一种将对象和名字绑定的技术,即指定一个资源名称,将该名称与某一资源或服务相关联。
  由于数据源由Tomcat容器创建的,因此需要使用JNDI来获取数据源。
  获取数据源时,javax.naming.Context提供了查找JNDI Resource的接口,通过该对象的lookup()方法,就可以
  找到之前创建好的数据源。
  ----获取数据源的程序:以上面的MySql为例(name为demo1)-----
  Connection conn = null;
  try{
     //初始化上下文
     Context cxt = new InitialContext();
     //获取与逻辑名相关联的数据源对象
     DataSource ds = (DataSource)cxt.lookup("java:comp/env/jdbc/demo1")
     conn = ds.getConnection();
  }catch(NamingException e){
e.printStackTrace;
  }catch(SQLException e){
e.printStackTrace;
  }

  
0 0