Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中从mysql获取表元数据_Java_Mysql_Jdbc_Mysql Connector - Fatal编程技术网

java中从mysql获取表元数据

java中从mysql获取表元数据,java,mysql,jdbc,mysql-connector,Java,Mysql,Jdbc,Mysql Connector,在第一次对表执行select查询之前,是否有方法获取表元数据 重述:是否有一种方法可以获取数字类型(int、tinyint、bigint等)的特定数据行和列的列大小 DatabaseMetaData md = connection.getMetaData(); ResultSet rs = dbmd.getColumns(null, null, tableName, "%"); 我无法使用上述代码,因为数值类型(int、tinyint、bigint等)的列大小将返回这些类型允许的最大大小。我需

在第一次对表执行select查询之前,是否有方法获取表元数据

重述:是否有一种方法可以获取数字类型(int、tinyint、bigint等)的特定数据行和列的列大小

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = dbmd.getColumns(null, null, tableName, "%");
我无法使用上述代码,因为数值类型(
int、tinyint、bigint等
)的
列大小将返回这些类型允许的最大大小。我需要知道你的尺寸

对于
int(8)
,上面的代码将返回10,但是我需要8,我可以从表的resultMetaData中获得它

那么,有没有一种方法可以在不首先运行select语句的情况下实现这一点呢

谢谢

请参阅以下文章:

将帮助您了解JDBC元数据Get表中的一个示例


您可能需要检查MySQL中的SCHEMA表能够为您提供哪些信息。有时,你可以利用它们为你带来好处。我做了一些快速的检查,但没有任何东西能立即从里面击中我


MySQL信息模式:

我可能不太明白你的问题,但是MySQL命令
中显示列有什么用处吗?有关更多信息。

正如@technocrat所说,请查看此信息模式查询

从信息模式中选择列名称、列类型。表模式为“[table SCHEMA]”和表名称为“[table name]”的列

INT(8)
的情况下,应该知道8不是大小限制。这是MySQL用户经常产生的误解。INT-like数据类型的参数只是对SQL的一个提示,如果值的位数小于该参数,则填充这些值。它通常只用于零填充

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位,并且始终允许从-231到231-1的值,而不管您给出的参数是什么

同样,TINYINT总是8位,SMALLINT总是16位,MEDIUMINT总是24位,BIGINT总是64位

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

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

我知道我可以在运行select查询后从结果集获取元数据,但我想知道除了在表上运行select查询之外,是否还有其他方法。