package Ġcz . dyn aw est . csv c run cher . util Ċ Ċ import Ġcz . dyn aw est . csv c run cher . Csv C run cher Exception Ċ import Ġjava . io . Buffered OutputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . OutputStream Writer Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . nio . file . Path Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . sql . SQLException Ċ import Ġjava . sql . Types Ċ import Ġjavax . json . Json Ċ import Ġjavax . json . JsonObject Builder Ċ Ċ object ĠJson Utils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrites Ġthe Ġgiven Ġresult set Ġto Ġa ĠJSON Ġfile Ġat Ġgiven Ġpath , Ġone Ġentry Ġper Ġline , Ġoptionally Ġas Ġan ĠJSON Ġarray . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġconvert Result ToJson ( resultSet : ĠResultSet , Ġdest File : ĠPath , Ġprint As Array : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered OutputStream ( File OutputStream ( dest File . to File ())). use Ġ{ Ġout S Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOutputStream Writer ( out S , ĠStandard Charsets . UTF _ 8 ). use Ġ{ Ġout W Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmetaData Ġ= ĠresultSet . metaData ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCache Ġwhich Ġcols Ġare Ġnumbers . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// boolean [] Ġcols Are Numbers Ġ= Ġcache Which Columns Need Json Quotes ( metaData ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( print As Array ) Ġout W . append ("[ \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( resultSet . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjavax . json Ġway ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠJson . createObject Builder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠColumns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( col Index Ġin Ġ 1 .. metaData . column Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd The Right Type To J avax Json Builder ( resultSet , Ġcol Index , Ġbuilder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠJson . create Writer ( out W ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Object ( jsonObject ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout W . append ( if Ġ( print As Array ) Ġ", \ n " Ġelse Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( print As Array ) Ġout W . append (" ]\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCsv C run cher Exception (" Failed Ġb rowsing Ġthe Ġfinal Ġquery Ġresults : Ġ" Ġ+ Ġex . message , Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġin Ġcase Ġwe Ġuse Ġjavax . json . Json Builder . ĊĠĠĠĠ Ġ* ĠThis Ġalso Ġneeds ĠJson Provider Impl . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( SQLException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġadd The Right Type To J avax Json Builder ( resultSet : ĠResultSet , Ġcol Index : ĠInt , Ġbuilder : ĠJsonObject Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmetaData Ġ= ĠresultSet . metaData ĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Label Ġ= ĠmetaData . getColumn Label ( col Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( column Label . matches ("[ A - Z ][ A - Z _ ]* ". to Regex ())) Ġcolumn Label Ġ= Ġcolumn Label . lowercase () ĊĠĠĠĠĠĠĠ Ġif Ġ( resultSet . getObject ( col Index ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Null ( column Label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( metaData . getColumn Type ( col Index )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . VARCHAR , ĠTypes . CHAR , ĠTypes . C LOB Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getString ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . TIN Y INT , ĠTypes . BIT Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getByte ( col Index ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . SMALLINT Ġ-> Ġbuilder . add ( column Label , ĠresultSet . get Short ( col Index ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . INTEGER Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getInt ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . BIG INT Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getLong ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . BOOLEAN Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getBoolean ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . FLOAT , ĠTypes . DOUBLE Ġ-> Ġbuilder . add ( column Label , ĠresultSet . getDouble ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . DECIMAL , ĠTypes . NUMERIC Ġ-> Ġbuilder . add ( column Label , ĠresultSet . get BigDecimal ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . DATE Ġ-> Ġbuilder . add ( column Label , Ġ"" Ġ+ ĠresultSet . getDate ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . TIME Ġ-> Ġbuilder . add ( column Label , Ġ"" Ġ+ ĠresultSet . getTime ( col Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . TIMESTAMP Ġ-> Ġbuilder . add ( column Label , Ġ( "" Ġ+ ĠresultSet . getTimestamp ( col Index )). replace (' Ġ', Ġ' T ')) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġbe Ġhandled Ġby ĠgetObject (), Ġbut Ġjust Ġin Ġcase ... ĊĠĠĠĠĠĠĠ Ġif Ġ( resultSet . was Null ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Null ( column Label ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }