package Ġkotlin . jdbc Ċ Ċ import Ġjava . sql .* Ċ import Ġjava . util . ArrayList Ċ Ċ /** Ċ Ġ* ĠExec utes Ġthe Ġspec f ied Ġblock Ġwith Ġresult Ġset Ġand Ġthen Ġcloses Ġit Ċ Ġ*/ Ċ public Ġfun Ġ< R > ĠResultSet . use ( block Ġ: Ġ( ResultSet ) Ġ-> ĠR ) Ġ: ĠR Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġblock ( this ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . close () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ * ĠCreates Ġan Ġiterator Ġthrough Ġa Ġ[[ ResultSet ]] Ċ */ Ċ fun ĠResultSet . iterator () Ġ: ĠIterator < ResultSet > Ġ{ ĊĠĠĠ Ġval Ġrs Ġ= Ġthis ĊĠĠĠ Ġreturn Ġobject Ġ: ĠIterator < ResultSet >{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġhas Next () Ġ: ĠBoolean Ġ= Ġrs . next () ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġnext () Ġ: ĠResultSet Ġ= Ġrs ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġiterable Ġthat Ġcalls Ġto Ġthe Ġspecified Ġmapper Ġfunction Ġfor Ġeach Ġrow Ċ Ġ*/ Ċ fun Ġ< T > ĠResultSet . map ( fn Ġ: Ġ( ResultSet ) Ġ-> ĠT ) Ġ: Ġjet . Iterable < T > Ġ{ ĊĠĠĠ Ġval Ġrs Ġ= Ġthis ĊĊĠĠĠ Ġval Ġiterator Ġ= Ġobject Ġ: ĠIterator < T >{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġhas Next () Ġ: ĠBoolean Ġ= Ġrs . next () ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġnext () Ġ: ĠT Ġ= Ġfn ( rs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġobject Ġ: Ġjet . Iterable < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ= Ġiterator ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġarray Ġwith Ġcolumn Ġnames Ċ Ġ*/ Ċ fun ĠResultSet . getColumn Names () Ġ: Ġjet . Array < String > Ġ{ ĊĠĠĠ Ġval Ġmeta Ġ= Ġget MetaData (). sure () ĊĠĠĠ Ġreturn Ġjet . Array < String >( meta . getColumn Count (), Ġ{ meta . get ColumnName ( it Ġ+ Ġ 1 ) Ġ?: Ġit . toString () }) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturn Ġarray Ġfilled Ġwith Ġvalues Ġfrom Ġcurrent Ġrow Ġin Ġthe Ġcursor . ĠValues Ġwill Ġhave Ġthe Ġsame Ġorder Ġas Ġcolumn 's Ġorder Ċ Ġ* Ġ@ column Names Ġyou Ġcan Ġspecify Ġcolumn Ġnames Ġto Ġextract Ġotherwise Ġall Ġcolumns Ġwill Ġbe Ġextracted Ċ Ġ*/ Ċ fun ĠResultSet . getValues ( column Names Ġ: Ġjet . Array < String > Ġ= Ġget Column Names ()) Ġ: Ġjet . Array < Any ?> Ġ{ ĊĠĠĠ Ġreturn Ġjet . Array < Any ? >( column Names . size , Ġ{ ĊĠĠĠĠĠĠĠ Ġthis [ column Names [ it ]] ĊĠĠĠ Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturn Ġmap Ġfilled Ġwith Ġvalues Ġfrom Ġcurrent Ġrow Ġin Ġthe Ġcursor . ĠUses Ġcolumn Ġnames Ġas Ġkeys Ġfor Ġresult Ġmap . Ċ Ġ* Ġ@ param Ġcolumn Names Ġyou Ġcan Ġspecify Ġcolumn Ġnames Ġto Ġextract Ġotherwise Ġall Ġcolumns Ġwill Ġbe Ġextracted Ċ Ġ*/ Ċ fun ĠResultSet . getValues As Map ( column Names Ġ: Ġjet . Array < String > Ġ= Ġget Column Names ()) Ġ: ĠMap < String , ĠAny ?> Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġjava . util . HashMap < String , ĠAny ? >( column Names . size ) ĊĊĠĠĠ Ġcolumn Names . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġresult [ it ] Ġ= Ġthis [ it ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvalue Ġat Ġthe Ġgiven Ġcolumn Ġindex Ġ( starting Ġat Ġ 1 ) Ċ Ġ*/ Ċ fun ĠResultSet . get ( column Id : ĠInt ): ĠAny ? Ġ= Ġthis . getObject ( column Id ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvalue Ġat Ġthe Ġgiven Ġcolumn Ġname Ċ Ġ*/ Ċ fun ĠResultSet . get ( columnName : ĠString ): ĠAny ? Ġ= Ġthis . getObject ( columnName ) Ċ Ċ private Ġfun ĠResultSet . ensure Has Row () Ġ: ĠResultSet Ġ{ ĊĠĠĠ Ġif Ġ(! next ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" There Ġare Ġno Ġrows Ġleft Ġin Ġcursor ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġint Ġvalue Ġfrom Ġthe Ġcursor Ġat Ġfirst Ġcolumn . ĠMay Ġbe Ġuseful Ġto Ġget Ġresult Ġof Ġcount (*) Ċ Ġ*/ Ċ fun ĠResultSet . single Int () Ġ: ĠInt Ġ= Ġensure Has Row (). getInt ( 1 ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġlong Ġvalue Ġfrom Ġthe Ġcursor Ġat Ġfirst Ġcolumn . Ċ Ġ*/ Ċ fun ĠResultSet . single Long () Ġ: ĠLong Ġ= Ġensure Has Row (). getLong ( 1 ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġdouble Ġvalue Ġfrom Ġthe Ġcursor Ġat Ġfirst Ġcolumn . Ċ Ġ*/ Ċ fun ĠResultSet . single Double () Ġ: ĠDouble Ġ= Ġensure Has Row (). getDouble ( 1 ) ĊĊ