我们前面有写JDBC的工具类 那么数据库连接池能抽象出工具类吗???
当然是可以的!!!
步骤
1.定义一个类JDBCUtils
2.提供静态代码块加载配置文件,初始化连接池对象
3.提供方法
1.获取连接方法:通过数据库连接池获取
2.释放资源
3.获取连接池的方法
实例
详细的注释都写在代码中了!
package com.caq.datasource.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * Druid连接池工具类 */ public class JDBCUtils { //1.定义成员变量 DataSource private static DataSource ds; static { try { //1.加载配置文件 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //2.获取DataSource ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取连接 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 释放资源 */ //第一种情况,执行DML语句,需要释放connection数据库连接对象和statementsql语句执行对象 public static void close(Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn != null) { try { conn.close(); //归还连接,不在是释放了 } catch (SQLException throwables) { throwables.printStackTrace(); } } } //第二种情况,执行DQL语句,释放三个资源,conn,stmt和resultSet结果集对象 //这里写一个方法重载即可 public static void close(ResultSet rs, Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn != null) { try { conn.close(); //归还连接,不在是释放了 } catch (SQLException throwables) { throwables.printStackTrace(); } } } /** * 获取连接池的方法 */ public static DataSource getDataSource(){ return ds; } }
测试
package com.caq.datasource.druid; import com.caq.datasource.utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 使用新的工具类 */ public class DruidDemo02 { public static void main(String[] args) { /* 完成添加的操作 给account表添加一条记录 */ Connection conn = null; PreparedStatement pstmt = null; try { //1.获取连接 conn = JDBCUtils.getConnection(); //2.定义sql String sql = "insert into account values(null,?,?)"; //3.获取pstmt对象 pstmt = conn.prepareStatement(sql); //4.给sql赋值 pstmt.setString(1, "王五");//给第一个参数赋值为王五 pstmt.setDouble(2, 3000);//给第二个参数赋值为3000 //5.执行sql int count = pstmt.executeUpdate(); System.out.println(count); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { //6.释放资源 JDBCUtils.close(pstmt,conn); } } } 输出结果为 十月 21, 2021 8:40:18 下午 com.alibaba.druid.pool.DruidAbstractDataSource error 严重: maxIdle is deprecated 十月 21, 2021 8:40:19 下午 com.alibaba.druid.pool.DruidDataSource info 信息: {dataSource-1} inited 1
查看数据库
人直接傻掉,太强了,太好用了啊!!!!
比原生的使用JDBC方便很多啊!
小总结
通过这种把通用的部分抽象出来这种想法,要不断的锻炼 不管是以后我们写代码还是做事能很节省效率呢!!! 抽象的思维!!!
如果没想明白其实可以想象前面学的封装的概念,将大的项目封装成一个一个小的项目,互不影响,需要的时候直接调用即可!