在Java NetBeans中如何获取数据库所有列值并在另一个类展示
解决返回数据库所有查询结果的问题
你的问题出在单个字符串变量无法存储多条数据——每次while循环都会用新的sname覆盖之前的值,所以最后只能返回最后一条记录。要返回所有结果,你需要用集合来存储每一条查询到的数据,比如List<String>。
修改后的代码
import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.swing.JOptionPane; public class Test { public static List<String> testMethod() { // 用List存储所有sname List<String> nameList = new ArrayList<>(); database.createConnection(); String query = "SELECT sname from allsale"; // 用try-with-resources自动关闭Statement和ResultSet,避免资源泄漏 try (Statement stmt = database.conn.createStatement(); ResultSet rs = stmt.executeQuery(query)) { while (rs.next()) { // 把每条sname加入集合 nameList.add(rs.getString(1)); } } catch (Exception e) { JOptionPane.showMessageDialog(null, e.toString()); e.printStackTrace(); // 建议添加,方便调试异常详情 } finally { // 记得关闭数据库连接,避免连接泄漏 if (database.conn != null) { try { database.conn.close(); } catch (Exception e) { e.printStackTrace(); } } } return nameList; } public static void main(String[] args) { List<String> names = testMethod(); // 控制台打印所有结果,测试用 for (String name : names) { System.out.println(name); } } }
关键修改点
- 将返回类型从
String改为List<String>,用集合存储多条数据 - 循环中调用
nameList.add(rs.getString(1)),把每条查询到的sname加入集合 - 使用try-with-resources语法自动关闭
Statement和ResultSet,避免数据库资源泄漏 - 添加
finally块关闭数据库连接,不要让连接一直占用
在另一个类中展示数据的示例
比如创建一个DisplayClass,调用Test.testMethod()获取所有数据后展示:
import java.util.List; public class DisplayClass { public static void showNames() { List<String> allNames = Test.testMethod(); // 这里可以根据需求展示数据,比如GUI界面输出、写入文件等 System.out.println("所有销售名称:"); for (String name : allNames) { System.out.println("- " + name); } } public static void main(String[] args) { showNames(); } }
内容的提问来源于stack exchange,提问作者Chizo
相关产品推荐
相关产品推荐

