笔记|数据库连接池

原理:java应用程序访问数据库的过程是:
①装载数据库驱动程序;
②通过jdbc建立数据库连接;
③访问数据库,执行sql语句;
④断开数据库连接。
代码如下:

Public void FindAllUsers(){ //1、装载sqlserver驱动对象 DriverManager.registerDriver(new SQLServerDriver()); //2、通过JDBC建立数据库连接 Connection con =DriverManager.getConnection("jdbc:sqlserver://192.168.2.6:1433; DatabaseName=customer", "sa", "123"); //3、创建状态 Statement state =con.createStatement(); //4、查询数据库并返回结果 ResultSet result =state.executeQuery("select * from users"); //5、输出查询结果 while(result.next()){ System.out.println(result.getString("email")); } //6、断开数据库连接 result.close(); state.close(); con.close(); }

“数据库连接”是一种稀缺的资源,为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后,如果不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。就避免了一次建立数据库连接和断开的操作时间消耗。
提供数据库连接服务:
① 编写class 实现DataSource 接口
② 在class构造器一次性创建10个连接,将连接保存LinkedList中
③ 实现getConnection 从 LinkedList中返回一个连接
④ 提供将连接放回连接池中方法
1连接池代码:
public class MyDataSource implements DataSource { //链表 --- 实现栈结构 privateLinkedList dataSources = new LinkedList(); //初始化连接数量 publicMyDataSource() { //一次性创建10个连接 for(int i = 0; i < 10; i++) { try { //1、装载sqlserver驱动对象 DriverManager.registerDriver(new SQLServerDriver()); //2、通过JDBC建立数据库连接 Connection con =DriverManager.getConnection( "jdbc:sqlserver://192.168.2.6:1433; DatabaseName=customer", "sa", "123"); //3、将连接加入连接池中 dataSources.add(con); } catch (Exception e) { e.printStackTrace(); } } } @Override publicConnection getConnection() throws SQLException { //取出连接池中一个连接 finalConnection conn = dataSources.removeFirst(); // 删除第一个连接返回 returnconn; } //将连接放回连接池 publicvoid releaseConnection(Connection conn) { dataSources.add(conn); } }

【笔记|数据库连接池】2使用连接池重构我们的用户函数:
//查询所有用户 Public void FindAllUsers(){ //1、使用连接池建立数据库连接 MyDataSource dataSource = new MyDataSource(); Connection conn =dataSource.getConnection(); //2、创建状态 Statement state =con.createStatement(); //3、查询数据库并返回结果 ResultSet result =state.executeQuery("select * from users"); //4、输出查询结果 while(result.next()){ System.out.println(result.getString("email")); } //5、断开数据库连接 result.close(); state.close(); //6、归还数据库连接给连接池 dataSource.releaseConnection(conn); }

    推荐阅读