如何打印加入 JDBC 的 3 个表中的列名? [复制]
Posted
技术标签:
【中文标题】如何打印加入 JDBC 的 3 个表中的列名? [复制]【英文标题】:How can I print the column names from 3 tables joining JDBC? [duplicate] 【发布时间】:2020-03-25 04:01:03 【问题描述】:我已经加入了 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
零件编号:P1
数量:300
姓名:史密斯
零件:螺母
【问题讨论】:
您可以尝试从 ResultSet 中读取列名:这个 Thread 应该会有所帮助:***.com/questions/696782/… 您已经将列名传递给您的println()
调用。所以也打印这些字符串。
【参考方案1】:
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();
【讨论】:
【参考方案2】:正如https://***.com/a/696794/11226302中所建议的那样
您需要获取 ResultSet 元数据才能以编程方式从 db 中获取列名。
否则,您可以按照其他答案中的建议手动输入名称。
【讨论】:
【参考方案3】:您当然可以对列名进行硬编码,因为您已经知道它们。
如果您想以编程方式获取它们,请使用类似于此的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"));
【讨论】:
@ArvindKumarAvinash 确定这样没有意义,但它展示了如何使用ResultMetaData
... 我认为人们会定期循环遍历列名。【参考方案4】:
您可以从结果集中选择他的元数据
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);
...
【讨论】:
以上是关于如何打印加入 JDBC 的 3 个表中的列名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章