Java如何使用DatabaseMetaData获取表列名称?

在此示例中,我们使用DatabaseMetaData检索表的列名。可以通过调用来获取元数据信息connection.getMetaData()。接下来,我们可以ResultSet通过调用获取对象metadata.getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)。

从这个结果集COLUMN_NAME,TYPE_NAME,COLUMN_SIZE和其他信息可以被读取。

package org.nhooo.example.jdbc;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DbMetadataExample {
    private static final String URL = "jdbc:mysql://localhost/nhooo";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";

    public static void main(String[] args) {
        try (Connection connection =
                 DriverManager.getConnection(URL, USERNAME, PASSWORD)) {

            DatabaseMetaData metadata = connection.getMetaData();
            ResultSet resultSet =
                metadata.getColumns(null, null, "books", null);

            while (resultSet.next()) {
                String name = resultSet.getString("COLUMN_NAME");
                String type = resultSet.getString("TYPE_NAME");
                int size = resultSet.getInt("COLUMN_SIZE");

                System.out.println("Column name: [" + name + "]; " +
                    "type: [" + type + "]; size: [" + size + "]");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

下books表描述了位信息:

Column name: [isbn]; type: [VARCHAR]; size: [50]
Column name: [title]; type: [VARCHAR]; size: [100]
Column name: [published_year]; type: [INT]; size: [10]
Column name: [price]; type: [DECIMAL]; size: [10]

Maven依赖

<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

Maven中央