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

Posted

技术标签:

【中文标题】如何从给定表中获取唯一列?【英文标题】:How to get the unique columns from a given table? 【发布时间】:2022-01-20 08:39:13 【问题描述】:

假设我有一个名为 "person" 的表,它有 4 列(姓名、姓氏、城市、密码)。其中两列(名称、姓氏)是唯一列。我想从 JDBC 驱动程序中获取这两列。如何从 JDBC 驱动程序获取这些信息?

【问题讨论】:

这能回答你的问题吗***.com/a/48042309/6170711 【参考方案1】:

您可以找到有关唯一列(定义为约束或唯一索引)的信息,使用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);
    

【讨论】:

【参考方案2】:

这里有一个基于 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);

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

【讨论】:

以上是关于如何从给定表中获取唯一列?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 VBA 中的表中获取唯一行?

如何获取 HIVE/PySpark 表中每一列的唯一值?

如何通过匹配一些冗余字段从 3 个表中获取唯一数据?

如何通过文件处理从给定的数据框列中获取唯一对?

如何从sqlite +phonegap中的表中获取第一列名称

如何从给定两个类之间的表中获取所有 tr 和 td?