javabean+mysql数据库连接池

本文介绍如何通过Java配置数据库连接池,并演示了使用JNDI和DataSource进行数据库访问的过程,包括创建连接池、获取连接及执行SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.chinaunix.net/u/20532/showart.php?id=215038

第一步:写javabean

package withouttears.jdbc.db;

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;

/**
 * 作者:wiThouTTears
 * 时间:2006-12-13
 * */

public class Database {
 /**************************************************************/
 /* 函数:localhost
  * 功能:建立连接池
  * */

 private static 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/jdbc/testdb");
                cachedDs.put("ds", ds);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
  return ds;
 }
 /**************************************************************/
 /* 函数:getConnection
  * 功能:库的连接
  * */

 private static Connection getConnection(){
  Connection conn = null;
        try
        {
            DataSource ds = localhost();
            conn = ds.getConnection();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return conn;
 }
 /**************************************************************/
 /* 函数:close
  * 功能:关闭连接
  * */
 private static void close(Connection conn)
    {
        try
        {
            if(conn != null)
                conn.close();
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
    }
 /**************************************************************/
 /* 函数:executeQuery
  * 功能:数据查询
  * */

 public static 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;
    }   
 /**************************************************************/
 /* 函数:executeUpdate
  * 功能:数据更新(添加/更改/删除)
  * */

 public static 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;
    }
 /**************************************************************/
}

编译得到withouttears/db/Database.class并放到E:/MyWorkSpace/test/WEB-INF/classes下,即E:/MyWorkSpace/test/WEB-INF/classes/withouttears/db/Database.class,注意别弄错了。

第二步:配置Tomcat(我用是Tomcat 5.5.7)

1. 在C:/Program Files/Tomcat 5.5.7/conf/Catalina/localhost下新建一个test.xml,内容如下:

<Context docBase="E:/MyWorkSpace/test" path="/test"></Context>

注:docBase为你的web文件所在地,我用的是E:/MyWorkSpace/test。path可写可不写,但在Linux下必须写上,Windows下不写我测试可以用,最好写上。这里的test.xml指定的文件夹不像我们平时用的那样在C:/Program Files/Tomcat 5.5.7/webapps/test,不过目的一样都是表示用http://localhost:8080/test/来访问,相当于IIS下的虚拟目录,可以是任意的。

2. 在C:/Program Files/Tomcat 5.5.7/conf/下建立context.xml,在E:/MyWorkSpace/test下新建WEB-INF/web.xml。

context.xml

<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
 <WatchedResource>WEB-INF/web.xml</WatchedResource>
 <WatchedResource>META-INF/context.xml</WatchedResource>
 
 <!-- Uncomment this to disable session persistence across Tomcat restarts -->
 <!--
 <Manager pathname="" />
 -->
 <Resource name="jdbc/testdb"
 auth="Container"
 type="javax.sql.DataSource"
 driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost/mytestdb"
 username="root"
 password="157744375"
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 />
</Context>

注: 链接池配置文件,这样我们就可以用第一步写的Javabean类Database中的localhost()函数来读取这个content.xml中的jdbc/testdb名称

web.xml

<?xml version="1.0" encoding="gbk"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <display-name>
 test</display-name>
 <welcome-file-list>
  <welcome-file>test.jsp</welcome-file>
 </welcome-file-list>

<!-- JSPC servlet mappings start -->
<!-- JSPC servlet mappings end -->

</web-app>

注: web.xml放web的默认主页(如:test.jsp或者index.jsp)和程序中要用到servlet的映射,不管它我们这里用不到。

第三步:写test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<%@page import="withouttears.jdbc.db.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title</title>
</head>
<body>
<%
    String sql=null;
    sql="select * from table_test";
 ResultSet rs=Database.executeQuery(sql);
 try{
 while(rs.next()){
%>
姓名:<%=rs.getString("name")%><br>
电话:<%=rs.getString("mobile")%><br>
<%}}catch(Exception e){} %>
</body>
</html>

第四步:测试

在浏览器中输入:http://localhost:8080/test/,点击确定。在windows2000 proffesional sp4下测试成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值