zoukankan      html  css  js  c++  java
  • 数据源,连接池,连接,jndi

    连接池:
    连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。
    连接池自动分配连接对象并对闲置的连接进行回收。
    连接池中的连接对象是由数据源(DataSource)创建的。
    连接池(Connection Pool)用来管理连接(Connection)对象。

    数据源:
    数据源(DataSource)用来连接数据库,创建连接(Connection)对象。
     java.sql.DataSource接口负责建立与数据库的连接
     由Tomcat提供,将连接保存在连接池中。


    JNDI(Java Naming and Directory Interface,Java命名和目录接口):
    在程序中使用JNDI获取数据源。


    通过数据源创建的连接对象被统一的放入到连接池中进行管理。


    搞清楚三者的关系,然后进行下面的配置 : )

    连接池的配置:

    C3P0连接池在Spring的配置文件application.xml的配置:

    <!-- 配置C3P0连接池: -->
     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="driverClass" value="${jdbc.driver}"/>
      <property name="jdbcUrl" value="${jdbc.url}"/>
      <property name="user" value="${jdbc.user}"/>
      <property name="password" value="${jdbc.password}"/>
     </bean>


    数据源的配置与使用数据源的方法:

    1、配置Tomcat的conf/context.xml
     <Resource name="jdbc/news"
                  auth="Container"  type="javax.sql.DataSource"  maxActive="100"
                  maxIdle="30" maxWait="10000" username="root"  password="Admin"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://127.0.0.1:3306/news"/>
      name=指定Resource的JNDI名称
      auth=指定管理Resource的Manager(Container由容器创建和管理,Application由Web应用创建和管理)
      type=指定Resource的java类
      maxActive=指定连接池中处于活动状态的数据库连接的最大数量
      maxIdle=指定连接池中处于空闲状态的数据库的最大数量
      maxWait=指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)
     这里不要忘记:还需要将数据库的驱动jar包添加到,Tomcat安装目录下的lib文件夹中。

    2、使用JNDI获取连接对象
     lookup(java:comp/env/数据源名称");
     //java:comp/env/这是Java的语法要求,必须写上。
     //这里的数据源名称就是上面的jdbc/news,这个news是项目名。
     

    3.编写代码获取数据源

      // 获取数据库连接
      public Connection getConnection2() {
       try {
        //初始化上下文
        Context cxt=new InitialContext();
        //获取与逻辑名相关联的数据源对象
        DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
        conn=ds.getConnection();
       } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       return conn;
      }

    还有一点要注意:测试连接是否成功,需要在jsp页面输出connection,而不是在java类中Run As,应为数据源配置在Tomcat中需要把Web项目放入Tomcat容器中运行。jsp页面代码如下:

    示例:

    <%
     BaseDao baseDao=new BaseDao();
     Connection connection=baseDao.getConnection2();

     %>

    <%=connection %>

     在Tomcat中的配置

    配置在:context.xml文件内


    F:apache-tomcat-7.0.68-windows-x64apache-tomcat-7.0.68confcontext.xml


    ---------mySQL
    <Resource name="jdbc/news"
    auth="Container" type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30" maxWait="10000" username="root"
    password="Admin001"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/news"/>


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


    使用JNDI获取连接对象
    java:comp/env/jdbc/news

    这段为固定写法
    java:comp/env/    

  • 相关阅读:
    C++ 从文件中读取数据的代码及优化
    EOF在C++中的含义
    利用"中值滤波原理"过滤异常数据(转载)
    Hive差集运算详解
    H5 玩出新花样(一) -- 森林领导术不倒流
    C++中怎么暂停几秒
    c语言中 srand(time(NULL)); 这句话是什么意思(尤其是 NULL)
    C++ 码代码的风格(推荐)
    c/c++编译器的安装
    jquery的$(selector).each,$.each的区别
  • 原文地址:https://www.cnblogs.com/pangting/p/7050390.html
Copyright © 2011-2022 走看看