0

Oracle データベースに接続されている Java アプリケーションがあります。ユーザーが というID COMMUNITY_ID、 という開始日START_DATE、 という終了日を入力するフォームがありますEND_DATE

入力した値をアプリケーションでデータベース内のテーブルから検索し、検索結果が正しい場合は、合計値の合計を表示する必要があります。

3 つの方法があります。各メソッドは、1 つのテキスト ボックスの検索を担当します。たとえば、最初のメソッドtotal 1は を検索しCOMMUNITY_ID、2 番目のメソッドは を検索しSTART_DATE、最後のメソッドは を検索しますEND_DATE

結果セットが空であるか閉じているというエラー メッセージが表示されます。メッセージをはっきりと理解していないため、その理由はわかりません。

以下は私のコードです。誰かがそれを修正する方法を知っているなら、私を助けてください。

public void total3()
{
    ResultSet result;
    System.out.println("total 3");

    String endDate = this.EndTxtBox.getText();

    try
    {
        rs=st.executeQuery("select RECIPT_ID,COMMUNITY_ID,VALUE,START_DATE,END_DATE, ITEM_BOUGHT,REASON from RECIPTS where  END_DATE = '" +endDate+"'");
        //display();
        this.EndTxtBox.setText(rs.getString("END_DATE"));
    }
    catch(Exception ex)
    {

        JOptionPane.showMessageDialog(null, "Searched Failed" + ex);
    }

    try
    {
        result =  rs=st.executeQuery("select SUM(VALUE)from RECIPTS where END_DATE = '" +endDate+"'" );
        //result =  rs=st.executeQuery("select RECIPT_ID,COMMUNITY_ID,VALUE,START_DATE,END_DATE, ITEM_BOUGHT,REASON,SUM(VALUE)from RECIPTS group by RECIPT_ID,COMMUNITY_ID,VALUE,START_DATE,END_DATE, ITEM_BOUGHT,REASON ");
    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, "Error" + ex);
    }
}

何かアイデアはありますか?それの何が問題なのですか?

4

1 に答える 1

3

最初の行に移動する前に、結果セットから読み取ろうとしています:

if (rs.next()) {
    endDate = rs.getString("END_DATE");
}

あなたのコードは悪い習慣でいっぱいです:

  • UI コードとデータベース アクセス コードの混在
  • 例外のキャッチ
  • 行と列のうちの 1 つだけに関心がある場合に、多数の行と列を選択する
  • 準備済みステートメントを使用しない
  • と の両方resultrs同じものに使用する
  • ステートメントと結果セットを閉じない
  • 文字列変数を使用して日付を格納する
  • 貧弱で一貫性のないインデント
于 2012-06-14T17:22:10.053 に答える