簡體   English   中英

在Java中從mysql獲取表元數據

[英]Obtaining Table metadata from mysql in java

在首先在表上執行選擇查詢之前,是否可以獲取表元數據?

重述:是否有一種方法可以獲取數字類型(int,tinyint,bigint等)的特定行和數據列的大小?

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

我不能使用上面的代碼,因為COLUMN_SIZE用於數字類型( int,tinyint,bigint,etc )將返回這些類型的最大允許大小。 我需要獲取columnDisplaySize。

上面的代碼將為int(8)返回10,但是我需要8,我可以從表的resultMetaData獲得。

因此,有一種方法可以執行此操作而無需先運行select語句。

謝謝

您可能想檢查一下MySQL中的INFORMATION_SCHEMA表可以為您提供什么。 有時您可以利用它們來發揮自己的優勢。 我做了一些快速的查找,沒有什么立即從里面擊中我。

MySQL信息架構: http : //dev.mysql.com/doc/refman/5.6/zh-CN/information-schema.html

正如@technocrat所說,請在information_schema上檢查此查詢

從INFORMATION_SCHEMA.columns中選擇column_name,column_type,其中table_schema ='[Table schema]'和table_name ='[Table Name]'

請參閱以下文章:

將幫助您了解理解來自JDBC Metadata Get表的示例

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

我可能不符合您的要求,但是mysql命令show columns in <tablename>show columns in <tablename>是否有用? 有關更多信息,請訪問http://dev.mysql.com/doc/refman/5.1/en/show-columns.html

對於INT(8) ,您應該知道8不是大小限制。 這是MySQL用戶經常誤解的。 類似於INT的數據類型的參數僅是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 vs. 16不會更改INT所需的存儲空間,也不會更改它支持的值范圍。 INT數據類型始終為32位,並且始終允許從-2 31到2 31 -1的值,而不管您給它提供什么參數。

同樣,TINYINT始終為8位,SMALLINT始終為16位,MEDIUMINT始終為24位,而BIGINT始終為64位。

您獲得的10值是數字精度,而不是大小限制。 也就是說,以10為基數顯示時,一個32位值最多可以使用10位數字:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM