如何获取JDBC中所有表的主键?

Kau*_*aga 6 java mysql jdbc

我有一个至少有 500 个表的数据库。获取每个表的所有主键和外键的确切代码是什么?

//Primary Key
DatabaseMetaData meta=conn.getMetaData();
ResultSet rs1= meta.getTables(null, null, "TableName" , new String[]{"TABLE"});
rs1=meta.getPrimaryKeys(null, null, "TableName");
while(rs1.next())
    System.out.println("Primary Key :"+rs1.getString(4));

//Foreign Key
rs1=meta.getExportedKeys(null, null, "TableName");
while(rs1.next())
    System.out.println("Foreign Key :"+rs1.getString(4));
Run Code Online (Sandbox Code Playgroud)

我已经使用了这个代码,它给了我准确的键,但是对于 500 个表,我必须更改我的代码 500 次。有什么办法可以最大限度地减少这种努力?

Mar*_*eel 7

你不需要修改你的代码 500 次,你可以使用meta.getTables(null, null, "%", new String[]{"TABLE"}).

该方法getTablestableNamePattern参数采用类似模式,因此"%"匹配所有表名。

该方法getPrimaryKeysgetExportedKeys没有采用模式,因此您需要遍历结果集的getTables每一行的getTables结果并执行这些方法。

因此,您需要执行以下操作:

try (ResultSet tables = meta.getTables(null, null, "%", new String[] { "TABLE" })) {
    while (tables.next()) {
        String catalog = tables.getString("TABLE_CAT");
        String schema = tables.getString("TABLE_SCHEM");
        String tableName = tables.getString("TABLE_NAME");
        System.out.println("Table: " + tableName);
        try (ResultSet primaryKeys = meta.getPrimaryKeys(catalog, schema, tableName)) {
            while (primaryKeys.next()) {
                System.out.println("Primary key: " + primaryKeys.getString("COLUMN_NAME"));
            }
        }
        // similar for exportedKeys
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经包括了目录和模式的检索,因为这可能会影响事情的工作方式。