0

プログラムには、テーブルを更新するための 2 つの JDBC SQL 準備済みステートメントがあります (プログラムの異なる領域)。ステートメントを実行すると、テーブルにクエリを実行すると、MySQL で更新が表示されます。だから私は更新が起こっていることを知っています。ただし、プログラムの実行を停止して再起動しない限り、更新された結果が表示されないプログラム内の DB に接続されたテーブルがあります。次に、更新がテーブルに表示されます。INSERT INTO を使用する他の準備済みステートメントがあり、これらの変更はテーブルにすぐに表示されます (プログラムを停止して再起動する必要はありません)。問題が UPDATE にあるのか、私のコード (通常の原因) にあるのか、または間違った設定にあるのかはわかりません。メソッド呼び出し間で間違ったことを渡しているのではないかと思います。これはそれが行うことの一部です: 私は収入テーブルを持っています。ユーザーは新しい収入リストを作成します。そのリストの一部は FUNDS テーブル (UPDATE ステートメントを使用) に送信され、別の部分は INCOME テーブル (INSERT INTO ステートメントを使用) に送信されます。これがコードです。助けと提案をありがとう!

     //Get user info
         Income income = new Income();
         Funds fund = new Funds();
         income.setIncomeName(jTextField10.getText());
         String budgetAmt = jTextField11.getText();
         BigDecimal bAmt = new BigDecimal(budgetAmt);
         income.setAmount(bAmt);
         income.setDescription(jTextArea3.getText());
         String iDate = jTextField12.getText();
         Date date = new SimpleDateFormat("MM-dd-yy", Locale.ENGLISH).parse(iDate);
         java.util.Date utilDate = date;
         java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
         income.setDateReceived(sqlDate);
         s = (String)jList10.getSelectedValue().toString();
         income.setFundAllocation(s);

         // Send info to be processed in FUND table with UPDATE - start of problem area
         FundsSvcJDBCImpl fundImpl = new FundsSvcJDBCImpl();                
         Funds calculateFundAmt = fundImpl.calculateFundAmt(fund, income);

         // Send info to be process in INCOME table - this part works   
         IncomeSvcJDBCImpl budgetImpl = new IncomeSvcJDBCImpl();
         Income addIncome = budgetImpl.addIncome(income);


        //This is the part of the FundsSvcJDBCImpl that uses the UPDATE statement

        public Funds calculateFundAmt (Funds fund, Income income) throws Exception {
        Statement stmt = null;
        int max = 0;
        BigDecimal fundTotal = new BigDecimal(0);
        Connection conn = getConnection();

        try{
            stmt = conn.createStatement();

            String sql1 = "SELECT sum(Amount) As fundTotal FROM funds WHERE FundsName = ?";
            PreparedStatement pstmt1 = conn.prepareStatement(sql1);
            pstmt1.setString(1, income.getFundAllocation());
            ResultSet rs2 = pstmt1.executeQuery();
            while(rs2.next()){       
                fundTotal = fundTotal.add(rs2.getBigDecimal("fundTotal"));   
            }

            fundTotal = fundTotal.add(income.getAmount());

            String sql2 =    "UPDATE funds SET Amount = ? WHERE FundsName = ?";
            PreparedStatement pstmt = conn.prepareStatement(sql2);
            pstmt.setBigDecimal(1, fundTotal);
            pstmt.setString(2, income.getFundAllocation());
            pstmt.executeUpdate(); 

         }
        catch (Exception e){
            throw e;
        }
        finally {
            if (conn != null){
                conn.close();  
                stmt.close();               
            }                 
        }

     return fund;
 }
4

0 に答える 0