使用连接池的方式连接数据库:使用DBUtil连接MYSQL数据库

====================
DBUtil.java:
====================
package blog.util;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
import blog.exception.DBException;
 
 
public class DBUtil {
     
    private static DataSource ds = null;
 
    /**
     * 从数据库连接池获得一个数据库连接
     * @return 数据库连接
     * @throws DBException
     */
    public static Connection getConnection() throws DBException {
         
        //用数据库连接池的方式实现,JNDI
        try {
            if(ds == null){        
                Context context = new InitialContext();
                ds = (DataSource) context.lookup("java:comp/env/jdbc/pmdb");           
            }
             
            return ds.getConnection();
        } catch (NamingException e) {          
            throw new DBException("数据库连接池查找失败", e);
        } catch (SQLException e) {         
            throw new DBException("获取数据库连接异常", e);
        }
       
    }
     
    public static PreparedStatement getPreparedStatement(Connection conn, String sql) throws DBException {
        PreparedStatement pstmt = null;
        try {
            if (conn != null) {
                pstmt = conn.prepareStatement(sql);
            }
        } catch (SQLException e) {
            throw new DBException("创建执行语句失败", e);
        }
        return pstmt;
    }
 
    public static PreparedStatement getPreparedStatement(Connection conn, String sql, int autoGenereatedKeys) throws DBException {
        PreparedStatement pstmt = null;
        try {
            if (conn != null) {
                pstmt = conn.prepareStatement(sql, autoGenereatedKeys);
            }
        } catch (SQLException e) {
            throw new DBException("创建执行语句失败", e);
        }
        return pstmt;
    }
 
    public static Statement getStatement(Connection conn) throws DBException {
        Statement stmt = null;
        try {
            if (conn != null) {
                stmt = conn.createStatement();
            }
        } catch (SQLException e) {
            throw new DBException("创建执行语句失败", e);
        }
        return stmt;
    }
 
    public static ResultSet getResultSet(Statement stmt, String sql) throws DBException {
        ResultSet rs = null;
        try {
            if (stmt != null) {
                rs = stmt.executeQuery(sql);
            }
        } catch (SQLException e) {
            throw new DBException("获得查询结果集失败:" + sql, e);
        }
        return rs;
    }
 
    public static void executeUpdate(Statement stmt, String sql) throws DBException {
        try {
            if (stmt != null) {
                stmt.executeUpdate(sql);
            }
        } catch (SQLException e) {
            throw new DBException("更新失败:" + sql, e);
        }
    }
 
    /**
     * 归还数据库连接
     * @param conn 数据库连接实例
     * @throws DBException
     */
    public static void close(Connection conn) throws DBException {
        try {
            if (conn != null) {
                conn.close(); //把数据库连接归还到数据库连接池,并不是真正的断开数据库的连接
            }
        } catch (SQLException e) {
            throw new DBException("关闭数据库连接异常", e);
        }
    }
 
    public static void close(Statement stmt) throws DBException {
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            throw new DBException("关闭数据库语句异常", e);
        }
    }
 
    public static void close(ResultSet rs) throws DBException {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            throw new DBException("关闭数据库结果集异常", e);
        }
    }
}



=================
META-INF下的Context.xml:
=================

    
    


=================
web.xml:
=================


 
 
  jdbc/pmdb
  javax.sql.DataSource
  Container
 
 
 


转载于:https://www.cnblogs.com/xzf007/archive/2012/07/28/2873834.html

你可能感兴趣的:(使用连接池的方式连接数据库:使用DBUtil连接MYSQL数据库)