到目前为止,我的代码是:
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)");
没有区别。请帮忙。
答案 0 :(得分:1)
尝试使用double add1 = rs.getDouble(1);
解释:rs.get...(1)
根据列索引获取列,而不是基于列的名称。使用select中的函数时,数据库可能会更改此设置。另外,使用double而不是int,因为AVG返回一个double。
答案 1 :(得分:1)
您似乎忘记了声明 rs.next() ...
答案 2 :(得分:0)
你的sql有SQL注入..
AVG功能结果可能是浮动或加倍。
float f = rs.getFloat(1); //
答案 3 :(得分:0)
我认为您只需要在select语句中添加group by子句。然后,您的select语句将显示为:使用名称从Attempts组中选择avg(WPD),其中Username = ...这应该正确计算每个用户的平均WPD。由于你使用的是平均值,我认为返回的值可能是一倍。在这种情况下,您应该使用rs.getDouble。在查询中只选择了一个值,因此您可以使用列的索引来访问它。然后调用将是rs.getDouble(0)。我希望你觉得这个答案很有用。
祝你好运, 尼古拉