使用数据库连接池的原因
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