基本概念

  1. - 概念:其实就是一个容器(集合),存放数据库连接的容器
  2. - 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
  3. - 好处:
  4. - 节约资源
  5. - 用户访问高效
  6. - 实现:
  7. - 标准接口:DateSource javax.sql包下的
  8. - 方法<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582206944560-ee8ecd38-a6b1-4703-b4b5-5bbf8d3e8a94.png#align=left&display=inline&height=99&name=image.png&originHeight=99&originWidth=435&size=82339&status=done&style=none&width=435)
  9. - 如果连接对象connection是从连接池中获取的,那么调用connection . close()方法则不会关闭连接而是归还连接
  10. - 一般不由我们实现,有数据厂商来实现
  11. - C3P0:数据库连接池技术
  12. - Druid:数据库连接池实现技术,由阿里巴巴提供

C3P0:数据库连接技术

1. 步骤

  1. - 导入jar包<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582207444215-4abf08b4-bd8a-4fdf-8a1c-b1fb135d5bdd.png#align=left&display=inline&height=31&name=image.png&originHeight=31&originWidth=808&size=49964&status=done&style=none&width=808)
  2. - 不搞这个了,难搞死了

Druid:数据库连接技术

1. 步骤

  1. - 导入jar包(只有一个)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582230320339-65c8f04f-e8cd-4b87-9f73-f8e04c40d9af.png#align=left&display=inline&height=31&name=image.png&originHeight=31&originWidth=178&size=1397&status=done&style=none&width=178)
  2. - 搞配置文件(这里有可能会报一个时间上的错,老方法解决,文件名是druid.properties)<br />
  1. driverClassName=com.mysql.cj.jdbc.Driver
  2. url=jdbc:mysql://127.0.0.1:3306/user?serverTimezone=UTC
  3. username=root
  4. password=root
  5. #初始化连接数量
  6. initialSize=5
  7. #最大连接数量
  8. maxActive=10
  9. #最大等待时间
  10. maxWait=3000
  11. maxIdle=8
  12. minIdle=3
  1. - 获取连接(这样可以用)<br />
  1. package druid;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import javax.sql.DataSource;
  4. import java.io.InputStream;
  5. import java.sql.Connection;
  6. import java.util.Properties;
  7. public class DruidDemo {
  8. public static void main(String[] args) throws Exception {
  9. //1.导入jar包,只有druid-1.0.9.jar
  10. //2.定义配置文件,即druid.properties
  11. //3.加载配置文件
  12. Properties pro = new Properties();
  13. InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
  14. pro.load(is);
  15. //4.获取连接池对象
  16. DataSource ds = DruidDataSourceFactory.createDataSource(pro);
  17. //5.获取连接
  18. Connection conn = ds.getConnection();
  19. System.out.println(conn);
  20. }
  21. }
  1. - 结果(一级棒)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582230512831-73369a22-c34c-4600-902a-0ffc42dce5db.png#align=left&display=inline&height=254&name=image.png&originHeight=254&originWidth=740&size=24462&status=done&style=none&width=740)
  2. - 基本步骤(注意配置文件随意放置,代码里需要路径)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582230604522-d1332b39-e323-4dc5-9242-2609cc6cfdc7.png#align=left&display=inline&height=265&name=image.png&originHeight=265&originWidth=1008&size=245961&status=done&style=none&width=1008)

