我没有Java方面的经验,因此一直困扰于此问题,并且数周无法弄清原因。我有一个SQL查询,用于按“名称”列进行选择,计数和分组。接下来,在'while(rs.next())'
中,我试图选择另外两列的总和,这是一个名为“ kolicina”的列和一个名为“ cena”的列,此处是该方法的代码:
public ArrayList<Artikli> getSum(String date){
ArrayList<Artikli> list = new ArrayList<Artikli>();
String query = "select name, count(name) as count from izvestaj where dateZat = '"+date+"' group by name";
try {
rs = st.executeQuery(query);
while(rs.next()){
Artikli art = new Artikli();
art.name = rs.getString("name");
String q = "select sum(kolicina) as total from izvestaj where name = '"+art.name+"' and dateZat = '"+date+"'";
rs2 = st2.executeQuery(q);
while(rs2.next()){
art.kolicina = rs2.getInt("total");
}
String q1 = "select sum(cena) as total1 from izvestaj where name = '"+art.name+"' and dateZat = '"+date+"'";
rs3 = st3.executeQuery(q1);
while(rs3.next()){
art.cena = rs3.getInt("total1")/rs.getInt("count");
}
list.add(art);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
问题是第二个查询返回正确的列kolicina的总和,但是第三个查询返回的结果集是总和乘以计数值(从第一个查询中得出的...这就是为什么我将其除以计数最后),但实际上并没有返回正确的数量。 “ cena”列实际上是英语的价格,因此它似乎正在平均价格中,而不是将其与记录数相乘...我仔细检查了插入查询,它们很好,所以我确定我插入了正确的值。任何帮助表示赞赏。
答案 0 :(得分:1)
不是每个名称发出两个不同的查询,而是发出
select name,
sum(kolicina) as total,
sum(cena) as total1
from izvestaj
where name is not null and
dateZat = ?
group by name
(re。questino标记:请阅读PreparedStatements以及如何设置参数化查询以正确保护自己免受SQL注入。)
(我认为您甚至可以跳过第一个查询,因为其结果也将包含在该查询的结果中。)