tomcat5.5+mysql数据库连接池 的相关配置

 

1 环境描述


  JDK 1.5
  Tomcat 5.5.4
  MySQL 4.0.20
  MySQL JDBC 3.0.15
  Commons dbcp 1.2.1

2 准备工作


  安装JDK, Tomcat, MySQL

  从http://dev.mysql.com/downloads/下载mysql-connector-java-3.0.15-ga.zip,将其中的mysql-connector-java-3.0.15-ga-bin.jar放到jre/lib/ext和Tomcat 5.5/common/lib里面。
  从http://jakarta.apache.org/commons/dbcp/下载commons-dbcp-1.2.1.zip,将其中的commons-dbcp-1.2.1.jar放到jre/lib/ext和Tomcat 5.5/common/lib里面。
(以上下载的驱动包版本不一定要跟上面一样)


3 配置Tomcat和项目的web.xml文件
  在Tomcat 5.5/conf/server.xml的<GlobalNamingResources>中添加:
<Resource name="JDBC for MySQL" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" password="" maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost/test" maxActive="4"/>。


  在Tomcat 5.5/webapps/test/WEB-INF/web.xml(就是需要使用连接池的web项目的web.xml文件)的<web-app>中添加:
<resource-ref>
<description>MySQL Connection Pool</description>
<res-ref-name>JDBC for MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


 在Tomcat 5.5/webapps/test/META-INF/context.xml的<Context>中添加:
<ResourceLink name="JDBC for MySQL" global="JDBC for MySQL" type="javax.sql.DataSourcer"/>
项目中没有context.xml文件的话,也可以不要改这一步


4 测试,在JAVA中使用数据库连接池

第一步: 创建数据库并在tomcat下配置链接池
1.创建数据库
在mysql下创建名为testdb的数据库,在testdb下创建数据表test_table.字段id,name
2.tomcat配置
我们在C:\Program Files\Tomcat 5.5.7\conf\content.xml文件中添加如下数据库链接池配置,如果没有就新建一个content.xml,注意tomcat版本要5.5以上,5.5以下不支持content.xml。

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

红字的地方要根据实际情况改变,比如数据库名,用户名,密码,如果使用的是其他类型的数据库,驱动名也要改。

第二步:编写javaBean读取tomcat下的content.xml

javaBean 文件DataBase.java代码

 

package withouttears.bean;

import java.util.HashMap;
import java.sql.*;
//JNDI有两个核心接口Context和DirContext,
//Context中包含了基本的名字操作,而DirContext则将这些操作扩展到目录服务。
import javax.naming.Context;
import javax.naming.InitialContext;
//数据库资源的连接工厂是javax.sql.DataSource对象,
//它可以创建java.sql.Connection数据库连接对象。
import javax.sql.DataSource;
//目前您可以从Java开发者连接(http://java.sun.com/products/jdbc/download.html#rowsetcobundle1_0) 
//下载CachedRowSet的实现。下载并解压缩安装文件后,将"rowset.jar"文件放到您的类目录下。
//CachedRowSet在sun.jdbc.rowset包中。
import sun.jdbc.rowset.CachedRowSet;
/** *//**
* <b>类</b>: DataBase<br>
* <b>版本</b>: 1.0.0<br>
* <b>作者</b>: wiThouTTears<br>
* <b>时间</b>: 2006-12-18<br>
* <b>QQ</b>: 314765755<br>
* <b>Email</b>: [email protected]<br>
* <b>Blog</b>: http://blog.csdn.net/withouttears/<br>
* <b>功能</b>: 用连接池连接MySql数据库及相关操作<br>
* */
public class Database ...{
    /** *//**
     * 数据库JNDI名称,默认:jdbc/testdb
     * */
    private String jndiName="jdbc/testdb";
    /** *//**
     * 建立连接池
     * @param null
     * @return DataSource
     * */
    private DataSource localhost()...{
        DataSource ds=null;
        //在HashMap中通过get()来获取value,通过put()来插入value,
        //ContainsKey()则用来检验对象是否已经存在
        HashMap<Object,Object> cachedDs=new HashMap<Object,Object> ();
        if(cachedDs.containsKey("ds"))//取出空闲状态的数据库连接
            ...{
                /**//* 在DataSource中事先建立了多个数据库连接,
                 * 这些数据库连接保存在连接池(Connect Pool)中。
                 * Java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接;
                 * 当程序访问数据库结束,再将数据库连接放回连接池。
                 * */
                ds = (DataSource)cachedDs.get("ds");
            }
        else
            try
            ...{
                    /**//*在javax.naming包中提供了Context接口,
                     * 该接口提供了将对象和名字绑定,以及通过名字检索对象的方法。
                     * */
                Context initCtx = new InitialContext();
                //lookup(String name):返回与指定的名字绑定的对象,获得数据库连接工厂
                ds = (DataSource)initCtx.lookup("java:comp/env/"+getjndiName());
                cachedDs.put("ds", ds);
            }
            catch(Exception e)
            ...{
                e.printStackTrace();
            }
                return ds;
        }
    /** *//**
     * 库的连接
     * @param null
     * @return Connection
     * */
    public Connection getConnection()...{
        Connection conn = null;
        try...{
            DataSource ds = localhost();
            conn = ds.getConnection();
            }
        catch(Exception e)...{
            e.printStackTrace();
            }
        return conn;
        }
    /** *//**
     * 关闭连接
     * @param conn
     * @return null
     * @since 1.2
     * */
    public static void close(Connection conn)...{
        try...{
            if(conn != null)
                conn.close();
            }
        catch(SQLException e)...{
            e.printStackTrace();
            }
        }
    /** *//**
     * 执行查询操作
     * @param sql
     * @return ResultSet
     * */
    public CachedRowSet executeQuery(String sql)
    ...{ 
        Connection conn=null;
        CachedRowSet rs=null;
        try...{
            rs=new CachedRowSet();
            conn=getConnection(); 
            Statement stmt=conn.createStatement();
            ResultSet rs1=stmt.executeQuery(sql);
            rs.populate(rs1);
            }
        catch(Exception e) ...{
            System.out.println(e.toString()); 
            }
        finally...{
            try...{
                conn.close(); 
                }
            catch(Exception ex)...{}
            }
        return rs;
        }
    /** *//**
     * 执行数据的插入、删除、修改操作
     * @param sql
     * @return boolean
     * */
    public boolean executeUpdate(String sql)...{
        boolean bl;
        bl = false;
        Connection conn = getConnection();
        try...{
            Statement stmt = conn.createStatement();
            if(stmt.executeUpdate(sql) > 0)
                stmt.close();
            bl = true;
            }
        catch(SQLException e)...{}
        finally...{
            close(conn);
            }
        return bl;
        }
    /** *//**
     * 获得数据库JNDI名称
     * @param null
     * @return String
     * */
    public String getjndiName()...{
        return this.jndiName;
    }
    /** *//**
     * 设置数据库JNDI名称
     * @param jndiName
     * @return true|false
     * */
    public boolean setjndiName(String jndiName)...{
        this.jndiName = jndiName;
        return true;
        }
}


