-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPooledPreparedStatement.java
More file actions
118 lines (94 loc) · 2.47 KB
/
Copy pathPooledPreparedStatement.java
File metadata and controls
118 lines (94 loc) · 2.47 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package de.dfki.sds.aticsqlite;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
*
*/
public class PooledPreparedStatement {
private final PreparedStatement preparedStatement;
private final Set<ResultSet> openResultSets;
public PooledPreparedStatement(
PreparedStatement preparedStatement) {
if (preparedStatement == null) {
throw new IllegalArgumentException("preparedStatement must not be null");
}
this.preparedStatement = preparedStatement;
this.openResultSets = ConcurrentHashMap.newKeySet();
}
/**
* Returns the wrapped PreparedStatement.
*/
public PreparedStatement getPreparedStatement() {
return preparedStatement;
}
/**
* Registers a ResultSet as active.
*/
public void registerResultSet(
ResultSet rs) {
if (rs != null) {
openResultSets.add(rs);
}
}
/**
* Unregisters a ResultSet after close().
*/
public void unregisterResultSet(
ResultSet rs) {
if (rs != null) {
openResultSets.remove(rs);
}
}
/**
* Returns true if no ResultSet is active
* and the statement may safely be reused.
*/
public boolean isReusable() {
return openResultSets.isEmpty();
}
/**
* Returns the number of currently open ResultSets.
*/
public int getOpenResultSetCount() {
return openResultSets.size();
}
/**
* Returns true if the underlying statement
* has already been closed.
*/
public boolean isClosed()
throws SQLException {
return preparedStatement.isClosed();
}
/**
* Closes all tracked ResultSets.
*/
public void closeOpenResultSets() {
for (ResultSet rs : openResultSets) {
try {
rs.close();
} catch (Exception ignored) {
}
}
openResultSets.clear();
}
/**
* Closes ResultSets and PreparedStatement.
*/
public void close() {
closeOpenResultSets();
try {
preparedStatement.close();
} catch (Exception ignored) {
}
}
@Override
public String toString() {
return "PooledPreparedStatement{"
+ "openResultSets=" + openResultSets.size()
+ '}';
}
}