首页 > 数据库 >数据库连接池druid和JdbcTemplate

数据库连接池druid和JdbcTemplate

时间:2023-02-22 08:44:26浏览次数:45  
标签:java druid SQLException JdbcTemplate conn sql import 连接池

使用数据库连接池的原因

1.之前每一次访问数据库都需要获取连接,经过操作后再释放连接。消耗资源,代码量多。

 

 2.获取连接的操作是向系统底层申请资源,是非常耗时的,使用已经申请好的容器会使操作速度提高。

 

 实现

 

 Druid基本使用

 

 

 druid.properties配置文件

druid.properties配置文件(mysql低版本):

 

druid.properties配置文件(mysql高版本):

 

以下是我在8.0.31版本下可用的druid.properties配置文件

1 driverClassName=com.mysql.cj.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/contract?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=yes&rewriteBatchedStatements=true
3 username=root
4 password=666666
5 initialSize=5
6 maxActive=10
7 maxWait=3000

 

Druid工具类

按上文的步骤,每次使用时都需要创建一个连接池、加载配置文件、获取工厂、创建连接池对象、最后获取连接。过程依然繁琐,而理想情况下连接池只需要一个,故而定义一个工具类。

 

提供获取连接池方法的原因:有的工具类或小框架里,只需要一个连接池,不需要连接对象,它会自己调用连接池的获取连接方法。

工具类JDBCUtils.java:

  1 package cn.itcast.utils;
  2 
  3 import com.alibaba.druid.pool.DruidDataSourceFactory;
  4 
  5 import javax.sql.DataSource;
  6 import java.io.IOException;
  7 import java.sql.Connection;
  8 import java.sql.ResultSet;
  9 import java.sql.SQLException;
 10 import java.sql.Statement;
 11 import java.util.Properties;
 12 
 13 /**
 14  * Druid连接池的工具类
 15  */
 16 public class JDBCUtils {
 17 
 18     //1.定义成员变量 DataSource
 19     private static DataSource ds ;
 20 
 21     static{
 22         try {
 23             //1.加载配置文件
 24             Properties pro = new Properties();
 25             pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
 26             //2.获取DataSource
 27             ds = DruidDataSourceFactory.createDataSource(pro);
 28         } catch (IOException e) {
 29             e.printStackTrace();
 30         } catch (Exception e) {
 31             e.printStackTrace();
 32         }
 33     }
 34 
 35     /**
 36      * 获取连接
 37      */
 38     public static Connection getConnection() throws SQLException {
 39         return ds.getConnection();
 40     }
 41 
 42     /**
 43      * 释放资源
 44      */
 45     public static void close(Statement stmt,Connection conn){
 46        /* if(stmt != null){
 47             try {
 48                 stmt.close();
 49             } catch (SQLException e) {
 50                 e.printStackTrace();
 51             }
 52         }
 53 
 54         if(conn != null){
 55             try {
 56                 conn.close();//归还连接
 57             } catch (SQLException e) {
 58                 e.printStackTrace();
 59             }
 60         }*/
 61 
 62        close(null,stmt,conn);
 63     }
 64 
 65 
 66     public static void close(ResultSet rs , Statement stmt, Connection conn){
 67 
 68 
 69         if(rs != null){
 70             try {
 71                 rs.close();
 72             } catch (SQLException e) {
 73                 e.printStackTrace();
 74             }
 75         }
 76 
 77 
 78         if(stmt != null){
 79             try {
 80                 stmt.close();
 81             } catch (SQLException e) {
 82                 e.printStackTrace();
 83             }
 84         }
 85 
 86         if(conn != null){
 87             try {
 88                 conn.close();//归还连接
 89             } catch (SQLException e) {
 90                 e.printStackTrace();
 91             }
 92         }
 93     }
 94 
 95     /**
 96      * 获取连接池方法
 97      */
 98 
 99     public static DataSource getDataSource(){
100         return  ds;
101     }
102 
103 }

 

工具类的演示使用:

 1 package cn.itcast.datasource.druid;
 2 
 3 import cn.itcast.utils.JDBCUtils;
 4 
 5 import java.sql.Connection;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.sql.SQLException;
 9 
10 /**
11  * 使用新的工具类
12  */
13 public class DruidDemo2 {
14 
15     public static void main(String[] args) {
16         /*
17          * 完成添加操作:给account表添加一条记录
18          */
19         Connection conn = null;
20         PreparedStatement pstmt = null;
21         try {
22             //1.获取连接
23             conn = JDBCUtils.getConnection();
24             //2.定义sql
25             String sql = "insert into account values(null,?,?)";
26             //3.获取pstmt对象
27             pstmt = conn.prepareStatement(sql);
28             //4.给?赋值
29             pstmt.setString(1,"王五");
30             pstmt.setDouble(2,3000);
31             //5.执行sql
32             int count = pstmt.executeUpdate();
33             System.out.println(count);
34         } catch (SQLException e) {
35             e.printStackTrace();
36         }finally {
37             //6. 释放资源
38             JDBCUtils.close(pstmt,conn);
39         }
40     }
41 
42 }

 

Spring JDBC

在上文演示的基础上进一步简化代码。

 

 演示:

 

 

标签:java,druid,SQLException,JdbcTemplate,conn,sql,import,连接池
From: https://www.cnblogs.com/ban-boi-making-dinner/p/17140094.html

相关文章