第三步: 编写test.jsp测试

<%@page import="withouttears.bean.Database"%>
<%@page import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here</title>
</head>
<body>
<%
Database db=new Database();
db.setjndiName("jdbc/testdb");//初始化JNDI名称

ResultSet rs=db.executeQuery("select * from test_table");
while(rs.next())...{
        out.println("id:"+rs.getInt("id")+"<br>");
}
rs.close();
%>
</body>
</html>

 

 

总结:

其实使用数据库连接池的方法与传统的JDBC的方法大同小异,只不过多了多了几个应用服务器的配置和web.xml文件的配置。

传统的JDBC连接数据库的方法为:

1.先将数据库驱动包.jar文件放入项目lib文件夹

2.在代码中,使用Class.forName(驱动名)的方式加载数据库驱动

3.使用DriverManager.getConnection(url)的方式获得Connection对象。

 

使用数据库连接池的方法为

1.配置Tomcat的server.xml和content.xml文件,并配置项目WEB-INF目录下的web.xml。

  在Tomcat 5.5/conf/server.xml的<GlobalNamingResources>中添加:
<Resource name="JDBC for MySQL" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" password=""

maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost/test" maxActive="4"/>。

 

在C:\Program Files\Tomcat 5.5.7\conf\content.xml文件中添加如下数据库链接池配置,如果没有就新建一个content.xml,注意tomcat版本要5.5以上,5.5以下不支持content.xml。

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


在Tomcat 5.5/webapps/test/WEB-INF/web.xml(就是需要使用连接池的web项目的web.xml文件)的<web-app>中添加:
<resource-ref>
<description>MySQL Connection Pool</description>
<res-ref-name>JDBC for MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

在Tomcat 5.5/webapps/test/META-INF/context.xml的<Context>中添加:
<ResourceLink name="JDBC for MySQL" global="JDBC for MySQL" type="javax.sql.DataSourcer"/>
项目中没有context.xml文件的话,也可以不要改这一步

2.将驱动包导入tomcat的conf\lib文件夹
3.在代码中 通过    Context context=new InitialContext();获取一个对象context
   通过 (DataSource)context.lookup("java:comp/env/XXXX(在tomcat的content.xml文件中配置的Resource name)"); 获取数据源ds
   通过 ds.getConnection(); 获取Connection对象。

 

关于Context DataSource 的详细信息课参考JAVA API文档。

你可能感兴趣的:(tomcat,mysql,数据库,exception,jdbc,数据库连接池)