0

到目前为止,我的代码是:

try{

    stmt = con.createStatement();

    String sql = "SELECT AVG(WPM) FROM Attempts WHERE Username = ('" + Login.loginUsername + "');

    rs = stmt.executeQuery(sql);

    int add1 = rs.getInt("AVG(WPM)");

        System.out.println("avg temp is " + add1);
    }

    catch (SQLException err) {
        System.out.println(err.getMessage());
    }

我的数据库是这样设置的:

  • (PK) 'AttemptID' 整数自动增量

  • 'WPM' 整数

  • (FK) '用户名' Varchar(45)

我希望它根据每个用户名返回平均 WPM。如果我换行

int add1 = rs.getInt("AVG(WPM)"); 

String add1 = rs.getString("AVG(WPM)");

没有区别。请帮忙。

4

4 回答 4

1

尝试double add1 = rs.getDouble(1);

说明:rs.get...(1)根据列索引获取列,而不是根据列名。在您的选择中使用函数时,数据库可能会更改此设置。此外,使用 double 而不是 int,因为 AVG 返回一个 double。

于 2012-12-12T01:39:09.633 回答
1

看起来您忘记了语句rs.next() ...

于 2012-12-12T01:41:35.890 回答
0
  1. 你的 sql 有 SQL 注入 ..

  2. AVG 函数结果可能为 float 或 double 。

浮动 f = rs.getFloat(1);//

于 2012-12-12T01:44:32.890 回答
0

我认为您只需要在您的 select 语句中添加一个 group by 子句。然后,您的 select 语句将显示为: select avg(WPD) from Attempts group by Usename where Username = ... 这应该正确计算每个用户的平均 WPD。由于您使用的是平均值,我认为返回的值可能是两倍。在这种情况下,您应该使用 rs.getDouble。查询中只选择了一个值,因此您可以使用列的索引来访问它。然后调用将是 rs.getDouble(0)。我希望你觉得这个答案有帮助。

祝你好运,尼古拉

于 2012-12-12T01:47:49.540 回答