forked from inkss/hotelbook-JavaWeb
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDBUtil.java
More file actions
63 lines (51 loc) · 1.72 KB
/
DBUtil.java
File metadata and controls
63 lines (51 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.inks.hb.common;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* 数据库工具类 - 使用连接池进行连接
*/
public class DBUtil {
private static ComboPooledDataSource dataSource;
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();// 本地线程对象
static {
try {
// 读取配置文件的mysql字段信息
dataSource = new ComboPooledDataSource("mysql");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* 通过连接池对象返回数据库连接
*
* @return Connection 连接对象
* @throws SQLException 数据库错误
*/
public static Connection getConnection() throws SQLException {
// 从threadLocal获得连接对象
Connection conn = threadLocal.get();
// 如果连接对象不存在或者是已经被关闭的,就从连接池取出一个连接对象返回,如果已经存在,就直接返回
if (conn == null || conn.isClosed()) {
conn = dataSource.getConnection();
// 设置到threadLocal中
threadLocal.set(conn);
}
return conn;
}
public static void close() {
// 从本地线程中获得连接
Connection conn = threadLocal.get();
try {
// 在连接不为空 且 没关闭时
if (conn != null && !conn.isClosed()) {
// 解除绑定
threadLocal.set(null);
// 关闭连接
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}