【问题标题】:Swing app.only shows one record in JTextAreaSwing app.only 在 JTextArea 中显示一条记录
【发布时间】:2013-12-13 09:24:38
【问题描述】:

我正在开发一个在JTextArea 中打印 SQL 查询结果的应用程序。数据库连接和查询工作,我可以在控制台和文本区域显示结果,唯一的问题是,文本区域只显示一条记录,而控制台显示所有结果。

这是我在控制台和文本区域中输出结果集的代码。如何修改文本区域部分以显示结果集的所有值?

Statement stat = con.createStatement();           
ResultSet result = stat.executeQuery("SELECT DISTINCT rnaam, gesl FROM dier, soort      WHERE soort.nsnaam = 'leeuw' ORDER BY rnaam ASC");

while(result.next())
{
    // The console print
    System.out.println(result.getString(1));

    // The frame print
    uitvoerText.setText(result.getString(1));
}

那么我的代码有什么问题,或者,我怎样才能简单地显示所有结果?我知道这可以通过模型方法 (ModelItem) 来实现,但我必须使用文本区域 (学校...)。而且我知道我应该使用准备好的语句,但我们现在不这样做。

【问题讨论】:

  • 只有在问题是关于 Netbeans 时才添加 Netbeans 标签。这个显然不是。

标签: java mysql sql swing jtextarea


【解决方案1】:

因为setText() 将文本区域设置为给定文本,替换已经存在的内容。你想要的是append(),它将给定的文本添加到当前的末尾。

uitvoerText.append(result.getString(1) + System.lineSeparator());

一切尽在docs

【讨论】:

  • 哪种方法可以让我打印所有记录?因为练习清楚地说明了“JTextArea 中的所有行”。
【解决方案2】:

这会起作用

 StringBuilder text=new StringBuilder();
    while(result.next())
    {
        // The console print
        System.out.println(result.getString(1));
        //save it in stringBuilder
        text.append(result.getString(1)+System.lineSeparator());

    }
      uitvoerText.setText(text.toString());

【讨论】:

  • 为什么所有这些不只是附加到JTextArea
  • @RossDrew:JtextArea 在附加 API 内部也在使用相同类型的(不准确的)逻辑。
  • @RossDrew:在您的情况下,每次都会调用 append 。所以它每次都会在堆中创建 StringBuilder 对象(由于循环)。而我只在堆中创建一个对象
  • @SachinPasalkar 真的是由 OP 来决定。无论如何,在答案本身中解释为什么这是一个很好的解决方案(或者实际上它是做什么的)可能会使这成为一个很好的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
相关资源
最近更新 更多