java 擷取表結構

來源:互聯網
上載者:User

jdbc有的。假設有個con

DatabaseMetaData dbmd = con.getMetaData();

rs = dbmd.getColumns(con.getCatalog(), schema, tableName, null);

rs.getString(DATA_TYPE) java.sql.Types 的 SQL 類型

rs.getString(COLUMN_SIZE) 列的大小。對於 char 或 date 類型,列的大小是最大字元數,對於 numeric 和 decimal 類型,列的大小就是精度。

rs.getString(DECIMAL_DIGITS) 小數部分的位元

JDBC中通過MetaData來擷取具體的表的相關資訊。可以查詢資料庫中的有哪些表,表有哪些欄位,欄位的屬性等等。MetaData中通過一系列getXXX函數,將這些資訊存放到ResultSet裡面,然後返回給使用者。關於MetaData的說明網上也有不少,這裡我只是從我自身學習的角度來記錄一下簡單使用JDBC以及擷取資料表相關資訊的方法。

首先,http://hometown.aol.com/kgb1001001/Articles/JDBCMetadata/JDBC_Metadata.htm 這裡有篇名字叫做《Understanding JDBC MetaData》的文章,講解得不錯。

下面就是我的JDBC下的擷取表資訊的代碼了。我是以MySQL 5.0作為測試平台的。

1. JDBC串連MYSQL的代碼很標準,很簡單。

class.forName("com.mysql.jdbc.Driver").newInstance();

Connection conn = DriverManager

.getConnection("jdbc:mysql://localhost/test?user=root&password=123456");

2. 下面就是擷取表的資訊。

m_DBMetaData = m_Connection.getMetaData();

ResultSet tableRet = m_DBMetaData.getTables(null, "%",m_TableName,new String[]{"TABLE"});

其中"%"就是表示*的意思,也就是任意所有的意思。其中m_TableName就是要擷取的資料表的名字,如果想擷取所有的表的名字,就可以使用"%"來作為參數了。

3. 提取表的名字。

while(tableRet.next) System.out.println(tableRet.getString("TABLE_NAME"));

通過getString("TABLE_NAME"),就可以擷取表的名字了。

從這裡可以看出,前面通過getTables的介面的返回,JDBC是將其所有的結果,儲存在一個類似table的記憶體結構中,而其中TABLE_NAME這個名字的欄位就是每個表的名字。

4. 提取表內的欄位的名字和類型

String columnName;

String columnType;

ResultSet colRet = m_DBMetaData.getColumns(null,"%", m_TableName,"%");

while(colRet.next()) {

columnName = colRet.getString("COLUMN_NAME");

columnType = colRet.getString("TYPE_NAME");

int datasize = colRet.getInt("COLUMN_SIZE");

int digits = colRet.getInt("DECIMAL_DIGITS");

int nullable = colRet.getInt("NULLABLE");

System.out.println(columnName+" "+columnType+" "+datasize+" "+digits+" "+

nullable);

}

JDBC裡面通過getColumns的介面,實現對欄位的查詢。跟getTables一樣,"%"表示所有任意的(欄位),而m_TableName就是資料表的名字。

getColumns的返回也是將所有的欄位放到一個類似的記憶體中的表,而COLUMN_NAME就是欄位的名字,TYPE_NAME就是資料類型,比如"int","int unsigned"等等,COLUMN_SIZE返回整數,就是欄位的長度,比如定義的int(8)的欄位,返回就是8,最後NULLABLE,返回1就表示可以是Null,而0就表示Not Null。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.