我有一个postgres表
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个字节(在postgres中为int),而不是4?
如DatabaseMetaData.getColumns
(强调我的文档中所述:
COLUMN_SIZE列指定给定列的列大小。对于数字数据,这是最大精度。对于字符数据,这是字符长度。对于日期时间数据类型,此是String表示形式的字符长度(假设小数秒部分的最大允许精度)。对于二进制数据,这是字节长度。对于ROWID数据类型,此是字节的长度。对于其中列大小不适用。
[32位整数的最大精度为10,64位整数(长)的最大精度为19。