数据库连接池

一、JDBC

    使用JDBC连接数据库步骤(对数据库进行操作)

    注册驱动

            static{

                    try{//diver="com.mysql.jdbc.Driver"

                            class.forName(driver);

                        }catch(classNotFoundException e){

                               Throw new ExceptionInitisIixerError(e);

                         }            

            }

       获取连接驱动

             public static Connection getConnection(){

                     try{ //url="jdbc:mysql://localhost:3306/dbName"  username="root"  password="root"

                            return DriverManager.getConnection(url,username,password);

                        }catch(SQLException e){

                               e.printStackTrace();

                         }       

                          return null;

                }

        释放资源(设置没空,有利于垃圾回收【置空的意思实际是告诉JVM“强引用”变成“弱引用”,可以进行内存的收

                回】)

                public static void release(Connection conn,Statement st,ResultSet rs){

                    if(rs!=null){

                        try{

                                rs.close();

                        }catch(SQLException e){

                                e.printStackTrace();

                        }finally{

                               rs=null;

                         }

                    }

                    if(st!=null){

                            try{

                                    st.close();

                             }catch(SQLException e){

                                    e.printStackTrace();

                            }finally{

                                   st=null;

                             }

                    }

                    if(conn!=null){

                            try{

                                    conn.close();

                            }catch(SQLException e){

                                e.printStackTrace();

                            }finally{

                               conn=null;

                           }

                    }

                }

            ①、获取连接对象

                    Connection conn = getConnection();

            ②、创建运行环境

                    Statement st = conn.createStatement();

            ③、执行SQL语句

                    ResultSet rs = st.executeQuery("SELECT * FROM emp");

            ④、处理数据

                    while(rs.next()){

                            String name = rs.getString(2);

                            Double sal = rs.getDouble(6);

                            System.out.println("姓名:"+name+"工资:"+sal);

                    }

             ⑤、释放资源

                    release(conn,st,rs);

二、连接池应用背景

        在WEB应用系统中,每次数据访问都必须经历建立数据库连接、打开数据库、存取数据、关闭数据库连接等步骤。反复的连接打开数据库是系统的性能下降,甚至会使系统奔溃!使用数据库连接池技术缓解此问题(是最常用的解决方法)。

     数据库连接池_第1张图片数据库连接池_第2张图片

三、数据库连接池

        数据库在初始化时创建一定数量的数据库连接池中(数量由最小连接数制约,与是否被使用无关) ,随着用户的请求增加,最少连接数满足不了需求时,系统就会创建新的连接(没有空闲连接时才会创建!),直到达到最大连接数(数量由最大的连接数制约)。当达到最大连接数时,用户的请求还继续增加,就会使用空闲的连接,如果没有空闲的连接,则需要等待,在等待的时间内有连接被释放出来就可以把这个连接分配给该用户。当使用完后再返回给空闲池(有专门的线程定时检测),当空闲池长时间未使用时,会关闭。但数量不少于最小连接数!

四、设置合适的最小连接数、最大连接数

        当最小连接数过多时,系统启动慢,但创建后系统的响应速度快。反之亦然。

        当最大连接数过多时,系统响应快,但占用的资源多。(根据系统的访问量设定)      

五、我的理解(陌生的知识向熟悉的东西类比)

        把连接池比作画盘(本人喜欢画画)

       下图基本上满足彩画者的需求(涵盖了基本七中颜色),当画者需要使用其它的色料时,而且画盘只有一个盛色盘???

        画者需要将原来的盛色盘清洗干净(浪费色料,可能原来的还没使用完)、然后盛入新的色料(需要时间),如果再想使

        用原来的色料,要需要重复洗盘、盛新色料(没有可复用性)。(这个过程好比JDBC连接操作)

        

数据库连接池_第3张图片

 六、内存释放(GC  Garbage Collection【垃圾回收机制】 )

        数组和对象本身在堆中分配,即便对象和数组被使用后,也不会被回收(占据的内存不会被释放!!),只有数组和对象在没有引用变量指向它的时候,才会变成垃圾。随后才会被垃圾回收器回收(不定时回收)!

七、参考资料

        JDBC:https://baike.baidu.com/item/jdbc/485214?fr=aladdin

        连接池:https://baike.baidu.com/item/%E8%BF%9E%E6%8E%A5%E6%B1%A0/1699713

        数据库连接池:https://baike.baidu.com/item/jdbc/485214?fr=aladdin

你可能感兴趣的:(操作系统,连接池,JDBC)