2016-06-30 22 views
1

Ich arbeite derzeit an einer Anwendung für ein Restaurant. Die Idee für den Code, an dem ich gerade arbeite, ist, dass er den Namen aus einer Combobox erhält und einen Beleg mit der Angestelltennummer der Person, die daran arbeitet, in die Datenbank einfügt. Der Code whith, die ich versuche, es zu tun ist:Vor dem Start der Ergebnismenge läuft mehrere 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()); 
     } 
    }; 

Die Aussagen sind:

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 + ");"; 
    }; 

} 

ich den Fehler immer vor Beginn der Ergebnismenge, die ich sah, was es bedeutet, aber Ich kann es im Moment nicht beheben. Hilfe wird geschätzt.

Wenn ich vergessen haben, wichtiger Code schreiben lassen Sie mich wissen, ich es

+0

Bitte senden Sie den Stacktrace des Fehlers, den Sie sehen. – Asaph

+0

nur ein Vorschlag, es ist besser, wenn Sie separate Anrufe machen, um das Kombinationsfeld zu erhalten und die Quittung einzustellen, wäre es viel sauberer und einfach, Ausnahmen zu behandeln. – sash

Antwort

2

Sie haben aktualisiert werden ResultSet.next() aufrufen, bevor Sie die Felder dieses ResultSet zugreifen können. So müssen Sie Ihre Zuordnung von employeeId in Ihre while Schleife bewegen:

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

Aus der Dokumentation von ResultSet.next():

A ResultSet Cursor zunächst vor der ersten Zeile positioniert ist; der erste Aufruf der Methode next macht die erste Zeile zur aktuellen Zeile; Der zweite Aufruf macht die zweite Zeile zur aktuellen Zeile und so weiter.