如何从给定的 table 中获取唯一列?

How to get the unique columns from a given table?

假设我有一个名为 "person" 的 table,它有 4 列(名称、last_name、城市、密码)。其中两列(名称,last_name)是唯一列。我想从 JDBC driver 中获取这两列。我如何从 JDBC driver 中获取此信息?

这里有一个基于MySql的简单示例:

public class Test {
static final String DB_URL = "jdbc:mysql://localhost:3306/yourDatabase";
static final String USER = "----";
static final String PASS = "somePass";
static final String QUERY = "SHOW KEYS FROM YOUR_TABLE WHERE Key_name = 'PRIMARY'\n";

public static void main(String[] args) {
    // Open a connection
    final ArrayList<String> primaryKeyColumns = new ArrayList<>();
    try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(QUERY);) {
        while (rs.next()) {
            primaryKeyColumns.add(rs.getString(5));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    System.out.println(primaryKeyColumns);
}

}

通过这种方式查看使用的查询,您可以获取更具体的信息。

您可以找到有关唯一列(定义为约束或唯一索引)的信息,使用 DatabaseMetaData.getIndexInfo,为第四个参数传递 true (unique)。

例如

DatabaseMetaData md = connection.getMetaData();
// NOTE: You may need to use "PERSON"
try (ResultSet rs = md.getIndexInfo(null, null, "person", true, true)) {
    while (rs.next()) {
        String indexName = rs.getString("INDEX_NAME");
        String columnName = rs.getString("COLUMN_NAME");
        if (indexName == null || columnName == null) {
            continue;
        }
        System.out.printf("%s: %s%n", indexName, columnName);
    }
}