Il punto è stai facendo "troppe" Connection!!!
La funzione getClient() restituisce una NUOVA Connection ogni volta.
val statement: Statement = getClient().createStatement()
qui ottieni una Connection, ci invochi subito createStatement() ma della Connection NON mantieni il riferimento e quindi NON la chiudi.
getClient().commit()
qui stai committando una Connection appena creata .. è inutile.
getClient().close()
qui stai facendo il close() (corretto) ma di una Connection su cui non hai fatto nulla.
In sostanza, non può funzionare correttamente così (e non ha senso).
Quindi le soluzioni:
- o fai tutta la "solita" trafila di operazioni tipiche dell'uso diretto di JDBC.
- o usi un qualche framework/libreria apposito (anche solo MyBatis, per dire).
- o, per evitare la "solita" trafila di operazioni, ti fai una sorta di JDBC "template" (concettualmente similare al JdbcTemplate di Spring) anche se ovviamente limitato/ristretto ai tuoi casi d'uso.