questa eccezione viene effettivamente sollevata perché chiudi due volte il database, non perché non lo hai chiuso.
quindi..
in te close()
metodo, sostituisci la seguente riga nel tuo codice:
if (db != null) {
con:
if (db != null && db.isOpen()) {