在java中插入成功后自动更新

时间:2012-03-19 13:17:28

标签: java jdbc simplejdbcinsert

我需要在插入另一个表成功后自动更新表。 我正在使用准备好的声明来做这件事,并尝试了几种方法,但努力工作。有人可以帮我解决这个问题。代码如下:

            try
                {   
                    p=con.prepareStatement("insert into receipt values(?,?,?,?,?,?,?,?,?)");
                    p.setInt(1, rn);
                    p.setDate(2, new java.sql.Date(rd.getTime()));
                    p.setInt(3, ag);
                    p.setInt(4, an);
                    p.setString(5, name);
                    p.setString(6, street);
                    p.setString(7, city);
                    p.setInt(8, pinno);
                    p.setInt(9, ar);
                    p=con.prepareStatement("update loan set t_os=t_os-? where accno=?");
                    p.setInt(1, ar);
                    p.setInt(2, an);
                    p.executeUpdate();

                    /*try
                    {
                        p=con.prepareStatement("update loan set t_os=t_os-? where accno=?");
                        p.setInt(1, Integer.parseInt(art.getText()));
                        p.setInt(2, Integer.parseInt(ant.getText()));
                        p.executeUpdate();
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }*/

                    status.setForeground(Color.BLUE);
                    status.setText("Successfully Added");
                }
                catch (Exception e) 
                {
                    e.printStackTrace();
                    status.setForeground(Color.RED);
                    status.setText("Enter proper values");
                }

对我而言,执行在p.executeUpdate();

之后卡住了

4 个答案:

答案 0 :(得分:2)

您没有执行第一个准备好的声明

  p.setInt(9, ar);
  //MISSING: p.executeUpdate();
  p=con.prepareStatement("update loan set t_os=t_os-? where accno=?");

你只需覆盖它并执行第二个。

答案 1 :(得分:2)

你应该为此使用交易: http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

try {
 con.setAutoCommit(false);

 p=con.prepareStatement(....)
 ....
 p.executeUpdate();

 //Second statement
 p=con.prepareStatement(....)
 ....
 p.executeUpdate();

 con.commit();

 catch(..) {
  con.rollback();
 }

答案 2 :(得分:1)

您在此处发布的内容无效,因为您正在重复使用变量p。您为insert设置了语句,然后将其替换为更新语句,然后执行该操作。您永远不会执行插入语句。

要解决此问题,请在执行p.executeUpdate();之前调用p=con.prepareStatement("update loan set t_os=t_os-? where accno=?");,或者(更好),为这两个语句使用不同的变量,并在两者上调用executeUpdate()

答案 3 :(得分:0)

you can first successfully execute the first query then you continue to the update...
you can use


    try{
    //work first execution
    ///while true
    try{

 //update code
    }finally{


    }
    }finally{
//close resources
    }