如何理解列是从元数据签名还是未签名?

时间:2015-10-01 10:43:40

标签: java database jdbc metadata

我正在获取数据库模式的元数据。我需要找出列是否是无符号或有符号数据类型。如何从获取元数据的resultSet中找到它。哪一栏会给我相关信息?我的问题是如何从java代码中获取列是已签名还是未签名?提供此信息的列标签是什么?

1 个答案:

答案 0 :(得分:1)

更新
如果列是有符号或无符号的,则可以从java结果集中获取。以下面的代码为例:

ResultSet res=stmt.executeQuery("select * from tableName where 1<0");//just making sure no row is retrieved as we dont need any here..
ResultSetMetaData rsmd=res.getMetaData();
boolean isColumnOneSigned= rsmd.isSigned(1);

isSigned(int columnNumber):指示指定列中的值是否为带符号数。 您可以找到有关ResultSetMetaData here的更多信息。这是非常有用的课程。

在databsae级别执行相同操作: -
对于MySQL,属性存储在INFORMATION_SCHEMA.COLUMNS中的COLUMN_TYPE中。

mysql> show columns from ttypes;
+---------------+----------------------+------+-----+---------+-------+
| Field         | Type                 | Null | Key | Default | Extra |
+---------------+----------------------+------+-----+---------+-------+
| cid           | int(10) unsigned     | YES  |     | NULL    |       |
+---------------+----------------------+------+-----+---------+-------+

1 row in set (0.00 sec)

你必须解析Type的内容并找到unsigned,或者在那里找不到unsigned。它没有为签名列添加任何内容。 你可以选择

这样的查询
select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%'