Como criar uma classe genérica para lidar com ResultSets em Java e Kotlin?
O ruim dos ResultSets do JDBC em Java, Kotlin, Groovy, etc é que você precisa fazer o parse manual de cada consulta. Para deixar isso genérico você pode:
Em Kotlin
Usando um Hikari Data Source
Função em Kotlin para obter um List
@Throws(SQLException::class)fun queryToList(cp: HikariDataSource, query: String): List
Função em Kotlin para obter um Map
@Throws(SQLException::class)fun queryToMap(cp: HikariDataSource, query: String, idColumnName: String): Map > { val con = cp.connection val st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY) val rs = st.executeQuery(query) val md = rs.metaData val columns = md.columnCount val rows = mutableMapOf >() while (rs.next()) { val row = mutableMapOf () for (i in 1..columns) { row[md.getColumnName(i)] = rs.getObject(i) } rows[row[idColumnName] as Int] = row } rs.close() st.close() con.close() return rows }
Referências
Jeito eficiente de lidar com ResultSet em Java
https://stackoverflow.com/questions/7507121/efficient-way-to-handle-resultset-in-java
Usando Try With Resources no Kotlin
https://www.baeldung.com/kotlin-try-with-resources