如何从给定的 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);
}
}
假设我有一个名为 "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);
}
}