您可以參考此代碼片段,該代碼片段顯示如何從數據庫獲取所有表。
您需要迭代您的ResultSet
調用next()。
我已經試過這爲MS SQL Server 2012的
public class RetrieveAllTables {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=HubDB", "sa", "password");
DatabaseMetaData databaseMetaData = connection.getMetaData();
ResultSet resultSet = databaseMetaData.getTables(null, null, "%", new String[] {"TABLE"});
while(resultSet.next()) {
System.out.print("Table Catalog: " + resultSet.getString("TABLE_CAT"));
System.out.print("\tTable Schema: " + resultSet.getString("TABLE_SCHEM"));
System.out.print("\tTable Name: " + resultSet.getString("TABLE_NAME"));
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
返回以下的輸出:
Table Catalog: HubDB Table Schema: dbo Table Name: films
Table Catalog: HubDB Table Schema: dbo Table Name: FILMS_AUDIT
Table Catalog: HubDB Table Schema: sys Table Name: trace_xe_action_map
Table Catalog: HubDB Table Schema: sys Table Name: trace_xe_event_map
因此,你需要改變從
ResultSet resultSet = databaseMetaData.getTables(null, null, "%", new String[] {"TABLE"});
以下到
ResultSet resultSet = databaseMetaData.getTables(null, "dbo", "%", new String[] {"TABLE"});
您可以參閱getTables()
方法的文檔here
利用這些信息,您可以動態傳遞個人TableName
檢索Primary Key
和Foreign Key
細節。您現有的代碼只需傳遞一個參數就可以很好地檢索這些細節,即上述代碼中的TableName
。
非常感謝! 主鍵的代碼正在工作,但對於外鍵,它顯示此錯誤 - 「列名稱COLUMN_NAME無效」。 請親切指導。 –
@KaushalDaga查看[getExportedKeys'的java文檔](http://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getExportedKeys-java.lang.String-java。 lang.String-java.lang.String-)你可能需要使用'PKCOLUMN_NAME'。 –
非常感謝您的幫助。 :) –