如何在javafx文本区域中显示计数查询的所有行?这只是第一排而不是两排
我希望count和groupby(sqlite)sql查询的两行显示在文本区域中,但它只显示第一行 当我将如何在javafx文本区域中显示计数查询的所有行?这只是第一排而不是两排,javafx,Javafx,我希望count和groupby(sqlite)sql查询的两行显示在文本区域中,但它只显示第一行 当我将conn.close()语句放在“while”块之外时,它只显示第二行,而不显示第一行 @FXML private void viewResult(ActionEvent event) { try { Connection conn = dbConnection.getConnection(); Statement resultStmt = c
conn.close()
语句放在“while”块之外时,它只显示第二行,而不显示第一行
@FXML
private void viewResult(ActionEvent event)
{
try
{
Connection conn = dbConnection.getConnection();
Statement resultStmt = conn.createStatement();
ResultSet rs = resultStmt.executeQuery("select candidate, count(candidate) from voteResult group by candidate");
while (rs.next()) {
String news = rs.getString(1)+" "+rs.getString(2);
this.result.setText(news);
conn.close();
}
}
catch (SQLException e)
{
System.err.println("Error " + e);
}
}
预期结果应如下所示:
JOSEPH THANKGOD 4
ORJI DANIEL 1
每次调用
setText(字符串值)
时,将覆盖上一个值。所以您必须首先构建结果字符串,然后将其设置为TextArea
的内容。我不知道连接
和其他组件是如何协同工作的,但我想如果在第一个while循环中关闭连接
,则结果集
将无法再用于获取下一行。此外,第二次或第三次调用Connection
的close
方法不会导致任何事情发生,因为如果Connection
对象已关闭,则这是一个no op
@FXML
private void viewResult(ActionEvent event) {
// Open resources with try-with-resources block
try (Connection conn = dbConnection.getConnection();
Statement resultStmt = conn.createStatement();
ResultSet rs = resultStmt.executeQuery("select candidate, count(candidate) from voteResult group by candidate");){
StringBuilder builder = new StringBuilder();
while (rs.next()) {
// Append each row
builder.append(rs.getString(1)).append(" ").append(rs.getString(2)).append("\n");
}
// Remove last newline character
if (builder.length() > 0) {
builder.setLength(builder.length() - 1);
}
// Get complete string and set as TextArea content
this.result.setText(builder.toString());
// Resources will be closed automatically due to try-with-resources
}
}
此外,您不应混合使用UI和数据库代码,并应使用“尝试使用资源”块(查看)。使用代码格式编辑您的文章。执行代码时,您得到的当前字符串是什么?您的代码完美地解决了问题。其中唯一的bug是sb,我理解它是builder变量。我非常感激。你说得对,我已经修好了。我很高兴能帮助你!如果你能接受这个答案就好了:)你的答案很完美。