esta excepción en realidad se genera porque cierra dos veces su base de datos, no porque no la haya cerrado.
entonces..
en ti close()
método, reemplace la siguiente línea en su código:
if (db != null) {
con:
if (db != null && db.isOpen()) {