2016-06-30 11 views
1

私は現在、レストラン向けのアプリケーションを開発中です。私が現在取り組んでいるコードのコンセプトは、コンボボックスから名前を取得し、作業している人の従業員番号を使ってレシートをデータベースに挿入することです。私はそれをやろうとしているコードwhithは次のとおりです。複数のSQLを実行している結果セットの開始前

RestaurantOrder sqlRestaurantOrder = new RestaurantOrder(); 
    ActionListener printReceiptListner; 
    printReceiptListner = (ActionEvent) -> { 
     int ID = Integer.parseInt(input1.getText()); 
     try { 
      SystemManager manager = new SystemManager(); 
      ResultSet rs = manager.stmt.executeQuery(sqlRestaurantOrder.setIdSql(ID)); 

      while (rs.next()) { 

       double totalPrice = rs.getDouble("sumprice"); 
       if (ID > 0) { 
        Receipt receiptSql = new Receipt(); 
        String firstName = (String) cb.getSelectedItem(); 
        String checkoutDate = new SimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime()); 
        ResultSet rs2 = manager.stmt.executeQuery(receiptSql.getEmployeeId(firstName)); 
        int employeeId = rs2.getInt("id"); 

        while (rs2.next()) { 

        Receipt receiptSql2 = new Receipt(); 
        ResultSet rs3 = manager.stmt.executeQuery(receiptSql2.SetStatusReceipt(employeeId, checkoutDate, ID, totalPrice)); 
        while (rs3.next()) { 
        } 
        } 

       } 
      } 

     } catch (SQLException k) { 
      JOptionPane.showMessageDialog(null, k.getMessage()); 
     } 
    }; 

文は、次のとおりです。私はエラーを取得しています

public class Receipt { 

    public String sql; 
    public String sql2; 

    public String getEmployeeId(String firstName){ 
     return sql2 = "SELECT id FROM employee WHERE firstName = '" + firstName + "';"; 
    } 

    public String SetStatusReceipt(int employeeId, String checkoutDate, int id, double totalPrice){ 
     return sql = "INSERT INTO `receipt` (`employeeId`, `price`, `restaurantOrderId`, `checkoutDate`) VALUES (" + employeeId + " , " + totalPrice + ", " + id + ", " + checkoutDate + ");"; 
    }; 

} 

それはしかし、何を意味するのか、私が見上げた結果セットの開始前に、私はそれを現時点で修正することはできません。ヘルプは高く評価されます。

私はより多くの重要なコードをポストするのを忘れた場合は私はあなたがそのResultSetのフィールドにアクセスすることができます前ResultSet.next()を呼び出す必要があり、それを

+0

表示されているエラーのスタックトレースを投稿してください。 – Asaph

+0

ちょうど提案、コンボボックスを取得し、領収書を設定するために別々の呼び出しを行う方が良い場合は、例外を処理するのがずっときれいで簡単です。 – sash

答えて

2

を更新します知っています。つまり、あなたのwhileループにemployeeIdのあなたの割り当てを移動する必要があります。

while (rs2.next()) { 
    int employeeId = rs2.getInt("id"); 

ResultSet.next()のドキュメントから:

ResultSetカーソルは最初に最初の行の前に配置されています。メソッドnextへの最初の呼び出しは、最初の行を現在の行にします。 2番目の呼び出しは2番目の行を現在の行にします。

関連する問題