java 獲取表結構
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
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。