数据库连接池

原理: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<Connection> dataSources = new LinkedList<Connection>();
 
              //初始化连接数量
              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);
        }

你可能感兴趣的:(笔记,数据库,sqlserver,database,java)