Skip to content

Instantly share code, notes, and snippets.

@pereira-a
Last active March 29, 2019 00:14
Show Gist options
  • Save pereira-a/ab357581495f7a9394c8bce43055a19f to your computer and use it in GitHub Desktop.
Save pereira-a/ab357581495f7a9394c8bce43055a19f to your computer and use it in GitHub Desktop.
Convert a SQL ResultSet to json format
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class ResultsetConverter {
public static JsonNode convertToJson(ResultSet rs){
if(rs == null) return null;
ObjectMapper mapper = new ObjectMapper();
try {
ResultSetMetaData rsmd = rs.getMetaData();
ObjectNode first = null;
ArrayNode array = null;
if(rs.next()){
first = getObjectNode(rs, mapper, rsmd);
}
while(rs.next()){
if(array == null){
array = mapper.createArrayNode();
array.add(first);
}
array.add(getObjectNode(rs, mapper, rsmd));
}
return array == null ? first : array;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
private static ObjectNode getObjectNode(ResultSet rs, ObjectMapper mapper, ResultSetMetaData rsmd){
ObjectNode obj = mapper.createObjectNode();
try {
int columnCount = rsmd.getColumnCount();
for(int i = 1; i <= columnCount; i++){
String column = rsmd.getColumnName(i);
Object value = rs.getObject(i);
if(value == null){
obj.putNull(column);
}else if(value instanceof String){
obj.put(column, (String) value);
}else if(value instanceof Integer){
obj.put(column, (Integer) value);
}else {
throw new IllegalArgumentException("Unmappable object type: " + value.getClass());
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment