JavaWeb 第二章 优化JDBC连接管理 数据源与连接池技术总结

本文详细介绍了JavaWeb中数据源与连接池技术,包括数据源的概念、配置方法,以及如何通过JNDI读取数据源和调用数据源获取连接。通过示例代码展示了在Tomcat中配置数据源并在JSP中调用的实践过程。
摘要由CSDN通过智能技术生成

JavaWeb 应用设计及实战 目录

上一个任务/上一节       下一个任务/下一节

目录

1.数据源与连接池技术

2.数据源的配置

表 2-1 Resource 元素属性说明

3.使用  JNDI 读取数据源

示例11

4. 调用数据源得到连接

示例12

数据源与连接池  实列


1.数据源与连接池技术

     数据源是在JDBC 2.0中引入的一个概念。在JDBC 扩展包中定义了javax.sql.DataSource

接口,它负责建立与数据库的连接,在应用程序访问数据库时不必编写连接数据库的代码,

可以直接从数据源获得数据库连接。

     DataSource 的全称为“javax.sql.DataSource”,  它有一组特性可以用户确定和描述它所

表示的现实存在的数据源,我们配置好的数据库连接池也是以数据源的形式存在的。

      在DataSource 中事先建立了多个数据库连接,这些数据库连接保存在连接池

(Connection  Pool)中。Java 程序访问数据库时,只需从连接池中取出处于空闲状态的

数据库连接,当程序结束数据库访问时,再将数据库连接返回给连接池,这样做可以提高

访问数据库的效率。

      简单来说,数据源(DataSource)的作用是获取数据库连接,而连接池则是对已经

创建好的连接对象进行管理,二者的作用不同。连接池的工作原理如图2.3所示。

                                                                图  2.3   数据源与连接池工作原理

2.数据源的配置

       数据源的配置有固定模式,例如配置Tomcat 服务器的配置文件,只需在 Tomcat  服务器

的  conf/context.xml  文件中添加如下配置信息:

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

 

数据源配置  在JSP中编写代码,实现数据源调用,获得访问连接

输入关键代码

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

运行报错怎么处理,,使用的是老师发的数据源,上传,stusystem文件,,数据库名是
stedentsystem,
我怀疑是数据源配置,修改项目名称这里有问题,
配置信息

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

Resource 元素中各个属性的含义如表 2-1 所示。

                      

表 2-1 Resource 元素属性说明

属性 说明

name

指定 Resource 的 JNDI 名称 auth

指定管理 Resource 的 Manager ( Container由容器创建和管理,Application 由 Web 应用创建和管理)

type

指定 Resource 所属的 Java 类

maxActive 指定连接池中处于活动状态的数据库连接的最大数量 maxIdle 指定连接池中处于空闲状态的数据库连接的最大数量 maxWait 指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)

至此,数据源的配置已经完成,下面介绍如何从程序中来访问数据源。

3.使用  JNDI 读取数据源

JNDI (Java Naming and Directory Interface,Java命名与目录接口)  是一个为应用

程序设局的API ,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的

接口。

       我们可以把 JNDI 简单地理解为一种将对象和名字绑定的技术,即指定一个资源名

称,将该名称与某一资源或服务相关联。由于数据源是由 Tomcat 容器创建的,因此需

要使用 JNDI 来获得数据源。

       获取数据源时, javax.naming.Context 提供了查找 JNDI Resource 的接口,通过该对

象的 lookup() 方法,就可以找到之前创建好的数据源。 lookup() 方法的语法如下。

lookup("java:comp/env/数据源名称")

"java:comp/env/" 这个前缀是 Java 的语法要求,必须要写上,其后才是在 context.xml

文件中 <Resource> 元素的 name 属性的值,也就是数据源的名称。

示例11

配置数据源,编写程序获取数据源。

关键代码:

// 获取数据库连接
	  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;
	  }

          在示例11 中, Context 对象的实例调用  lookup()  方法来获取数据源,数据源是

DataSource 类型,所以需要进行类型转换。

 

注意

        读取数据源获取数据库连接时,首先要确保 Tomcat 服务器已经启动,其次确

保读取数据源的代码运行在 Tomcat 中。

4. 调用数据源得到连接

    在应用程序中调用数据源获取连接的代码很简单,只需要实例化获取数据源方法的

所在类,然后调用获取数据源的方法就可以得到一个 Connection 对象。

示例12

在 JSP 中编写代码,实现数据源调用,获得访问连接。

关键代码:
 

……
<%
    BaseDao baseDao = new BaseDao();
    Donnection conn = baseDao.getConnection2();
%>
<%=conn%>
……

运行效果如图 2.4所示。

     ……

常见问题1:

<Context>
   <Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"
      maxActive="100" maxIdle="30" maxWait="10000" username="newsu"
      password="123456" driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://127.0.0.1:3306/newsmanagersystem?
              useUnicode=true&amp;characterEncoding=utf-8" />
</Context>

jdbc/*   *=项目名称   username=你的数据库名称,,一般是root, 密码是你的数据库密码,一般是123456,url   -->3306-->连接数据库名称

修改后

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

我在这里拿javaWeb 贯穿流程项目  来举个例子  ,

资源在下面这个网站下载

javaweb 贯穿项目流程.rar

https://download.csdn.net/my

 

数据源与连接池  实列

 

1.WebRoot目录下META-INF创建Context.xml

 

2.第二步:配置web.xml

<resource-ref>
    <res-ref-name>jdbc/news</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

3.添加驱动jar包,复制到lib 文件夹 

第4步:

修改BaseDao
在第36行  
添加代码

这个时候要导包?具体导那个包,没有印象了?

关键代码



// 获取数据库连接
	  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;
	  }
 

 

导包应该是第二个包,,javax……包  还有就是sql包。。这个时候jdbc/*    *=项目名称
最后在JSP中编写代码
,实现数据源调用,获得访问连接
关键代码:……

……
<%
    BaseDao baseDao = new BaseDao();
    Donnection conn = baseDao.getConnection2();
%>
<%=conn%>
……

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值