我需要在插入另一个表成功后自动更新表。 我正在使用准备好的声明来做这件事,并尝试了几种方法,但努力工作。有人可以帮我解决这个问题。代码如下:
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();
之后卡住了答案 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
}