9
9
import java .sql .ResultSet ;
10
10
import java .sql .ResultSetMetaData ;
11
11
import java .sql .SQLException ;
12
+ import java .sql .Statement ;
12
13
import java .sql .Timestamp ;
13
14
import java .text .DateFormat ;
14
15
import java .text .SimpleDateFormat ;
15
16
import java .util .ArrayList ;
16
17
import java .util .HashMap ;
17
18
import java .util .List ;
18
19
import java .util .Map ;
20
+ import java .util .concurrent .locks .Lock ;
19
21
20
22
public class DBConnection {
21
23
private static List <Map <String , Object >> tableMetaData ;
@@ -232,6 +234,8 @@ public static List<Map<String, Object>> executeQuery(String query, Object... par
232
234
rows .addAll (tableMetaData );
233
235
} catch (Exception e ) {
234
236
System .out .println (e .getMessage ());
237
+ } finally {
238
+ closeAll (statement ); // Close the statement object
235
239
}
236
240
237
241
/*
@@ -242,6 +246,60 @@ public static List<Map<String, Object>> executeQuery(String query, Object... par
242
246
return rows ;
243
247
}
244
248
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
+
245
303
@ Override
246
304
public boolean equals (Object o ) {
247
305
if (this == o ) return true ;
0 commit comments