1 package com.yub4by.util;
2
3 import java.io.FileReader;
4 import java.io.IOException;
5 import java.net.URL;
6 import java.sql.Connection;
7 import java.sql.DriverManager;
8 import java.sql.ResultSet;
9 import java.sql.Statement;
10 import java.sql.SQLException;
11 import java.util.Properties;
12
13 /*
14 * 目的:简化书写
15 * 分析:
16 1. 注册驱动也抽取
17 2. 抽取一个方法获取连接对象
18 * 需求:不想传递参数(麻烦),还得保证工具类的通用性。
19 * 解决:配置文件(src目录下)
20 jdbc.properties
21 url=
22 user=
23 password=
24 3. 抽取一个方法释放资源
25 */
26 /**
27 * JDBC工具类
28 */
29 public class JDBCUtils {
30 //静态成员变量才能够被静态代码块和静态成员方法所访问
31 private static String url;
32 private static String user;
33 private static String password;
34 private static String driver;
35
36 /**
37 * 读取配置文件,获取值
38 * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
39 */
40 static {
41 try {
42 //1 创建Properties集合类
43 Properties prop = new Properties();
44 //2 加载文件
45 //2.1 获取src路径下的文件的方式--->ClassLoader 类加载器
46 ClassLoader classLoader = JDBCUtils.class.getClassLoader();
47 URL res = classLoader.getResource("jdbc.properties");
48 String path = res.getPath(); //绝对路径
49 // System.out.println(path); //D:/Workspace-java/idea/Workspaces/itheima-javaweb/out/production/day05/jdbc.properties
50 prop.load(new FileReader(path));
51
52 //3 获取数据,赋值给静态成员变量
53 url = prop.getProperty("url");
54 user = prop.getProperty("user");
55 password = prop.getProperty("password");
56 driver = prop.getProperty("driver");
57
58 //4 注册驱动
59 /*try {
60 Class.forName(driver);
61 } catch (ClassNotFoundException e) {
62 e.printStackTrace();
63 }*/
64 Class.forName(driver);
65 } catch (IOException | ClassNotFoundException e) {
66 e.printStackTrace();
67 }
68 }
69
70 /**
71 * 获取连接
72 * @return 连接对象
73 */
74 public static Connection getConnection() throws SQLException {
75 return DriverManager.getConnection(url, user, password);
76 }
77
78 /**
79 * 释放资源
80 * @param stmt
81 * @param conn
82 */
83 public static void close(Statement stmt, Connection conn){
84
85 if (stmt != null){
86 try {
87 stmt.close();
88 } catch (SQLException e) {
89 e.printStackTrace();
90 }
91 }
92
93 if (conn != null){
94 try {
95 conn.close();
96 } catch (SQLException e) {
97 e.printStackTrace();
98 }
99 }
100
101 }
102
103 /**
104 * 释放资源
105 * @param rs
106 * @param stmt
107 * @param conn
108 */
109 public static void close(ResultSet rs, Statement stmt, Connection conn){ //重载
110
111 if (rs != null){
112 try {
113 rs.close();
114 } catch (SQLException e) {
115 e.printStackTrace();
116 }
117 }
118
119 if (stmt != null){
120 try {
121 stmt.close();
122 } catch (SQLException e) {
123 e.printStackTrace();
124 }
125 }
126
127 if (conn != null){
128 try {
129 conn.close();
130 } catch (SQLException e) {
131 e.printStackTrace();
132 }
133 }
134
135 }
136
137 }
url=jdbc:mysql://localhost:3306/???
user=???
password=???
driver=com.mysql.jdbc.Driver