close statement on all DbAdaptorTemplate paths
diff --git a/src/com/google/enterprise/adaptor/examples/DbAdaptorTemplate.java b/src/com/google/enterprise/adaptor/examples/DbAdaptorTemplate.java
index 4eab821..ed37c18 100644
--- a/src/com/google/enterprise/adaptor/examples/DbAdaptorTemplate.java
+++ b/src/com/google/enterprise/adaptor/examples/DbAdaptorTemplate.java
@@ -177,9 +177,19 @@
       String query) throws SQLException {
     Statement st = conn.createStatement();
     log.fine("about to query: " + query);
-    ResultSet rs = st.executeQuery(query);
-    log.fine("queried");
-    return new StatementAndResult(st, rs); 
+    try {
+      ResultSet rs = st.executeQuery(query);
+      log.fine("queried");
+      return new StatementAndResult(st, rs); 
+    } catch (SQLException sqle) {
+      try {
+        st.close();  // could mask originl sqle
+      } catch (SQLException maskingSqle) {
+        log.log(Level.WARNING, 
+            "failed to close after query failure", maskingSqle);
+      }
+      throw sqle;
+    }
   }
 
   private static StatementAndResult getStreamFromDb(Connection conn,
@@ -189,9 +199,19 @@
         /* 2nd streaming flag */ java.sql.ResultSet.CONCUR_READ_ONLY);
     st.setFetchSize(/*3rd streaming flag*/ Integer.MIN_VALUE);
     log.fine("about to query for stream: " + query);
-    ResultSet rs = st.executeQuery(query);
-    log.fine("queried for stream");
-    return new StatementAndResult(st, rs); 
+    try {
+      ResultSet rs = st.executeQuery(query);
+      log.fine("queried for stream");
+      return new StatementAndResult(st, rs); 
+    } catch (SQLException sqle) {
+      try {
+        st.close();  // could mask originl sqle
+      } catch (SQLException maskingSqle) {
+        log.log(Level.WARNING,
+            "failed to close after query failure", maskingSqle);
+      }
+      throw sqle;
+    }
   }
 
   private static void tryClosingStatementAndResult(StatementAndResult strs) {