javajdbcmetadatadatabase-metadata

How can I get different datatypes from ResultSetMetaData in Java?


I have a ResultSet that returns data of different types. The query is constructed dynamically so, at compile time, I don't know what type of value the query will return.

I have written the following code assuming that all results are Strings. But I want to get the type of each value too. How can I do this?

Below is the code I have written.

while (reportTable_rst.next()) {
    String column = reportTable_rst.getString(columnIterator);
}

At this point, I would like to get the column type, and get the value according to the data type.


Solution

  • The ResultSetMetaData.getColumnType(int column) returns a int value specifying the column type found in java.sql.Types.

    Example:

    Connection connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
    PreparedStatement statement = connection.prepareStatement(JDBC_SELECT);
    ResultSet rs = statement.executeQuery();
    PrintStream out = System.out;
    
    if (rs != null) {
        while (rs.next()) {
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                if (i > 1) {
                    out.print(",");
                }
    
                int type = rsmd.getColumnType(i);
                if (type == Types.VARCHAR || type == Types.CHAR) {
                    out.print(rs.getString(i));
                } else {
                    out.print(rs.getLong(i));
                }
            }
                
            out.println();
        }
    }