diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
index 2d7bd75..5561707 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
@@ -102,6 +102,9 @@
 
     for (Id id : idList) {
       account = accountResolver.find(id.toString());
+      if (account == null) {
+        throw new UnloggedFailure("Account " + id.toString() + " does not exist.");
+      }
       stdout.println("Full name:         " + account.getFullName());
       stdout.println("Account Id:        " + id.toString());
       stdout.println("Preferred Email:   " + account.getPreferredEmail());
@@ -111,36 +114,38 @@
 
       final ReviewDb db = schema.open();
 
-      stdout.println("");
-      stdout.println("External Ids:");
-      stdout.println(String
-          .format("%-50s %s", "Email Address:", "External Id:"));
-      for (AccountExternalId accountExternalId : db.accountExternalIds()
-          .byAccount(account.getId())) {
-        stdout.println(String.format("%-50s %s",
-            (accountExternalId.getEmailAddress() == null ? ""
-                : accountExternalId.getEmailAddress()), accountExternalId
-                .getExternalId()));
-      }
-
-      if (showKeys) {
+      try {
         stdout.println("");
-        stdout.println("Public Keys:");
-        List<AccountSshKey> sshKeys =
-            db.accountSshKeys().byAccount(account.getId()).toList();
-        if (sshKeys == null || sshKeys.isEmpty()) {
-          stdout.println("None");
-        } else {
-          stdout.println(String.format("%-9s %s", "Status:", "Key:"));
-          for (AccountSshKey sshKey : sshKeys) {
-            stdout.println(String.format("%-9s %s", (sshKey.isValid()
-                ? "Active" : "Inactive"), sshKey.getSshPublicKey()));
+        stdout.println("External Ids:");
+        stdout.println(String
+            .format("%-50s %s", "Email Address:", "External Id:"));
+        for (AccountExternalId accountExternalId : db.accountExternalIds()
+            .byAccount(account.getId())) {
+          stdout.println(String.format("%-50s %s",
+              (accountExternalId.getEmailAddress() == null ? ""
+                  : accountExternalId.getEmailAddress()), accountExternalId
+                  .getExternalId()));
+        }
+
+        if (showKeys) {
+          stdout.println("");
+          stdout.println("Public Keys:");
+          List<AccountSshKey> sshKeys =
+              db.accountSshKeys().byAccount(account.getId()).toList();
+          if (sshKeys == null || sshKeys.isEmpty()) {
+            stdout.println("None");
+          } else {
+            stdout.println(String.format("%-9s %s", "Status:", "Key:"));
+            for (AccountSshKey sshKey : sshKeys) {
+              stdout.println(String.format("%-9s %s", (sshKey.isValid()
+                  ? "Active" : "Inactive"), sshKey.getSshPublicKey()));
+            }
           }
         }
+      } finally {
+        db.close();
       }
 
-      db.close();
-
       if (showGroups) {
         stdout.println();
         stdout.println("Member of groups"
