从java中的mysql获取表元数据

时间:2012-01-21 05:59:45

标签: java mysql jdbc mysql-connector

有没有办法在首次在表上执行select查询之前获取表元数据?

重述:有没有办法获取数字类型的特定行和数据列的列大小:int,tinyint,bigint等?

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = dbmd.getColumns(null, null, tableName, "%");

我无法使用上述代码,因为数字类型COLUMN_SIZEint,tinyint,bigint,etc)将返回这些类型的最大允许大小。我需要获取columnDisplaySize。

上面的代码将为int(8)返回10,但我需要8,我可以从表的resultMetaData获取。

有没有办法在不先运行select语句的情况下执行此操作。

由于

5 个答案:

答案 0 :(得分:4)

您可能想要检查MySQL中的INFORMATION_SCHEMA表能够为您提供什么。有时您可以利用它们。我做了一些快速查看,没有任何东西立即从那里打击我。

MySQL信息架构:http://dev.mysql.com/doc/refman/5.6/en/information-schema.html

答案 1 :(得分:2)

正如@technocrat所说,请在information_schema上查看此查询

SELECT column_name,column_type FROM INFORMATION_SCHEMA.columns where table_schema ='[Table schema]'和table_name ='[Table Name]'

答案 2 :(得分:1)

参考以下文章:

将帮助您了解JDBC元数据获取表中的示例

http://roseindia.net/jdbc/Jdbc-meta-data-get-tables.shtml

答案 3 :(得分:1)

我可能会对你提出的问题不合时宜,但有任何用途的mysql命令show columns in <tablename>吗? http://dev.mysql.com/doc/refman/5.1/en/show-columns.html了解更多信息。

答案 4 :(得分:1)

对于INT(8),您应该知道8不是大小限制。这是MySQL用户经常误解的。类似INT的数据类型的参数只是一个提示,如果SQL的数字少于参数,则填充值。它通常只用于ZEROFILL。

CREATE TABLE foo ( i1 INT(8) ZEROFILL, i2 INT(16) ZEROFILL );
INSERT INTO foo VALUES (1234, 1234);
SELECT * FROM foo;
+----------+------------------+
| i1       | i2               |
+----------+------------------+
| 00001234 | 0000000000001234 | 
+----------+------------------+

值8与16不会更改INT所需的存储空间,也不会更改它支持的值范围。 INT数据类型始终为32位,并且始终允许从-2 31 到2 31 -1的值,无论您给出的参数如何。

同样,TINYINT始终为8位,SMALLINT始终为16位,MEDIUMINT始终为24位,BIGINT始终为64位。

您获得的10值是数字精度,而不是大小限制。也就是说,当在base-10中显示时,32位值最多可以使用10位数:

SELECT LENGTH(POW(2,31));
+-------------------+
| LENGTH(POW(2,31)) |
+-------------------+
|                10 | 
+-------------------+