使用连接池的方式连接数据库:使用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:
=================
<Context reloadable="true"> <Resource name="jdbc/pmdb" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="1234" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/pmdb?useUnicode=true&characterEncoding=utf-8"> </Resource> </Context>
=================
web.xml:
=================
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <resource-ref> <res-ref-name>jdbc/pmdb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>