0

我在我的应用程序上有以下工作,其中我试图更新名为“porcobrar2012”的 mysql 数据库表上的总值。但是,唯一更新的值是 while 循环中生成的最后一个值。为什么?所有值都可以毫无问题地打印在屏幕上,但这些值没有在数据库中更新。这是代码:

BigDecimal total = new BigDecimal("0"); 
  try
{
        //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        //Connection connection=DriverManager.getConnection("jdbc:odbc:db1","","");
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost/etoolsco_VecinetSM?user=etoolsco&password=g7Xm2heD41");
        Statement statement=connection.createStatement();
        String query;
        query="SELECT * FROM porcobrar2012"; 
        ResultSet resultSet=statement.executeQuery(query);
    while(resultSet.next())
    {
    out.println(resultSet.getString(2)+"");out.println(resultSet.getBigDecimal(3)+"");out.println(resultSet.getBigDecimal(4)+"");out.println(resultSet.getBigDecimal(5)+"");out.println(resultSet.getBigDecimal(6)+"");out.println(resultSet.getBigDecimal(7)+"");out.println(resultSet.getBigDecimal(8)+"");out.println(resultSet.getBigDecimal(9)+"");out.println(resultSet.getBigDecimal(10)+"");out.println(resultSet.getBigDecimal(11)+"");out.println(resultSet.getBigDecimal(12)+"");out.println(resultSet.getBigDecimal(13)+"")out.println(resultSet.getBigDecimal(14)+"");out.println(resultSet.getBigDecimal(15)+"");
    total = resultSet.getBigDecimal(3).add(resultSet.getBigDecimal(4)).add(resultSet.getBigDecimal(5)).add(resultSet.getBigDecimal(6)).add(resultSet.getBigDecimal(7)).add(resultSet.getBigDecimal(8)).add(resultSet.getBigDecimal(9)).add(resultSet.getBigDecimal(10)).add(resultSet.getBigDecimal(11)).add(resultSet.getBigDecimal(12)).add(resultSet.getBigDecimal(13)).add(resultSet.getBigDecimal(14)).add(resultSet.getBigDecimal(15));
    String query1;
    query1="UPDATE porcobrar2012 SET total=total";
    PreparedStatement ps = connection.prepareStatement(query1);
    ps.executeUpdate();

    out.println(total);

}

    connection.close();
statement.close();




} 

  catch (Exception e) 
{
      //e.printStackTrace();
      out.println(e.toString());
}
4

1 回答 1

1

这是因为更新关闭了现有的结果集。但是我会问,为什么您不在没有任何事先查询的情况下在单个 UPDATE 语句中进行添加,在数据库中,没有循环,没有 BigDecimals。数据库编程的规则之一是“不要将数据移动到超出你需要的位置”。只写“UPDATE porcobrar2012 SET a=b+c+d+...”效率会高很多倍。您也可以删除 Class.forName() 调用:多年来一直不需要它。

于 2012-06-24T21:36:34.507 回答