我需要在java中使用sql语句找到带有where子句的平均值并返回值

时间:2012-12-12 01:37:35

标签: java sql average

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

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'Integer AutoIncrement

  • 'WPM'Integer

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

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

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

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

没有区别。请帮忙。

4 个答案:

答案 0 :(得分:1)

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

解释:rs.get...(1)根据列索引获取列,而不是基于列的名称。使用select中的函数时,数据库可能会更改此设置。另外,使用double而不是int,因为AVG返回一个double。

答案 1 :(得分:1)

您似乎忘记了声明 rs.next() ...

答案 2 :(得分:0)

  1. 你的sql有SQL注入..

  2. AVG功能结果可能是浮动或加倍。

  3. float f = rs.getFloat(1); //

答案 3 :(得分:0)

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

祝你好运, 尼古拉