Java 如何打印加入JDBC的3个表中的列名?
我加入了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
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
…我认为,人们会定期循环使用列名。