java学习篇:连接mySQL(二)--自定义连接池
来源:互联网 发布:外汇决策数据分析 编辑:程序博客网 时间:2024/06/06 00:56
在上一篇博客中,主要涉及到了java中基本的对于mySql的访问,以及简单的封装。在实际的运用中,对于各个连接的建立与释放也是非常消耗资源的,所以在本篇博客中主要涉及自定义连接池的内容。
- 简单的自定义连接池
代码如下
public class CustomPool { private static String url = "jdbc:mysql://localhost:3306/test_jdbc"; private static String user = "";//连接数据库的用户名 private static String password = "";//连接数据库的密码 //创建容器,用于存放Connection对象 private static LinkedList<Connection> pool = new LinkedList<Connection>(); //在静态代码块中,初始化连接池中的连接 static { try { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); for (int i = 0; i < 3; i++) { //获得连接 Connection conn = DriverManager.getConnection(url, user, password); //将连接添加到连接池中 pool.add(conn); } } catch (Exception e) { e.printStackTrace(); } } /** * 获得连接 */ public static Connection getConnection() { try { //如果池中还有连接,则返回一个连接 if (!pool.isEmpty()) { Connection conn = pool.removeFirst(); return conn; } } catch (Exception e) { e.printStackTrace(); } //如果没有,则返回null return null; } /** * 释放资源 * 归还连接 */ public static void release(Connection conn, PreparedStatement ps, ResultSet rs) { try { if (rs != null){ rs.close(); } } catch (Exception e) { } try { if (ps != null){ ps.close(); } }catch (Exception e){ } try { //归还到连接池中 if (conn != null) { pool.add(conn); } } catch (Exception e) { e.printStackTrace(); } }}
- 自定义连接池的方法增强
在前一部分的自定义连接池中,如果用户未使用release()方法,而使用了conn.close()方法,则任然会将连接进行释放,所以在这一部分中,我们将重写Connection接口,使其调用close()方法时不会释放资源,而是向自定义的连接池中归还连接
以下是代码
public class MyConnection implements Connection{ private Connection conn; private List<Connection> pool; public MyConnection(Connection conn, List<Connection> pool){ this.conn = conn; this.pool = pool; } /** * 对close()方法进行修改,使其变为归还连接 */ @Override public void close() throws SQLException { pool.add(conn); } //同时对prepareStatement()方法进行修改 @Override public PreparedStatement prepareStatement(String sql) throws SQLException { return conn.prepareStatement(sql); } //此接口中还有许多方法,但都不需要做出修改 ...}
此时在CustomPool类中,需要修改三处
public class CustomPool { ... Connection conn = DriverManager.getConnection(url, user, password); //获得自定义的连接 MyConnection myConn = new MyConnection(conn, pool); //将自定义的连接添加到连接池中 pool.add(myConn); ... } /** * 获得连接 */ public static MyConnection getConnection() { ... //如果池中还有连接,则返回一个连接 if (!pool.isEmpty()) { MyConnection conn = (MyConnection) pool.removeFirst(); return conn; } ... } /** * 释放资源 * 归还连接 */ public static void release(Connection conn, PreparedStatement ps, ResultSet rs) { ... //此时调用的是MyConnection中的close()方法 //将连接归还到连接池中 if (conn != null) { conn.close(); } ...}
public class Test { public static void main(String[] args) { //将此处的Connection更换为MyConnection MyConnection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = CustomPool.getConnection(); String sql = "select * from table_user_info where userID=?"; ps = conn.prepareStatement(sql); ps.setString(1,"A001"); rs = ps.executeQuery(); while (rs.next()){ System.out.println(rs.getString("userName")); } } catch (SQLException e) { e.printStackTrace(); }finally { CustomPool.release(conn, ps, rs); } }}
阅读全文
0 0
- java学习篇:连接mySQL(二)--自定义连接池
- java学习篇:连接mySQL(一)
- 自定义Mysql连接池
- Servlet学习笔记(二)---连接Mysql
- Java连接MySQL数据库 (二)
- MySQL-Python 学习(二)-连接 MySQL
- java 学习之连接 Mysql
- java 学习之连接 mysql
- JAVA连接池--mysql
- hjr教程-JAVA(二):JAVA连接MySql
- Druid连接池二(学习笔记)
- java JDBC 自定义连接池
- Java连接Mysql数据库攻略二
- JAVA连接MySQL数据库----(常用数据库连接二)
- JAVA连接MySQL数据库----(常用数据库连接二)
- Java连接池详解(二)
- MySQL学习笔记(二):内连接和外连接实现多表查询
- java连接池使用方法二
- Linux随笔
- Git 简易指南
- mysql(1):软件安装+基础指令使用
- Python数据分析学习笔记(一)
- nodejs借用管道实现流数据边取边处理
- java学习篇:连接mySQL(二)--自定义连接池
- Period next数组应用
- Eclipse历史版本下载
- Android 设计模式之Builder模式
- Linux之数据类型
- hibernate求和
- 原生js事件的绑定和解除
- 动态网站的搭建-学习笔记-阿里云服务器测试
- JavaScript 创建对象的模式