DatabaseMetaData.getColumns的int值具有奇怪的列大小

问题描述 投票:0回答:1

我有一个PostgreSQL表

create table test (
id int,
name varchar(2),
active boolean,
long_id bigint,
created timestamptz);
)

我想获取此表中每列的名称,类型和大小。这是我的代码:

public static void main(final String[] args) throws SQLException {
        final Connection connection = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/test", "postgres", "123");
        final DatabaseMetaData metaData = connection.getMetaData();
        try (final ResultSet resultSet = metaData.getColumns("public", null, "test", null)) {
            while (resultSet.next()) {
                System.out.println(resultSet.getString("COLUMN_NAME") + " " + resultSet.getInt("DATA_TYPE") + " " + resultSet.getInt("COLUMN_SIZE"));
            }
        }
    }

这是输出

id 4 10
name 12 2
active -7 1
long_id -5 19
created 93 35

第三列显示列的大小,例如,布尔值active为1字节。但是,为什么它显示id值的10个字节(在PostgreSQL中为int)而不是4个字节?

java postgresql jdbc
1个回答
0
投票

DatabaseMetaData.getColumns(强调我的文档中所述:

COLUMN_SIZE列指定给定列的列大小。对于数字数据,这是最大精度。对于字符数据,这是字符长度。对于日期时间数据类型,此是String表示形式的字符长度(假设小数秒部分的最大允许精度)。对于二进制数据,这是字节长度。对于ROWID数据类型,此是字节的长度。对于其中列大小不适用。

[32位整数的最大精度为10,64位整数(长)的最大精度为19。

换句话说,您认为DatabaseMetaData.getColumns包含以字节为单位的大小是错误的。 COLUMN_SIZE结果不提供该信息,但getColumns列中的字符类型除外。

© www.soinside.com 2019 - 2024. All rights reserved.