如何在JDBC三表联查结果中输出带列名的格式化数据?
修改JDBC查询结果为「列名: 值」格式的实现方案
嘿,这个需求其实很容易搞定,咱们只需要在打印的时候把列名和从ResultSet里取出的对应值拼接在一起就可以了。我已经帮你调整了代码,直接替换原来的while循环部分就行:
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("supplierNum: " + rs.getString("supplierNum")); System.out.println("partNum: " + 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(); } } catch(Exception ex) { System.out.println(ex); }
进阶优化:动态获取列名(适合列数多或不确定的场景)
如果以后你的查询列有变动,不想每次都手动修改打印语句,可以用ResultSetMetaData来动态获取所有列名和对应值,这样代码会更灵活,不用硬编码列名:
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); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); while(rs.next()) { // 遍历所有列,动态拼接列名和值 for(int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnName(i); String value = rs.getString(i); System.out.println(columnName + ": " + value); } space(); } } catch(Exception ex) { System.out.println(ex); }
这样不管你的查询语句里列怎么调整,代码都能自动适配输出「列名: 值」的格式啦~
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

