您可以参考这段代码 sn-p,它向您展示了如何从数据库中获取所有表。
您需要遍历您的 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。