本文主要讲述使用druid连接池,将jdbc封装成工具类
一. 连接池
二. 使用druid连接池
在jdbc工具类的基础上,使用druid连接池,增加连接数量。
hsp老师写的方式:
/** * hsp老师jdbcDruidUtils工具类的创建 */ public class JDBCUtilsByDruid { private static Connection connection; static { Properties properties = new Properties(); try { properties.load(new FileInputStream("src\\druid.properties")); DataSource druid = DruidDataSourceFactory.createDataSource(properties); connection = druid.getConnection(); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection(){ return connection; } public static boolean Close(ResultSet resultSet, Statement statement,Connection connection){ try { if(resultSet != null){ resultSet.close(); } if(statement != null){ statement.close(); } if(connection != null){ connection.close(); } } catch (SQLException e) { throw new RuntimeException(); } return true; } }
在 JDBCUtilsByDruid类中,将connection作为静态成员变量。
测试连接:
public class TestConnection { private Connection connection; @Test public void test01() throws Exception{ connection = JDBCUtilsByDruid.getConnection(); System.out.println(connection); JDBCUtilsByDruid.Close(null,null,connection); connection = JDBCUtilsByDruid.getConnection(); System.out.println(connection); JDBCUtilsByDruid.Close(null,null,connection); } }
运行结果如下:
二月 01, 2023 7:49:57 下午 com.alibaba.druid.pool.DruidDataSource info 信息: {dataSource-1} inited com.mysql.cj.jdbc.ConnectionImpl@49e5f737 closed-conn-1550261631
原因分析如下:
在JDBCUtilsByDruid 类中,connection作为静态成员变量使用,static静态代码块随着类的加载而加载,为connection赋值,
在test01()中,第一次关闭了connection,则JDBCUtilsByDruid 类中静态变量connection被关闭了,无法再次连接到数据库了,
由此得出,将connection作为工具类的静态成员变量,并没有体现出数据连接池的特点。
我自己写的改进方式:
public class JDBCUtilsByDruid { private static DataSource druid; static { Properties properties = new Properties(); try { properties.load(new FileInputStream("src\\druid.properties")); druid = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection(){ Connection connection = null; try { connection = druid.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return connection; } @SuppressWarnings({"all"}) public static boolean Close(ResultSet resultSet, Statement statement,Connection connection){ try { if(resultSet != null){ resultSet.close(); } if(statement != null){ statement.close(); } if(connection != null){ connection.close(); } } catch (SQLException e) { throw new RuntimeException(); } return true; } }
将数据池 druid作为 JDBCUtilsByDruid 的静态成员变量
测试连接:
public class TestConnection { private Connection connection; @Test public void test01() throws Exception{ connection = JDBCUtilsByDruid.getConnection(); System.out.println(connection); JDBCUtilsByDruid.Close(null,null,connection); connection = JDBCUtilsByDruid.getConnection(); System.out.println(connection); JDBCUtilsByDruid.Close(null,null,connection); } }
运行结果如下:
二月 01, 2023 8:51:32 下午 com.alibaba.druid.pool.DruidDataSource info 信息: {dataSource-1} inited com.mysql.cj.jdbc.ConnectionImpl@ed7f8b4 com.mysql.cj.jdbc.ConnectionImpl@ed7f8b4
再次使用连接时,仍然能保持连接。
三. 结论
在使用druid连接池封装jdbc工具类时,应该让数据连接池druid作为静态变量,而不是connection连接。
标签:jdbc,JDBCUtilsByDruid,Druid,druid,connection,static,工具,null,public From: https://www.cnblogs.com/zwgitOne123/p/17084128.html