如何打印连接 JDBC 的 3 个表中的列名?

How can I print the column names from 3 tables joining JDBC?

我有 3 个表我加入了这个查询执行并打印出表数据。

try {
    Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
    System.out.println("Connected");
    Statement st = conn.createStatement();

    String query = "SELECT s.*, sup.name as supplierName , p.name as partName "+
                    "FROM supplies s "+
                    "INNER JOIN supplier sup on s.supplierNum = sup.supplierNum "+
                    "INNER JOIN parts p on s.partNum = p.partNum";

    ResultSet rs = st.executeQuery(query);

    while(rs.next()) {
        System.out.println(rs.getString("supplierNum"));
        System.out.println(rs.getString("partNum"));
        System.out.println(rs.getString("quantity"));
        System.out.println(rs.getString("supplierName"));
        System.out.println(rs.getString("partName"));
        space();
    }

} catch(Exception ex) {
    System.out.println(ex);
}

但我试图添加列名而不是控制台打印:

它会打印级联的列名

supplierNum: S1

partNum: P1

quantity: 300

name: Smith

part: Nut

while(rs.next()) {
    System.out.println("Supplier Name " + rs.getString("supplierNum"));
    System.out.println("Part Name "+rs.getString("partNum"));
    System.out.println("Quantity "+ rs.getString("quantity"));
    System.out.println("SupplierName "+rs.getString("supplierName"));
    System.out.println("PartName "+rs.getString("partName"));
    space();
    }

按照

中的建议

您需要获取 ResultSet 元数据才能以编程方式从数据库中获取您的列名。

否则,您可以按照其他答案中的建议手动输入名称。

您当然可以对列名进行硬编码,因为您已经知道它们。

如果您想以编程方式获取它们,请使用类似于此的 ResultSetMetaData

Connection connection = ...

try (PreparedStatement ps = connection.prepareStatement(QUERY)) {
    ResultSet resultSet = ps.executeQuery();
    // get the meta data from the result set
    ResultSetMetaData rsMeta = resultSet.getMetaData();
    // receive the column count
    int columnCount = rsMeta.getColumnCount();

    // iterate them (their indexes start at 1, I think)
    for (int i = 1; i < columnCount + 1; i++) {
        // and print the column name, the type and the type name
        System.out.println(rsMeta.getColumnName(i) 
                + " (" 
                + rsMeta.getColumnType(i)
                + ", "
                + rsMeta.getColumnTypeName(i)
                + ")");
    }
} catch ...
    ...
}

如果您想在 while 循环中直接输出列,则在该循环之前获取元数据

ResultSetMetaData rsMeta = rs.getMetaData();

然后,在循环内做

System.out.println(rsMeta.getColumnName(1) + ": " + rs.getString("supplierNum"));
System.out.println(rsMeta.getColumnName(2) + ": " + rs.getString("partNum"));
System.out.println(rsMeta.getColumnName(3) + ": " + rs.getString("quantity"));
System.out.println(rsMeta.getColumnName(4) + ": " + rs.getString("supplierName"));
System.out.println(rsMeta.getColumnName(5) + ": " + rs.getString("partName"));

从结果集中您可以获取他的元数据

ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
for (int i = 1; i <= cols; i++) {
  String colName = meta.getColumnName(i);
  System.out.printf("%s=%s\n", colName, rs.getString(i);
  ...
}