Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何打印加入JDBC的3个表中的列名?_Java_Jdbc_Relational Database - Fatal编程技术网

Java 如何打印加入JDBC的3个表中的列名?

Java 如何打印加入JDBC的3个表中的列名?,java,jdbc,relational-database,Java,Jdbc,Relational Database,我加入了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.na

我加入了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);
}
但我尝试添加列名,因此不使用控制台打印:

列名层叠打印可能会很困难

供应商编号:S1

partNum:P1

数量:300

姓名:史密斯

零件:螺母

如中所述

您需要获取ResultSet元数据,以编程方式从db获取列名


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

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

如果要以编程方式获取它们,请使用类似以下内容的
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 ...
    ...
}
然后,在循环内部执行

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"));

如果要在单个
字符串中组合输出,可以按如下操作:

StringBuilder sb=new StringBuilder();
while (rs.next()) {
    sb.append("Supplier Number: "+rs.getString("supplierNum")+"\n");
    sb.append("Part Number: "+rs.getString("partNum")+"\n");
    sb.append("Quantity: "+rs.getString("quantity")+"\n");
    sb.append("Supplier Name : "+rs.getString("supplierName")+"\n");
    sb.append("Part Name: "+rs.getString("partName")+"\n");
}
System.out.println(sb.toString());
StringBuilder sb=new StringBuilder();
while (rs.next()) {         
    sb.append("\nSupplier Number: ");
    sb.append(rs.getString("supplierNum"));

    sb.append("\nPart Number: ");
    sb.append(rs.getString("partNum"));

    sb.append("\nQuantity: ");
    sb.append(rs.getString("quantity"));

    sb.append("\nSupplier Name : ");
    sb.append(rs.getString("supplierName"));

    sb.append("\nPart Name: ");
    sb.append(rs.getString("partName"));

    sb.append("\n*************************");
}
System.out.println(sb.toString());
或者更好的方法如下:

StringBuilder sb=new StringBuilder();
while (rs.next()) {
    sb.append("Supplier Number: "+rs.getString("supplierNum")+"\n");
    sb.append("Part Number: "+rs.getString("partNum")+"\n");
    sb.append("Quantity: "+rs.getString("quantity")+"\n");
    sb.append("Supplier Name : "+rs.getString("supplierName")+"\n");
    sb.append("Part Name: "+rs.getString("partName")+"\n");
}
System.out.println(sb.toString());
StringBuilder sb=new StringBuilder();
while (rs.next()) {         
    sb.append("\nSupplier Number: ");
    sb.append(rs.getString("supplierNum"));

    sb.append("\nPart Number: ");
    sb.append(rs.getString("partNum"));

    sb.append("\nQuantity: ");
    sb.append(rs.getString("quantity"));

    sb.append("\nSupplier Name : ");
    sb.append(rs.getString("supplierName"));

    sb.append("\nPart Name: ");
    sb.append(rs.getString("partName"));

    sb.append("\n*************************");
}
System.out.println(sb.toString());

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

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);
  ...
}
ResultSetMetaData meta=rs.getMetaData();
int cols=meta.getColumnCount();

对于(int i=1;i),您可以尝试从ResultSet读取列名:此线程应该很有用:您已经在将列名传递给
println()
调用。所以也打印这些字符串。@ArvindKumarAvinash肯定这样说没有意义,但它展示了如何使用
ResultMetaData
…我认为,人们会定期循环使用列名。