首页 > 解决方案 > 如何从数据库中获取多行并将其全部显示在 jTextArea 或 jLabel 中?

问题描述

如何从数据库中获取多行并将其全部显示在 jTextArea 或 jLabel 中?

try{
 String url = "jdbc:mysql://localhost/sched";
 Connection conn= DriverManager.getConnection(url,"root", "");
 Statement stmt =conn.createStatement();
 String classif=comboClass.getSelectedItem().toString();
 String sqlSelect="select * from doctorsched where class = '"+classif+"'";
 ResultSet rs= stmt.executeQuery(sqlSelect);
  while(rs.next()){
    String docsName=rs.getString("docsName");
    String room=rs.getString("room");
    jTextArea1.setText(docsName+" (room "+room+") \n");
    }
}catch(Exception e){
}

当我使用这段代码时,jTextArea1 只显示数据库最后一行或最后一行的数据。从头开始的其余部分是不可见的。如果我使用 jLabel,我相信它也会以这种方式工作。这两个(jLabel 和 jTextArea)是我唯一的选择。

如果有人可以帮助我,我将非常感激。谢谢你。

标签: javasqlswingjlabeljtextarea

解决方案


您需要为每个结果动态创建 JLabels,因为您将所有内容保存在同一个 Jlabel 中,因此每次调用 .setText("") 时,您都会删除以前的文本并放入新的文本。例子:

你有你的 JFrame 或 JPanel 或任何容器

JFrame frame = new JFrame("Frame");

然后在每个结果中你应该这样做:

while(rs.next()){
    String docsName=rs.getString("docsName");
    String room=rs.getString("room");
    JLabel tempLabel = new JLabel();
    tempLabel.setText(docsName + " (room" + room + ")");
    frame.add(tempLabel);
}

如果您只想使用一个 JLabel,另一种选择是将所有结果连接到一个字符串变量中,如下所示:

String finalText = "";
while(rs.next()){
    String docsName=rs.getString("docsName");
    String room=rs.getString("room");
    finalText += docsName + " (room" + room + ")\n";
    
}
jTextArea1.setText(finalText);

我希望它可以帮助你,亲切的问候。

编辑:如果您动态创建 JLabel,请记住在执行 frame.add() 之前通过代码设置大小、边界、布局等!


推荐阅读