连接池1
2015-10-03 10:46
267 查看
之前的连接在每次使用完后都会关闭,而创建连接的成本是很高的,所以现在的想法就是能不能在程序开始的时候创建一批连接,放入连接池中,当需要使用的时候就从连接池中取连接,使用完毕后再将连接放回到连接池中
1,创建一个数据源
2,修改工具类
1,创建一个数据源
package cn.itcast.jdbc.dataSource; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; public class MyDataSource { private static String url = "jdbc:mysql://localhost:3306/jdbc"; private static String user = "root"; private static String password = "123456"; public static void main(String[] args) { } private LinkedList<Connection> connectionPool = new LinkedList<Connection>(); //连接池 public MyDataSource(){ try{ for(int i=0;i<10;i++){ //MyDataSource创建时就建立10个连接 this.connectionPool.addLast(this.createConnection()); } }catch(SQLException e){ throw new ExceptionInInitializerError(); } } public Connection getConnection(){ return this.connectionPool.removeFirst(); } public void free(Connection conn){ //释放连接,实际上就是重新加入到连接池 this.connectionPool.addLast(conn); } private Connection createConnection()throws SQLException{ return DriverManager.getConnection(url,user,password); } }
2,修改工具类
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import cn.itcast.jdbc.dataSource.MyDataSource; public final class JdbcUtils { private static MyDataSource myDataSource = null; private JdbcUtils() { } static { try { Class.forName("com.mysql.jdbc.Driver"); myDataSource = new MyDataSource(); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException { // return DriverManager.getConnection(url, user, password); return myDataSource.getConnection(); // 取连接 } public static void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) // conn.close(); myDataSource.free(conn); // 释放连接 } catch (Exception e) { e.printStackTrace(); } } } } }
相关文章推荐
- 常用 shell 脚本
- Reorder List
- DNS原理及其解析过程
- PHP递归打印
- android下载的进度条
- android TabHost制作底部导航栏
- Java闭包简析
- AdapterViewFlipper实现图片自动播放功能
- 数据库中DDL、DML、DCL和TCP概念
- CentOS6.5设备MRBS
- 昨天发现的nginx默认不支持下划线引起angular-phonecat项目部分文件404问题
- 1.3.4 为在保护模式下执行head.s做准备
- ASF(传感器)
- Linux 守护进程的编程方法 http://blog.csdn.net/hairetz/article/details/4195036
- java 网络编程——day23
- socket编程
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)
- Java常用的设计模式05:常用设计模式之原型模式(创建型模式)
- Linux进程控制 http://blog.csdn.net/kennyrose/article/details/7533534
- HDU 2673 shǎ崽 OrOrOrOrz(水~)