繁体   English   中英

在开始运行多个SQL的结果集之前

[英]Before start of result set running multiple 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.next()才能访问该ResultSet的字段。 因此,您需要将对employeeId的分配移动到while循环中:

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

ResultSet.next()的文档中:

ResultSet游标最初位于第一行之前; 第一个对方法的调用next使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM