diff --git a/src/com/android/settings/search/DatabaseResultLoader.java b/src/com/android/settings/search/DatabaseResultLoader.java
index 73b383b..7815a45 100644
--- a/src/com/android/settings/search/DatabaseResultLoader.java
+++ b/src/com/android/settings/search/DatabaseResultLoader.java
@@ -17,6 +17,9 @@
 
 package com.android.settings.search;
 
+import static com.android.settings.search.IndexDatabaseHelper.IndexColumns;
+import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX;
+
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
@@ -28,9 +31,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import static com.android.settings.search.IndexDatabaseHelper.IndexColumns;
-import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX;
-
 /**
  * AsyncTask to retrieve Settings, First party app and any intent based results.
  */
@@ -191,10 +191,12 @@
      * @return A set of the matching results.
      */
     private Set<SearchResult> query(String whereClause, String[] selection, int baseRank) {
-        SQLiteDatabase database = IndexDatabaseHelper.getInstance(mContext).getReadableDatabase();
-        final Cursor resultCursor = database.query(TABLE_PREFS_INDEX, SELECT_COLUMNS, whereClause,
-                selection, null, null, null);
-        return mConverter.convertCursor(mSiteMapManager, resultCursor, baseRank);
+        final SQLiteDatabase database =
+                IndexDatabaseHelper.getInstance(mContext).getReadableDatabase();
+        try (Cursor resultCursor = database.query(TABLE_PREFS_INDEX, SELECT_COLUMNS, whereClause,
+                selection, null, null, null)) {
+            return mConverter.convertCursor(mSiteMapManager, resultCursor, baseRank);
+        }
     }
 
     /**
diff --git a/src/com/android/settings/search/SavedQueryLoader.java b/src/com/android/settings/search/SavedQueryLoader.java
index 87457f5..e8efe85 100644
--- a/src/com/android/settings/search/SavedQueryLoader.java
+++ b/src/com/android/settings/search/SavedQueryLoader.java
@@ -34,7 +34,7 @@
 public class SavedQueryLoader extends AsyncLoader<List<? extends SearchResult>> {
 
     // Max number of proposed suggestions
-    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    @VisibleForTesting
     static final int MAX_PROPOSED_SUGGESTIONS = 5;
 
     private final SQLiteDatabase mDatabase;
@@ -51,15 +51,17 @@
 
     @Override
     public List<? extends SearchResult> loadInBackground() {
-        Cursor cursor = mDatabase.query(IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES /* table */,
+        try (final Cursor cursor = mDatabase.query(
+                IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES /* table */,
                 new String[]{SavedQueriesColumns.QUERY} /* columns */,
                 null /* selection */,
                 null /* selectionArgs */,
                 null /* groupBy */,
                 null /* having */,
                 "rowId DESC" /* orderBy */,
-                String.valueOf(MAX_PROPOSED_SUGGESTIONS) /* limit */);
-        return convertCursorToResult(cursor);
+                String.valueOf(MAX_PROPOSED_SUGGESTIONS) /* limit */)) {
+            return convertCursorToResult(cursor);
+        }
     }
 
     private List<SearchResult> convertCursorToResult(Cursor cursor) {
