Retriving ResultSet Metadata Using ResultSetMetaData

ResultSetMetaData is a JDBC interface used to retrieve information about the columns returned by a SQL query. It can provide details such as the number of columns, column names, data types, table names, and column display sizes. A ResultSetMetaData object is obtained from a ResultSet using the getMetaData() method. It is useful when the structure of the query result is not known in advance and the program needs to inspect the returned columns dynamically.

Program: Retrieving ResultSet Metadata

This program retrieves employee records from the employee table and uses ResultSetMetaData to display information about the columns returned by the query. It displays the column count, column names, data types, and display sizes dynamically.

import java.sql.*;

public class ResultSetMetaDataExample {

    public static void main(String[] args) {

        String url =
            "jdbc:mysql://localhost:3306/jdbc_demo";

        String username = "root";
        String password = "password";

        String sql =
            "SELECT employee_id, employee_name, " +
            "department, salary FROM employee";

        try {
            // Establish connection
            Connection con =
                DriverManager.getConnection(
                    url, username, password);

            // Create statement
            Statement stmt =
                con.createStatement();

            // Execute query
            ResultSet rs =
                stmt.executeQuery(sql);

            // Get ResultSetMetaData
            ResultSetMetaData rsmd =
                rs.getMetaData();

            // Get number of columns
            int columnCount =
                rsmd.getColumnCount();

            System.out.println(
                "===== ResultSet Metadata =====");

            System.out.println(
                "Number of Columns: " +
                columnCount);

            System.out.println();

            // Display metadata for each column
            for (int i = 1; i <= columnCount; i++) {

                System.out.println(
                    "Column Number: " + i);

                System.out.println(
                    "Column Name: " +
                    rsmd.getColumnName(i));

                System.out.println(
                    "Column Type: " +
                    rsmd.getColumnTypeName(i));

                System.out.println(
                    "Java Class: " +
                    rsmd.getColumnClassName(i));

                System.out.println(
                    "Display Size: " +
                    rsmd.getColumnDisplaySize(i));

                System.out.println(
                    "Table Name: " +
                    rsmd.getTableName(i));

                System.out.println(
                    "----------------------------");
            }

            // Close resources
            rs.close();
            stmt.close();
            con.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Execution and Output:

PS D:\test> javac -classpath ".;D:\test\mysql-connector.jar" ResultSetMetaDataExample.java
PS D:\test> java -classpath ".;D:\test\mysql-connector.jar" ResultSetMetaDataExample
===== ResultSet Metadata =====
Number of Columns: 4

Column Number: 1
Column Name: employee_id
Column Type: INT
Java Class: java.lang.Integer
Display Size: 10
Table Name: employee
----------------------------
Column Number: 2
Column Name: employee_name
Column Type: VARCHAR
Java Class: java.lang.String
Display Size: 50
Table Name: employee
----------------------------
Column Number: 3
Column Name: department
Column Type: VARCHAR
Java Class: java.lang.String
Display Size: 30
Table Name: employee
----------------------------
Column Number: 4
Column Name: salary
Column Type: DECIMAL
Java Class: java.math.BigDecimal
Display Size: 10
Table Name: employee
----------------------------Code language: JavaScript (javascript)
Scroll to Top