2. 配合工具类使用

  1. - 注:关于汉字乱码的问题暂时没有好的办法解决,在sqlyog中乱码比较严重(已解决,详见杂)
  2. - 工具类的书写(类名叫做JDBCUtils,全部写静态方法)<br />
  1. package utils;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import javax.sql.DataSource;
  4. import java.io.IOException;
  5. import java.sql.Connection;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.Properties;
  10. /**
  11. * Druid连接池工具类
  12. */
  13. public class JDBCUtils {
  14. //定义成员变量DataSource
  15. private static DataSource ds;
  16. static {
  17. try {
  18. //加载配置文件
  19. Properties pro = new Properties();
  20. pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
  21. //2.获取DataSource
  22. ds = DruidDataSourceFactory.createDataSource(pro);
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. /**
  30. * 获取连接
  31. */
  32. public static Connection getConnection() throws SQLException {
  33. return ds.getConnection();
  34. }
  35. /**
  36. * 释放资源
  37. */
  38. public static void close(ResultSet rs ,Statement stmt, Connection conn){
  39. if(rs != null){
  40. try {
  41. rs.close();
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. if(stmt != null){
  47. try {
  48. stmt.close();
  49. } catch (SQLException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. if (conn != null){
  54. try {
  55. conn.close();//归还连接
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
  61. //假重载,直接穿空,可以简化代码
  62. public static void close(Statement stmt,Connection conn){
  63. close(null,stmt,conn);
  64. }
  65. /**
  66. * 获取连接池的方法
  67. */
  68. public static DataSource getDataSource(){
  69. return ds;
  70. }
  71. }
  1. - 工具类的使用(与连接池配合使用)
  1. package druid;
  2. import utils.JDBCUtils;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. public class DruidDemo {
  7. public static void main(String[] args) throws Exception {
  8. Connection conn=null;
  9. PreparedStatement pstmt=null;
  10. try {
  11. //获取连接
  12. conn = JDBCUtils.getConnection();
  13. //定义sql
  14. String sql = "insert into xiaoming values(?,?,?)";
  15. //获取pstmt对象
  16. pstmt = conn.prepareStatement(sql);
  17. //给?赋值
  18. pstmt.setString(1, "16");
  19. pstmt.setString(2, "明");
  20. pstmt.setString(3, "2020-01-28");
  21. //执行sql
  22. int count = pstmt.executeUpdate();
  23. System.out.println(count);
  24. }catch (SQLException e){
  25. e.printStackTrace();
  26. }finally {
  27. //释放资源
  28. JDBCUtils.close(pstmt,conn);
  29. }
  30. }
  31. }
  1. - 注意:
  2. - 这里使用了?来输入存储的数据

JDBCTemplate:快捷工具

1. 步骤

  1. - 导入jar包(一共有5个,如下)<br />[commons-logging-1.2.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995572624-ef0d8c9d-c4a0-4afa-a279-6e1e92ee6716.jar?_lake_card=%7B%22uid%22%3A%221582293114360-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995572624-ef0d8c9d-c4a0-4afa-a279-6e1e92ee6716.jar%22%2C%22name%22%3A%22commons-logging-1.2.jar%22%2C%22size%22%3A61829%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22IMLoy%22%2C%22card%22%3A%22file%22%7D)[spring-beans-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995572725-41c92f2b-06d2-4180-ba1d-fb5676d8e308.jar?_lake_card=%7B%22uid%22%3A%221582293114360-1%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995572725-41c92f2b-06d2-4180-ba1d-fb5676d8e308.jar%22%2C%22name%22%3A%22spring-beans-5.1.10.RELEASE.jar%22%2C%22size%22%3A673979%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22ahumy%22%2C%22card%22%3A%22file%22%7D)[spring-core-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995572842-be83d186-a8e4-4191-9632-d102288c95da.jar?_lake_card=%7B%22uid%22%3A%221582293114360-2%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995572842-be83d186-a8e4-4191-9632-d102288c95da.jar%22%2C%22name%22%3A%22spring-core-5.1.10.RELEASE.jar%22%2C%22size%22%3A1301116%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%227ju53%22%2C%22card%22%3A%22file%22%7D)[spring-jdbc-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995572961-28c799f8-eda7-4c27-92c2-1daf26ae53b3.jar?_lake_card=%7B%22uid%22%3A%221582293114360-3%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995572961-28c799f8-eda7-4c27-92c2-1daf26ae53b3.jar%22%2C%22name%22%3A%22spring-jdbc-5.1.10.RELEASE.jar%22%2C%22size%22%3A404657%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22bUpvb%22%2C%22card%22%3A%22file%22%7D)[spring-tx-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573054-15ae3192-9f49-445b-b2b6-7cb3c014143e.jar?_lake_card=%7B%22uid%22%3A%221582293114360-4%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573054-15ae3192-9f49-445b-b2b6-7cb3c014143e.jar%22%2C%22name%22%3A%22spring-tx-5.1.10.RELEASE.jar%22%2C%22size%22%3A256437%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22t0GEa%22%2C%22card%22%3A%22file%22%7D)
  2. - 使用演示(这里需要上文提到的自定义工具类)<br />
  1. package druid;
  2. import org.springframework.jdbc.core.JdbcTemplate;
  3. import utils.JDBCUtils;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.SQLException;
  7. public class DruidDemo {
  8. public static void main(String[] args) {
  9. //1.导入jar包
  10. //2.创建JDBCTemplate对象
  11. JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
  12. //3.调用方法
  13. String sql = "update xiaoming set name = 'ming' where age = 15";
  14. int count = template.update(sql);
  15. System.out.println(count);
  16. }
  17. }

2. 方法介绍

  1. - 所有方法简介<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582293358133-e96b3f32-f511-4f06-bf8d-50fba90fce2b.png#align=left&display=inline&height=162&name=image.png&originHeight=162&originWidth=791&size=248168&status=done&style=none&width=791)
  2. - 插入<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582294292415-22649504-4fa7-4ed6-a776-fae12c56eab9.png#align=left&display=inline&height=150&name=image.png&originHeight=150&originWidth=739&size=15100&status=done&style=none&width=739)
  3. - 删除<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582294411584-68beee44-c943-4e83-87aa-fc39fb389268.png#align=left&display=inline&height=84&name=image.png&originHeight=84&originWidth=590&size=7183&status=done&style=none&width=590)
  4. - 封装成Map对象(只能封装单个id)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582295919055-228f6cc0-9a94-4b53-a61f-b8c5d33147e3.png#align=left&display=inline&height=89&name=image.png&originHeight=89&originWidth=617&size=8303&status=done&style=none&width=617)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582295933159-e844a91b-6ac6-4e37-be6e-b4fa79e5ea49.png#align=left&display=inline&height=32&name=image.png&originHeight=32&originWidth=443&size=2175&status=done&style=none&width=443)
  5. - 将全部数据封装成list对象(成员是Map对象)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582296502033-d306f2e4-2cb6-412b-a99d-e08def48f4d7.png#align=left&display=inline&height=131&name=image.png&originHeight=131&originWidth=608&size=10738&status=done&style=none&width=608)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582296519903-b79200c9-4ea8-4c43-865c-2813ce4c9404.png#align=left&display=inline&height=77&name=image.png&originHeight=77&originWidth=514&size=6089&status=done&style=none&width=514)
  6. - 将全部记录封装为Emp对象的List集合(这个方法是比较方便的一个,只是被封装了)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582303138724-7b485395-6190-4ef4-ac40-e735e89106f4.png#align=left&display=inline&height=158&name=image.png&originHeight=158&originWidth=780&size=15428&status=done&style=none&width=780)<br />小前提(弄个Emp的类,加入getter,setter,tostring,注意类变量是数据库行名称,不能用基本类型)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582303272515-93cd990e-254d-4aa3-8b2b-dcc695616e06.png#align=left&display=inline&height=193&name=image.png&originHeight=193&originWidth=314&size=8497&status=done&style=none&width=314)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582303251746-b3573059-6ff0-4152-93c5-b559e22919be.png#align=left&display=inline&height=108&name=image.png&originHeight=108&originWidth=349&size=5240&status=done&style=none&width=349)
  7. - 查询总记录数(查询的总的数量而不是数字相加,queryForObject用来处理聚合函数)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582303721428-9fbd6f7a-ede7-4cc7-90d3-0f4badfd4045.png#align=left&display=inline&height=117&name=image.png&originHeight=117&originWidth=634&size=10657&status=done&style=none&width=634)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582303730853-959a28fb-8502-4f26-b093-f7e6cce70a45.png#align=left&display=inline&height=31&name=image.png&originHeight=31&originWidth=47&size=243&status=done&style=none&width=47)

3. 梳理

  1. - 需要导入的包
  2. - 数据库连接包<br />[mysql-connector-java-8.0.19.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573149-fbd04fa3-787d-485c-ba77-fb03a136b1a8.jar?_lake_card=%7B%22uid%22%3A%221582303835412-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573149-fbd04fa3-787d-485c-ba77-fb03a136b1a8.jar%22%2C%22name%22%3A%22mysql-connector-java-8.0.19.jar%22%2C%22size%22%3A2356711%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22Dgfqm%22%2C%22card%22%3A%22file%22%7D)
  3. - templata的包<br />[commons-logging-1.2.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573285-8fd7bfb6-9336-481d-861c-7b2e11a1c280.jar?_lake_card=%7B%22uid%22%3A%221582303890146-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573285-8fd7bfb6-9336-481d-861c-7b2e11a1c280.jar%22%2C%22name%22%3A%22commons-logging-1.2.jar%22%2C%22size%22%3A61829%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22G0N3f%22%2C%22card%22%3A%22file%22%7D)<br />[spring-beans-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573399-5fee85d9-3ff3-4398-9a7c-1cb91ffe89a4.jar?_lake_card=%7B%22uid%22%3A%221582303890146-1%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573399-5fee85d9-3ff3-4398-9a7c-1cb91ffe89a4.jar%22%2C%22name%22%3A%22spring-beans-5.1.10.RELEASE.jar%22%2C%22size%22%3A673979%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22bgZsL%22%2C%22card%22%3A%22file%22%7D)[spring-core-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573560-c22ab6fc-327a-416f-b773-5dec57bebdc9.jar?_lake_card=%7B%22uid%22%3A%221582303890146-2%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573560-c22ab6fc-327a-416f-b773-5dec57bebdc9.jar%22%2C%22name%22%3A%22spring-core-5.1.10.RELEASE.jar%22%2C%22size%22%3A1301116%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%227KoTc%22%2C%22card%22%3A%22file%22%7D)<br />[spring-jdbc-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573665-e5ceab61-04ce-4de9-9a28-fbd810aca2a6.jar?_lake_card=%7B%22uid%22%3A%221582303890146-3%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573665-e5ceab61-04ce-4de9-9a28-fbd810aca2a6.jar%22%2C%22name%22%3A%22spring-jdbc-5.1.10.RELEASE.jar%22%2C%22size%22%3A404657%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22QMdxH%22%2C%22card%22%3A%22file%22%7D)<br />[spring-tx-5.1.10.RELEASE.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573776-cf32c5d1-20c8-410e-b793-a4f44fe3b1d0.jar?_lake_card=%7B%22uid%22%3A%221582303890146-4%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573776-cf32c5d1-20c8-410e-b793-a4f44fe3b1d0.jar%22%2C%22name%22%3A%22spring-tx-5.1.10.RELEASE.jar%22%2C%22size%22%3A256437%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22P5PTp%22%2C%22card%22%3A%22file%22%7D)
  4. - 连接池的包包<br />[druid-1.0.9.jar](https://www.yuque.com/attachments/yuque/0/2020/jar/710889/1592995573894-1a07297f-f453-4101-a9ea-af2c53fc5b74.jar?_lake_card=%7B%22uid%22%3A%221582304010178-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2020%2Fjar%2F710889%2F1592995573894-1a07297f-f453-4101-a9ea-af2c53fc5b74.jar%22%2C%22name%22%3A%22druid-1.0.9.jar%22%2C%22size%22%3A1848389%2C%22type%22%3A%22%22%2C%22ext%22%3A%22jar%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22NBPn0%22%2C%22card%22%3A%22file%22%7D)
  5. - 需要创建的配置文件
  6. - **druid.properties**(用来建立与Mysql的连接,这里定义数据库)<br />
  1. driverClassName=com.mysql.cj.jdbc.Driver
  2. url=jdbc:mysql://127.0.0.1:3306/user?serverTimezone=UTC
  3. username=root
  4. password=root
  5. initialSize=5
  6. maxActive=10
  7. maxWait=3000
  8. maxIdle=8
  9. minIdle=3
  1. - **JDBCUtils**(Druid连接池的工具类)<br />
  1. package utils;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import javax.sql.DataSource;
  4. import java.io.IOException;
  5. import java.sql.Connection;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.Properties;
  10. /**
  11. * Druid连接池工具类
  12. */
  13. public class JDBCUtils {
  14. //定义成员变量DataSource
  15. private static DataSource ds;
  16. static {
  17. try {
  18. //加载配置文件
  19. Properties pro = new Properties();
  20. pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
  21. //2.获取DataSource
  22. ds = DruidDataSourceFactory.createDataSource(pro);
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. /**
  30. * 获取连接
  31. */
  32. public static Connection getConnection() throws SQLException {
  33. return ds.getConnection();
  34. }
  35. /**
  36. * 释放资源
  37. */
  38. public static void close(ResultSet rs ,Statement stmt, Connection conn){
  39. if(rs != null){
  40. try {
  41. rs.close();
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. if(stmt != null){
  47. try {
  48. stmt.close();
  49. } catch (SQLException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. if (conn != null){
  54. try {
  55. conn.close();//归还连接
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
  61. //假重载,直接穿空,可以简化代码
  62. public static void close(Statement stmt,Connection conn){
  63. close(null,stmt,conn);
  64. }
  65. /**
  66. * 获取连接池的方法
  67. */
  68. public static DataSource getDataSource(){
  69. return ds;
  70. }
  71. }
  1. - **Emp(**封装为JavaBean对象时需要用到的类,这里仅仅用于实验用的数据库,使用前要修改**)<br />**
  1. package domain;
  2. import java.util.Date;
  3. public class Emp {
  4. private Integer age;
  5. private String name;
  6. private Date birthday;
  7. public Integer getAge() {
  8. return age;
  9. }
  10. public void setAge(Integer age) {
  11. this.age = age;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public Date getBirthday() {
  20. return birthday;
  21. }
  22. public void setBirthday(Date birthday) {
  23. this.birthday = birthday;
  24. }
  25. @Override
  26. public String toString() {
  27. return "Emp{" +
  28. "age=" + age +
  29. ", name='" + name + '\'' +
  30. ", birthday=" + birthday +
  31. '}';
  32. }
  33. }
  1. - 总述<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582308282834-57ea6360-8149-4728-b2c5-af86e2594978.png#align=left&display=inline&height=583&name=image.png&originHeight=583&originWidth=518&size=51643&status=done&style=none&width=518)