title: Most efficient conversion of ResultSet to JSON?
body: <p>The following code converts a <code>ResultSet</code> to a JSON string using <a href="http://www.json.org/javadoc/org/json/JSONArray.html"><code>JSONArray</code></a> and <a href="http://www.json.org/javadoc/org/json/JSONObject.html"><code>JSONObject</code></a>.</p>
  
  <pre><code>import org.json.JSONArray;
  import org.json.JSONObject;
  import org.json.JSONException;
  
  import java.sql.SQLException;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  
  public class ResultSetConverter {
    public static JSONArray convert( ResultSet rs )
      throws SQLException, JSONException
    {
      JSONArray json = new JSONArray();
      ResultSetMetaData rsmd = rs.getMetaData();
  
      while(rs.next()) {
        int numColumns = rsmd.getColumnCount();
        JSONObject obj = new JSONObject();
  
        for (int i=1; i&lt;numColumns+1; i++) {
          String column_name = rsmd.getColumnName(i);
  
          if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){
           obj.put(column_name, rs.getArray(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
           obj.put(column_name, rs.getInt(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
           obj.put(column_name, rs.getBoolean(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){
           obj.put(column_name, rs.getBlob(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
           obj.put(column_name, rs.getDouble(column_name)); 
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
           obj.put(column_name, rs.getFloat(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
           obj.put(column_name, rs.getInt(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
           obj.put(column_name, rs.getNString(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
           obj.put(column_name, rs.getString(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
           obj.put(column_name, rs.getInt(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
           obj.put(column_name, rs.getInt(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
           obj.put(column_name, rs.getDate(column_name));
          }
          else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
          obj.put(column_name, rs.getTimestamp(column_name));   
          }
          else{
           obj.put(column_name, rs.getObject(column_name));
          }
        }
  
        json.put(obj);
      }
  
      return json;
    }
  }
  </code></pre>
  
  <ul>
  <li>Is there a faster way?</li>
  <li>Is there a way that uses less memory?</li>
  </ul>