【问题标题】:How to show "count" MySQL query into JTextField?如何在 JTextField 中显示“计数”MySQL 查询?
【发布时间】:2023-04-04 04:00:02
【问题描述】:

现在,我遇到了这个问题:我想在 GUI 内(通过 jtextfield)显示我的数据库中的歌曲总数。

这是我目前得到的:

txtTotalSongs = new JTextField();
txtTotalSongs.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        try {
            String q = "select count (title) from songs";
            PreparedStatement ps=conn.prepareStatement(q);

            ps.setInt(1, 20);

            ResultSet rs = ps.executeQuery();

            while(rs.next())
            {
                txtTotalSongs.setText(String.valueOf("title"));
            }

        } catch (Exception e) {
            // TODO: handle exception
        }

    }
});
txtTotalSongs.setBounds(591, 458, 86, 20);
contentPane.add(txtTotalSongs);

【问题讨论】:

  • 您希望在 JTextField 上调用的操作是什么,作为响应您将运行 actionPerformed?
  • 好吧,我希望数据库中的总行数显示在 JTextField 中。这是否回答你的问题?对不起,还是菜鸟。 @Joeblade
  • 不,我问的原因是您在 JTextField 的“actionPerformed”部分运行此代码。将对 JTextField 执行什么操作?通常这是文本更改或类似内容。在按钮上执行的操作将是一次点击。您确定不想在 contentPane.add(....) 之后运行此代码吗?

标签: java mysql jtextfield


【解决方案1】:

我会将它设置在 actionPerformed 之外。

txtTotalSongs = new JTextField();
txtTotalSongs.setBounds(591, 458, 86, 20);
contentPane.add(txtTotalSongs);

txtTotalSongs.setText(getTotalSongs());

然后在某处添加一个方法:

// not ideal but trying to use most of your original code.
public int getTotalSongs() {
    try {
        String q = "select count (title) from songs";
        PreparedStatement ps=conn.prepareStatement(q);

        ps.setInt(1, 20);

        ResultSet rs = ps.executeQuery();

        if (rs.next()) {
            return rs.getInt(1);
        } else { 
            return 0;
        }
    } catch (Exception e) {
        // TODO: handle exception
        return 0;
    }
}           

如果你想定期更新计数,你可以运行一个定时器,更新时要小心threadsafety

【讨论】:

    【解决方案2】:
    while(rs.next()){
        txtTotalSongs.setText(String.valueOf("title"));
        // This doesn't get any value from rs
        // It just get value "title".
    }
    

    改变你的while循环如下:

    while(rs.next())
    {
        txtTotalSongs.setText(rs.getInt(1));
    }
    

    【讨论】:

    • 仍然没有得到我想要的:/
    【解决方案3】:

    不要使用while循环,试试

    if(rs.first())
        xtTotalSongs.setText(rs.getString("title"));
    

    rs.first() 如果结果集中有一行,则返回 true(并将指针移动到第一个)。 getString 返回第一行中“title”列的值。

    由于“计数”应该只有一行(至少我猜是这样),这应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多