Skip to content

Commit 30a33e6

Browse files
committed
Close PreparedStatements and other database connections when idle.
Reference: https://stackoverflow.com/questions/5802100/tomcat-connection-pool-creating-too-many-connections-stuck-in-sleep-mode Signed-off-by: Ankur Paul <[email protected]>
1 parent f468b9d commit 30a33e6

File tree

1 file changed

+58
-0
lines changed
  • Track 4_ReactJS_Web Development/Project/Backend/API/demo/src/main/java/connection/db

1 file changed

+58
-0
lines changed

Track 4_ReactJS_Web Development/Project/Backend/API/demo/src/main/java/connection/db/DBConnection.java

+58
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
import java.sql.ResultSet;
1010
import java.sql.ResultSetMetaData;
1111
import java.sql.SQLException;
12+
import java.sql.Statement;
1213
import java.sql.Timestamp;
1314
import java.text.DateFormat;
1415
import java.text.SimpleDateFormat;
1516
import java.util.ArrayList;
1617
import java.util.HashMap;
1718
import java.util.List;
1819
import java.util.Map;
20+
import java.util.concurrent.locks.Lock;
1921

2022
public class DBConnection {
2123
private static List<Map<String, Object>> tableMetaData;
@@ -232,6 +234,8 @@ public static List<Map<String, Object>> executeQuery(String query, Object... par
232234
rows.addAll(tableMetaData);
233235
} catch (Exception e) {
234236
System.out.println(e.getMessage());
237+
} finally {
238+
closeAll(statement); // Close the statement object
235239
}
236240

237241
/*
@@ -242,6 +246,60 @@ public static List<Map<String, Object>> executeQuery(String query, Object... par
242246
return rows;
243247
}
244248

249+
/**
250+
* Close a bunch of things carefully, ignoring exceptions. The
251+
* “things” supported, thus far, are:
252+
* <ul>
253+
* <li>JDBC ResultSet</li>
254+
* <li>JDBC Statement</li>
255+
* <li>JDBC Connection</li>
256+
* <li>Lock:s</li>
257+
* </ul>
258+
* <p>
259+
* This is mostly meant for “finally” clauses.
260+
*
261+
* @param objects A set of SQL statements, result sets, and database
262+
* connections
263+
*/
264+
public static void closeAll(final Object... objects) {
265+
for (Object object : objects) {
266+
if (object != null) {
267+
try {
268+
if (object instanceof ResultSet) {
269+
try {
270+
((ResultSet) object).close();
271+
} catch (final SQLException e) {
272+
/* No Op */
273+
}
274+
}
275+
if (object instanceof Statement) {
276+
try {
277+
((Statement) object).close();
278+
} catch (final SQLException e) {
279+
/* No Op */
280+
}
281+
}
282+
if (object instanceof Connection) {
283+
try {
284+
((Connection) object).close();
285+
} catch (final SQLException e) {
286+
/* No Op */
287+
}
288+
}
289+
if (object instanceof Lock) {
290+
try {
291+
((Lock) object).unlock();
292+
} catch (final IllegalMonitorStateException e) {
293+
/* No Op */
294+
}
295+
}
296+
} catch (final RuntimeException e) {
297+
/* No Op */
298+
}
299+
}
300+
}
301+
}
302+
245303
@Override
246304
public boolean equals(Object o) {
247305
if (this == o) return true;

0 commit comments

Comments
 (0)