JSP  配置MySQL数据库连接池
连接池可以预先建立一些连接,并且这些连接允许共享,因此这样就节省了每次连接的时间开销。本练习以MySQL数据库为例,通过一个简单的例子,带领读者学习数据库连接池在Tomcat中的配置与使用。具体步骤如下:
(1)创建数据库。在MySQL中创建Student数据库,它有一个表student,此表包含id(int)、name(char)、addr(char)、tel(char)四个字段,分别用来存放学生的编号、姓名、地址、电话的信息。
(2)配置l文件。在Tomcat的安装目录下到文件夹conf,进入该文件夹到l文件,用记事本打开,到如下元素:
  <GlobalNamingResources>
…………………………
  </GlobalNamingResources>
在上述元素里加入一个子元素,如下所示:
  <Resource
      name="jdbc/DBPool"
      type="javax.sql.DataSource"
      password="tmq"
      driverClassName="sql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://localhost:3306/student"
      maxActive="3"/>
name指定连接池的名称;type指定连接池的类,它负责连接池的事务处理;url指定要连接的数据库;driverClassName指定连接数据库使用的驱动程序;username与password分别指定连接数据库的用户名与密码;maxWait指定最大建立连接等待时间,如果超过此时间将接到异常;maxIdle指定连接池中连接的最大空闲数;maxActive指定连接池最大连接数。
(3)配置l文件。在Web应用程序中到l,它在站点的WEB-INF文件夹下。用记事本打开该文件到如下元素:
<web-app>
……………….
</web-app>
在上述元素中加入如下子元素:
  <resource-ref>
    <description>MySQL数据库连接池配置</description>
    <res-ref-name>jdbc/DBPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
Description为描述信息;res-ref-name指定参考数据源名称,同上一步的属性name;res-type为资源类型;res-auth为连接名,res-sharing-scope指定是否可以被共享。
(4)配置l文件。这个文件与l文件所在的位置相同。用记事本打开,到如下元素:
<Context>
………………………………………
</Context>
在上述元素中加入子元素如下:
  <ResourceLink
  name="jdbc/DBPool" mysql下载配置
  type="javax.sql.DataSource"
  global="jdbc/DBPool"/>
name与同步骤(2)的name属性值相同,也与步骤(3)的res-ref-name属性值相同;type同样取“javax.sql.DataSource”;global同本步骤的name属性值。
(5)测试配置的数据库连接池。使用已经配置好的Student数据库连接池,从student表中提取数据,其核心代码如下:
  <%
        DataSource pool=null;
        Context env = null;
        Connection con=null;
        Statement st=null;
        ResultSet rs=null;
          try {
              env = (Context) new InitialContext().lookup("java:comp/env");//检索指定的对象,返回此上下文的一个新实例
              pool = (DataSource)env.lookup("jdbc/DBPool");//获得数据库连接池
              if(pool==null)
                  out.println("不到指定连接池");
            con= Connection() ;//从池中取得一个连接
            ateStatement();
            rs = st.executeQuery("select * from students");
        } catch(Exception ne) {out.String());}
  %>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。