Java错误获取数据库中的值的总和

时间:2013-12-20 14:21:16

标签: java

我总是得到错误从数据库获取值的总和,我使用数组来做到这一点,但我总是得到这个错误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;
}

5 个答案:

答案 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类型之一(例如LinkedListArrayList):

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()方法来查找返回的行数并使用它初始化数组。