I am trying to run the following MySQL query with my java code, I am getting column name instead of alias.
My SQL query is as,
SELECT
RESOURCE_SERVER_RESOURCE.ID as `rsid`,
RESOURCE_SERVER_RESOURCE.NAME as `rsname`,
JSON_ARRAYAGG(RESOURCE_SERVER_SCOPE.NAME) as `scopes`
FROM
POLICY_CONFIG
INNER JOIN ASSOCIATED_POLICY ON POLICY_CONFIG.POLICY_ID = ASSOCIATED_POLICY.ASSOCIATED_POLICY_ID
INNER JOIN RESOURCE_POLICY ON ASSOCIATED_POLICY.POLICY_ID = RESOURCE_POLICY.POLICY_ID
INNER JOIN RESOURCE_SERVER_RESOURCE ON RESOURCE_SERVER_RESOURCE.ID = RESOURCE_POLICY.RESOURCE_ID
LEFT JOIN SCOPE_POLICY ON ASSOCIATED_POLICY.POLICY_ID = SCOPE_POLICY.POLICY_ID
LEFT JOIN RESOURCE_SERVER_SCOPE ON RESOURCE_SERVER_SCOPE.ID = SCOPE_POLICY.SCOPE_ID
GROUP BY
RESOURCE_SERVER_RESOURCE.ID;
Query gives the correct output as I needed to be.
And my code is as follows,
public static List<Map<String, Object>> executeSelectQuery(String query) throws Exception {
List<Map<String, Object>> resultList = new ArrayList<>();
Connection con = getConnection();
try {
PreparedStatement pst = con.prepareStatement(query);
ResultSet rs = pst.executeQuery();
System.out.println("rs ::: ");
System.out.println(rs);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()) {
Map<String, Object> rowMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = rsmd.getColumnName(i);
Object columnValue = rs.getObject(i);
rowMap.put(columnName, columnValue);
}
resultList.add(rowMap);
}
} finally {
con.close();
}
return resultList;
}
rsmd.getColumnName(i)
always return column name instead of alias for other than scopes
. For scope I am getting the correct result. Can anyone help me to figure out what is going wrong here?
1
If I was to be exact I think the issue , is that you have this in your code
rsmd.getColumnName(i)
what you should have is
rsmd.getColumnLabel(i)
If you look at the docs
See ref docs
String getColumnLabel(int column) Gets the designated column’s
suggested title for use in printouts and displays.
2