从java中的mysql获取表元数据

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

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

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

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

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

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

谢谢

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

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

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

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

请参阅以下文章:

将帮助您了解JDBC Metadata Get表中的示例

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

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

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 | +-------------------+