h2 | Java Столбец не найден (но оператор работает в другом месте) - PullRequest
0 голосов
/ 21 марта 2020

Я хочу вставить данные в мою таблицу, у меня есть оператор вставки (в ту же таблицу), который я использую в другом методе, который работает в одном методе, но возвращает JdbcSQLSyntaxErrorException: Column xyz not found; в другом. где xyz - это значение, которое я хочу передать в столбец (не имя столбца). Это метод, который вызывает исключение:

  public void btnSaveStock(MouseEvent mouseEvent) {

        ArrayList<Stock> stock = new ArrayList<>();
        stock.addAll(tblStock.getItems());
        stock.remove(removedStock);
        try {
            Class.forName("org.h2.Driver");
            Connection connection = DriverManager.getConnection(url, "", "");
            Statement statement = connection.createStatement();

            for (int i = 0; i < stock.size(); i++) {
                String stockName = stock.get(i).getDescription();
                String stockCode = stock.get(i).getCode();
                double fuelBalance = stock.get(i).getStoresBalance();
                double counterBalance = stock.get(i).getCounterBalance();
                System.out.println(stockName + stockCode + fuelBalance + counterBalance);
                String insertQuery = "INSERT INTO PUBLIC.STOCK (CODE, description, \"fuelBalance\", \"counterBalance\") VALUES (" + stockCode + ",'New Product','1.00','1.00')";
                statement.executeUpdate(insertQuery);
                String updateQuery = "Update STOCK set DESCRIPTION='" + stockName + "' where CODE='" + stockCode + "'";
                statement.executeUpdate(updateQuery);
                updateQuery = "Update STOCK set  \"fuelBalance\"='" + fuelBalance + "' where CODE='" + stockCode + "'";
                statement.executeUpdate(updateQuery);
                updateQuery = "Update STOCK set \"counterBalance\"='" + counterBalance + "' where CODE='" + stockCode + "'";
                statement.executeUpdate(updateQuery);
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }

     //more method calls here
    }

Это метод, который успешно вставляет данные:

    public void addNewStock(MouseEvent mouseEvent) {
        Stock stock = new Stock();
        String lastCode = savedStockList.get(savedStockList.size() - 1).getCode();
        int newCode = 1 + Integer.parseInt(lastCode);
        stock.setCode(String.valueOf(newCode));
        stock.setCounterBalance(0);
        stock.setDescription("New Product");
        stock.setStoresBalance(0);
        savedStockList.add(stock);
        try {
            Class.forName("org.h2.Driver");
            Connection connection = DriverManager.getConnection(url, "", "");
            Statement statement = connection.createStatement();
            String insertQuery = "INSERT INTO PUBLIC.STOCK (CODE, description, \"fuelBalance\", \"counterBalance\") VALUES (" + newCode + ",'New Product','1.00','1.00')";
            statement.executeUpdate(insertQuery);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        initialiseStock();
    }

Так что, если stockCode содержит значение xyz, исключение будет Column xyz not found

Я не понимаю, почему это работает в одном методе, но возвращает исключение в другом.

1 Ответ

0 голосов
/ 21 марта 2020

Это работает, потому что newCode - это число, которое не нуждается в кавычках и не работает, потому что stockCode - это строка, которую необходимо заключить в кавычки. Добавьте одинарные кавычки вокруг stockCode, и оно должно работать:

String insertQuery = "INSERT INTO PUBLIC.STOCK (CODE, description, \"fuelBalance\", \"counterBalance\") VALUES ('" + stockCode + "','New Product','1.00','1.00')";

В качестве примечания вы должны действительно использовать подготовленный оператор .

...