0

別のテーブルの挿入が成功した後、テーブルを自動的に更新する必要があります。私はこれを行うために準備されたステートメントを使用しており、いくつかの方法を試しましたが、うまくいきませんでした。誰かがこれについて私を助けてくれませんか。コードは次のとおりです

            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

4 に答える 4

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();
 }
于 2012-03-19T13:26:57.007 に答える
2

最初の準備されたステートメントを実行しません

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

上書きして2番目のものを実行するだけです。

于 2012-03-19T13:21:39.383 に答える
1

変数を再利用しているため、ここに投稿したものは機能しませんp。挿入用のステートメントを設定し、それを更新用のステートメントに置き換えてから実行します。挿入のステートメントを実行することはありません。

これを修正するには、 をp.executeUpdate();実行する前に呼び出すかp=con.prepareStatement("update loan set t_os=t_os-? where accno=?");、(より良い) 2 つのステートメントに異なる変数を使用executeUpdate()し、両方を呼び出します。

于 2012-03-19T13:22:13.787 に答える
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
    }
于 2012-03-19T16:07:51.747 に答える