论坛首页 综合技术论坛

设置数据库连接池(个人整理)

浏览 2180 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-19  

为了提高性能,若直接获得数据库的连接,性能比较低。一般会使用连接池,通过连接池去管理数据库的连接,这样可以达到一个高效操作数据库连接的作用。要想使用连接池,有两种方式:

一、     在应用服务器中进行设置:如在Tomcat中进行设置

二、     使用第三方的,专门的进行连接池设置的组件。Comment dbcbc3p0

以下介绍第一种方法:

Tomcat中设置连接池:

(1) tomcat的安装目录下找到context.xml,打开context.xml.

(2) <Context>……</Context>里面添加连接池:

针对Oracle的连接池

<Resource name="jdbc/oracleds"

              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:@127.0.0.1:1521:oracle9i"/>

针对Mysql的连接池:

<Resource name="jdbc/mysqlds"

              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/blog "/>

注:blog为数据库名称     oracle9i为安装时设置的名称

 

(3) Oracle或者Mysql的驱动拷贝到Tomcat安装目录下的lib目录里。(ojdbc14.jarmysql-connector-java-5.1.6-bin.jar

(4) 重启eclipse里面的Tomcat使其生效。

(5) 使用数据连接池:

在需要操作数据库的地方使用:DataSource 如下所示:

/** 通过Tomcat中的连接池获得数据库的连接,此处是使用数据库连接池向数据库表blog中插入博文 */

       // 获取数据源对象,先声明数据源对象

       // 数据源对象可以理解为连接池的管理者,通过他可以获取数据的连接

       DataSource ds = null;

       try {

           Context context = new InitialContext();

           ds = (DataSource) context.lookup("java:/comp/env/jdbc/mysqlds");

       } catch (Exception e) {

           System.out.println("获取数据源时出错");

       }

       // 使用DataSource的对象获得connection的对象,connection对象就是数据库链接的对象

       int result = 0;

 

       /** 以上一段代码可以使用封装类DBUtils中的方法取代(先导入commons-dbutils-1.3.jar包) */

//     Connection conn = null;

       try {

//         conn = ds.getConnection();

//         QueryRunner qr = new QueryRunner();

//或者让其自已获取数据源对象

           QueryRunner qr = new QueryRunner(ds);

           ResultSetHandler rsh = new ArrayListHandler();

           String sql = "insert into blog(title,content,category_id,created_time) values(?,?,?,now())";

           //通过数组的形式接收参数

           String params[] = {title,content,categoryId};

//          result = qr.update(conn, sql,params);

           result = qr.update(sql,params);

//         conn.close();

       } catch (SQLException e) {

           e.printStackTrace();

       }

       String message = "";

       if (result == 1) {

           message = "添加博文成功!";

       } else {

           message = "添加博文失败!";

       }

 

       // 使message在页面中显示,必须把参数传过去(可能通过requestsession进行传递)

       // request对象对性能损失要小,尽量使用request对象

       request.setAttribute("message", message);

       // 转向页面或转向另一个action

       request.getRequestDispatcher("/addBlogResult.jsp").forward(request, response);

System.out.println("影响的行数:" + result);

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics