diff --git a/src/plugins/coreplugin/settingsdatabase.cpp b/src/plugins/coreplugin/settingsdatabase.cpp
index b26cb188f3a66a74895cb09ec596d674cdc0864e..00958a7a67f8b67d5c2fad7717a60eb9bcc7696b 100644
--- a/src/plugins/coreplugin/settingsdatabase.cpp
+++ b/src/plugins/coreplugin/settingsdatabase.cpp
@@ -31,6 +31,7 @@
 
 #include <QtCore/QMap>
 #include <QtSql/QSqlDatabase>
+#include <QtSql/QSqlError>
 #include <QtSql/QSqlQuery>
 #include <QDebug>
 
@@ -101,21 +102,24 @@ SettingsDatabase::SettingsDatabase(const QString &path,
 
     d->m_db = QSqlDatabase::addDatabase("QSQLITE", QLatin1String("settings"));
     d->m_db.setDatabaseName(fileName);
-    if (!d->m_db.open())
-        qWarning() << "Warning: Failed to open settings database!";
-
-    // Create the settings table if it doesn't exist yet
-    QSqlQuery query(d->m_db);
-    query.prepare(QLatin1String("CREATE TABLE IF NOT EXISTS settings ("
-                                "key PRIMARY KEY ON CONFLICT REPLACE, "
-                                "value)"));
-    if (d->m_db.isOpen() && !query.exec())
-        qWarning() << "Warning: Failed to prepare settings database!";
-
-    // Retrieve all available keys (values are retrieved lazily)
-    if (query.exec(QLatin1String("SELECT key FROM settings"))) {
-        while (query.next()) {
-            d->m_settings.insert(query.value(0).toString(), QVariant());
+    if (!d->m_db.open()) {
+        qWarning().nospace() << "Warning: Failed to open settings database at " << fileName << " ("
+                             << d->m_db.lastError().driverText() << ")";
+    } else {
+        // Create the settings table if it doesn't exist yet
+        QSqlQuery query(d->m_db);
+        query.prepare(QLatin1String("CREATE TABLE IF NOT EXISTS settings ("
+                                    "key PRIMARY KEY ON CONFLICT REPLACE, "
+                                    "value)"));
+        if (!query.exec())
+            qWarning().nospace() << "Warning: Failed to prepare settings database! ("
+                                 << query.lastError().driverText() << ")";
+
+        // Retrieve all available keys (values are retrieved lazily)
+        if (query.exec(QLatin1String("SELECT key FROM settings"))) {
+            while (query.next()) {
+                d->m_settings.insert(query.value(0).toString(), QVariant());
+            }
         }
     }
 }
@@ -135,6 +139,9 @@ void SettingsDatabase::setValue(const QString &key, const QVariant &value)
     // Add to cache
     d->m_settings.insert(effectiveKey, value);
 
+    if (!d->m_db.isOpen())
+        return;
+
     // Instant apply (TODO: Delay writing out settings)
     QSqlQuery query(d->m_db);
     query.prepare(QLatin1String("INSERT INTO settings VALUES (?, ?)"));
@@ -154,7 +161,7 @@ QVariant SettingsDatabase::value(const QString &key, const QVariant &defaultValu
     SettingsMap::const_iterator i = d->m_settings.constFind(effectiveKey);
     if (i != d->m_settings.constEnd() && i.value().isValid()) {
         value = i.value();
-    } else {
+    } else if (d->m_db.isOpen()) {
         // Try to read the value from the database
         QSqlQuery query(d->m_db);
         query.prepare(QLatin1String("SELECT value FROM settings WHERE key = ?"));
@@ -183,13 +190,6 @@ void SettingsDatabase::remove(const QString &key)
 {
     const QString effectiveKey = d->effectiveKey(key);
 
-    // Delete keys from the database
-    QSqlQuery query(d->m_db);
-    query.prepare(QLatin1String("DELETE FROM settings WHERE key = ? OR key LIKE ?"));
-    query.addBindValue(effectiveKey);
-    query.addBindValue(effectiveKey + QLatin1String("/%"));
-    query.exec();
-
     // Remove keys from the cache
     foreach (const QString &k, d->m_settings.keys()) {
         // Either it's an exact match, or it matches up to a /
@@ -200,6 +200,16 @@ void SettingsDatabase::remove(const QString &key)
             d->m_settings.remove(k);
         }
     }
+
+    if (!d->m_db.isOpen())
+        return;
+
+    // Delete keys from the database
+    QSqlQuery query(d->m_db);
+    query.prepare(QLatin1String("DELETE FROM settings WHERE key = ? OR key LIKE ?"));
+    query.addBindValue(effectiveKey);
+    query.addBindValue(effectiveKey + QLatin1String("/%"));
+    query.exec();
 }
 
 void SettingsDatabase::beginGroup(const QString &prefix)