2016-12-30 18 views
0

私のプロジェクトで助けが必要です..........このコードが表示されています
ボタンをクリックすると「結果セットが閉じられた後に操作できません」というエラーメッセージが表示されます................. ....結果セット終了後に操作が許可されない

private void jButton20ActionPerformed(java.awt.event.ActionEvent evt) {           
    String car_id = ""; 
    Date rent_date = null; 
    Date return_date = null; 
    Date rented_date = null; 

    String model = ""; 
    String rent_place = ""; 
    String return_place = ""; 
    double disrent = 0.0; 
    double fine = 0.0; 
    double rent = 0.0; 
    double totrent = 0.0; 
    int mem_id = Integer.parseInt(memidget.getText()); 


    try { 

     Class.forName("java.sql.DriverManager"); 
     Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/lion", "root", "achinth"); 
     Statement stmt = (Statement) con.createStatement(); 
     String query = "select * from car_use_log where returned='N' and mem_id=" + mem_id + " ;"; 
     ResultSet rs = stmt.executeQuery(query); 
     int a = 0; 

     while (rs.next()) { 
      car_id = rs.getString("car_id"); 
      rent_date = rs.getDate("rent_date"); 
      return_date = rs.getDate("return_date"); 
      rented_date = rs.getDate("rented_date"); 
      model = rs.getString("model"); 
      rent_place = rs.getString("place_of_rent"); 
      return_place = rs.getString("place_of_return"); 
      a++; 
     } 


     if (a == 0) { 
      JOptionPane.showMessageDialog(this, "You have currently not rented a car"); 
     } else { 
      curstatus.setVisible(true); 
      mem_login.setVisible(false); 
      t18.setText(model); 
      t19.setText(car_id); 
      t20.setText("" + rent_date); 
      t63.setText("" + rented_date); 
      t21.setText("" + return_date); 
      t24.setText(rent_place); 
      t25.setText(return_place); 

      String query1 = "select rent from car_details where model='" + model + "';"; 
      ResultSet rs1 = stmt.executeQuery(query1); 
      while (rs1.next()) { 
       rent = rs1.getDouble("rent"); 
      } 
      int no_days = 0; 
      Date curdate = null;//to initalise 
      int totno_days = 0; 
      int return_cur_diff = 0; 
      if (rented_date != null) { 

       String query2 = "select datediff('" + return_date + "',curdate()),datediff(curdate(),'" + rented_date + "'),datediff('" + return_date + "','" + rented_date + "'),curdate();"; 
       ResultSet rs2 = stmt.executeQuery(query2); 


       while (rs2.next()) { 
        no_days = rs2.getInt(2); 
        curdate = rs2.getDate(4); 
        return_cur_diff = rs.getInt(1); 
       } 


       if (return_cur_diff < 0) { //Car is not returned after return date ....... fine calulation needed 
        disrent = totno_days * rent; 
        fine = -2 * return_cur_diff * rent; 
        totrent = fine + disrent; 
       } 
       else if (return_cur_diff > 0) { 
        disrent = no_days * rent; 
        jLabel39.setText("Rent to be Paid on Return Date :"); 
        totrent = disrent; 
       } 
       else { 
        disrent = totno_days * rent; 
        totrent = disrent; 
       } 

      } 
      } 
      t22.setText("" + disrent); 
      t23.setText("" + fine); 
      t26.setText("" + totrent); 




    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, e.getMessage()); 
    } 

}       

答えて

1

ありがとう実は、問題はここにある助けてください。

if (rented_date != null) { 

       String query2 = "select datediff('" + return_date + "',curdate()),datediff(curdate(),'" + rented_date + "'),datediff('" + return_date + "','" + rented_date + "'),curdate();"; 
       ResultSet rs2 = stmt.executeQuery(query2); 


       while (rs2.next()) { 
        no_days = rs2.getInt(2); 
        curdate = rs2.getDate(4); 
        return_cur_diff = rs.getInt(1); 
       } 

のOracleドキュメントから(http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html):

ResultSetオブジェクトは、それを生成したStatementオブジェクト がクローズ、再実行、または複数の結果のシーケンスから次の結果を取得するために使用されると自動的に閉じられます。

あなたはrsオブジェクトを閉じるにつながるstmtオブジェクトを再利用しています。 stmtオブジェクトを再利用した後は、whileループで使用されます。ちなみに、私はそれが単にタイプミスであると信じています。

+0

私はそれを修正する必要がありますか?もう1つのステートメントを作成する必要がありますか? –

+0

私の答えで言及したように、私はあなたが単にタイプミスをしたと信じていました。変数の名前からわかるように、このエラーを修正するには、 'return_cur_diff = rs.getInt(1);'を 'return_cur_diff = rs2.getInt(1); 'に置き換えてください。 – arcquim

+0

ありがとうございました!!! –

関連する問題