2012-06-24 52 views
0

我在我的应用程序中尝试更新我的mysql数据库表上名为“porcobrar2012”的值总数。但是,更新的唯一值是在while循环中生成的最后一个值。为什么?所有的值都在屏幕上打印出来,没有问题,但是这些值在数据库中没有得到更新。 下面是代码:声明bigdecimal后mysql上的更新表

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()); 
} 

回答

1

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

+0

你能更具体吗?首先,感谢您的建议,我会删除class.forName()...但是,如何使用循环中生成的信息来同时更新表? – Sheeyla

+0

我需要循环来获取表中的所有行,总共有46行,同时我需要将总值保存在每行中......我如何在没有循环的情况下执行此操作? – Sheeyla

+0

它的工作,非常感谢@EJP ....你的答案清除了足够多......真的很多坦克! – Sheeyla