作为初学者对c3p0的简单理解

来源:互联网 发布:淘宝gxg官方店特别便宜 编辑:程序博客网 时间:2024/05/29 14:00

先说说的c3p0的作用:

           在我的我理解中就是在一般情况情况之后都会使用jdbc链接数据库,每次请求就会去链接一次数据库,就是重复一件事,那就是反复开关开关,人数一多就会出现卡顿,甚至将服务器搞奔溃,所以这个时候就需要的是将数据库开闭连接交个一个可以去控制这个数据库开关的中间者,当用户打开之后不会马上关闭,而是寄放在按个地方,当我们需要取得时候将那个连接取出来,从而不必再去开一个连接。

比如:

           就比如在一个项目的的界面某一个请求按钮,当多个用户同时去点击的时候,共同去执行这个语句,如果每一个都去开闭,一旦人数一多,数据库读去速度减慢,效率减低、搞不好服务奔溃,所以这种方式太消耗内存,同时效率低下。

           所以这个时候就自然的想到了链接池,同时数据库连接池的基本思想:就是为数据库连接建立一个“缓冲池”,在需要的时候从数据库之中取出需要的数据库的连接,一旦使用完毕马上归还回去,放入“缓冲池”,如果后续还有人需要钓用的话,也可以直接调用这个链接,同时我们也可以设置连接池的连接最大数量来控制连接数量,更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

       ①   编写class实现DataSource接口

       ②   class构造器一次性创建10个连接,将连接保存LinkedList

       ③   实现getConnection  LinkedList返回一个连接

       ④   提供将连接放回连接池中方法

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);                   }     } 


//查询所有用户  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);   }


暂时只便于自己理解

原创粉丝点击