import org.json.JSONArray; import org.json.JSONObject; import java.sql.ResultSet; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; /** * Utility for converting ResultSets into some Output formats */ public class Convertor { /** * Convert a result set into a JSON Array * @param resultSet * @return a JSONArray * @throws Exception */ public static JSONArray convertResultSetIntoJSON(ResultSet resultSet) throws Exception { JSONArray jsonArray = new JSONArray(); while (resultSet.next()) { int total_rows = resultSet.getMetaData().getColumnCount(); JSONObject obj = new JSONObject(); for (int i = 0; i < total_rows; i++) { String columnName = resultSet.getMetaData().getColumnLabel(i + 1).toLowerCase(); Object columnValue = resultSet.getObject(i + 1); // if value in DB is null, then we set it to default value if (columnValue == null){ columnValue = "null"; } /* Next if block is a hack. In case when in db we have values like price and price1 there's a bug in jdbc - both this names are getting stored as price in ResulSet. Therefore when we store second column value, we overwrite original value of price. To avoid that, i simply add 1 to be consistent with DB. */ if (obj.has(columnName)){ columnName += "1"; } obj.put(columnName, columnValue); } jsonArray.put(obj); } return jsonArray; } public static int converBooleanIntoInt(boolean bool){ if (bool) return 1; else return 0; } public static int convertBooleanStringIntoInt(String bool){ if (bool.equals("false")) return 0; else if (bool.equals("true")) return 1; else { throw new IllegalArgumentException("wrong value is passed to the method. Value is "+bool); } } public static double getDoubleOutOfString(String value, String format, Locale locale){ DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(locale); otherSymbols.setDecimalSeparator('.'); DecimalFormat f = new DecimalFormat(format,otherSymbols); String formattedValue = f.format(Double.parseDouble(value)); double number = Double.parseDouble(formattedValue); return Math.round(number * 100.0) / 100.0; } }