JDBC系列--Druid工具类

简介: JDBC系列--Druid工具类

我们前面有写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

查看数据库


image.png

人直接傻掉,太强了,太好用了啊!!!!

比原生的使用JDBC方便很多啊!


小总结


通过这种把通用的部分抽象出来这种想法,要不断的锻炼 不管是以后我们写代码还是做事能很节省效率呢!!! 抽象的思维!!!

如果没想明白其实可以想象前面学的封装的概念,将大的项目封装成一个一个小的项目,互不影响,需要的时候直接调用即可!


相关文章
|
6月前
|
Java 数据库连接
JDBC跨平台封装工具类
JDBC跨平台封装工具类
|
6月前
|
druid Java 数据库连接
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
136 0
|
Java 关系型数据库 MySQL
JDBC连接数据库工具类
JDBC连接数据库工具类
|
Java 数据库连接
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
81 0
|
1月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
33 0
|
5月前
|
SQL Java 数据库连接
老程序员分享:JDBC工具类封装、封装DAO方法与数据库表实体类封装的使用案列详情
老程序员分享:JDBC工具类封装、封装DAO方法与数据库表实体类封装的使用案列详情
|
5月前
|
SQL druid Java
JDBC、C3P0、DBCP、Druid 数据源连接池使用的对比总结.md2
JDBC、C3P0、DBCP、Druid 数据源连接池使用的对比总结.md
36 0
|
5月前
|
SQL druid Java
JDBC、C3P0、DBCP、Druid 数据源连接池使用的对比总结.md1
JDBC、C3P0、DBCP、Druid 数据源连接池使用的对比总结.md
59 0
|
Java 数据库连接
Java 中封装JDBC连接到JDBCUtils工具类的详解
Java 中封装JDBC连接到JDBCUtils工具类的详解
88 0
|
6月前
|
SQL 存储 Java
JDBC技术【封装JDBC工具类、Statement的使用、PreparedStatement的使用(重点)、ResultSet的使用】(二)-全面详解(学习总结---从入门到深化)
JDBC技术【封装JDBC工具类、Statement的使用、PreparedStatement的使用(重点)、ResultSet的使用】(二)-全面详解(学习总结---从入门到深化)
388 0
下一篇
无影云桌面