我总是得到错误从数据库获取值的总和,我使用数组来做到这一点,但我总是得到这个错误ArrayIndexOutOfBoundsException这是我的方法
public int getTotalBalance(int studentnumber){
String sql = "SELECT * from tblPayments where StudentNumber = "+studentnumber+"";
int ctr = 0, sum=0;
int [] value = new int [ctr];
try{
Connection conn = connectToDb.ConnectDB();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
ctr++;
value[ctr]= Integer.parseInt(rs.getString("Payments"));//this is where i get it
sum+=value[ctr];
}
}catch(Exception err){
err.printStackTrace();
JOptionPane.showMessageDialog(null, err);
}
return sum;
}
答案 0 :(得分:2)
删除数组和ctr
变量,然后执行:
sum += Integer.parseInt(rs.getString("Payments"));
更好的解决方案是计算查询中的总和:
SELECT sum(payments) from tblPayments where StudentNumber = ? as total_sum
答案 1 :(得分:1)
<强>问题强>
定义0长度数组
int ctr = 0, sum=0;
int [] value = new int [ctr];
现在你做了
while(rs.next()){
ctr++;
value[ctr]= Integer.parseInt(rs.getString("Payments"));
sum+=value[ctr];
}
<强>解决方案强>
如果您在迭代时确实需要存储这些数据,请使用ArrayList
List<Integer> value = new ArrayList<Integer>();
<强>改进强>
您应该使用PreparedStatement
您可以进行单个查询以获取总和,而不是获取完整数据并以编程方式进行计算
select sum(Payments) from tblPayments where studentNumber = ?
答案 2 :(得分:0)
您创建一个大小为0的数组,即。没有元素
int ctr = 0, ...
int [] value = new int [ctr];
然后尝试访问第一个元素
value[ctr] = ...
考虑使用动态调整自身大小的ArrayList
并将元素添加到其中。
答案 3 :(得分:0)
您正在将ctr
初始化为空数组:
int ctr = 0, sum=0;
int[] value = new int [ctr];
然后尝试为某些元素赋值:
while(rs.next()){
ctr++;
value[ctr]= Integer.parseInt(rs.getString("Payments"));
sum+=value[ctr];
}
由于您不知道ResultSet
中将有多少结果,因此数组不是数据结构的理想选择。相反,请使用可以按需增长的内置List
类型之一(例如LinkedList
或ArrayList
):
int ctr = 0, sum=0;
List<Integer> value = new LinkedList<Integer>();
// snipped
while(rs.next()){
value.add(Integer.parseInt(rs.getString("Payments")));
sum += value.get(ctr);
ctr++; // Note that the first element in a list is index 0.
}
答案 4 :(得分:0)
int [] value = new int [ctr];
上面一行是用0长度初始化数组。您可以使用ResultSet类的getFetchSize()方法来查找返回的行数并使用它初始化数组。