Как устранить ошибку «Усечение данных: значение вне диапазона для столбца« id_brand »в строке 1»? - PullRequest
0 голосов
/ 01 февраля 2020

Я работаю над проектом Java с FX и SQL. В этом Java проекте у меня есть магазин, где я могу добавлять товары в базу данных.

Теперь я также хочу, чтобы я мог обновить продукт. Я могу только обновить цену продукта, но не название бренда и название типа. Когда я хочу обновить название бренда или имя типа, я получаю сообщение об ошибке в консоли.

enter image description here

Это код для обновления продукта:

 public int editProduct(Double price, int brand, int type,  int id) {
    String sql = "UPDATE products SET price=?, id_brand=?, id_type=? WHERE id=?";
    try {
        Class.forName(DRIVER);
        Connection con = DriverManager.getConnection(DB_URL, USER, PASS);
        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setDouble(1, price);
        stmt.setInt(2, brand);
        stmt.setInt(3, type);
        stmt.setInt(4, id);
        int rows = stmt.executeUpdate();
        getProducts();
        con.close();
        return rows;
    } catch (ClassNotFoundException | SQLException ex) {
        System.out.println("SQL error updaten product");
        System.out.println(ex.getMessage());
    }
    return -1;
}

-

    public class EditProductController {

    @FXML TextField productId, productBrand, productType, productPrice;
    @FXML Label berichtMelding;
    @FXML Button saveButton;

    private StoreDataAccesObject storeDDA;

    public void fill (Product data) {
        berichtMelding.setText(Integer.toString(data.getId()));

        productType.setText(data.getType());
        productBrand.setText(data.getBrand());
        productPrice.setText(Double.toString(data.getPrice()));
    }

    public void updateProductButton() {
        storeDDA = new StoreDataAccesObject("noorderpoort", "toets");

        ArrayList<String> errorList = new ArrayList<>();
        String brand = productBrand.getText();
        String type = productType.getText();
        String price = productPrice.getText();
        String id = berichtMelding.getText();

        int idBrand;
        int idType;

        if (brand.trim().length() <= 0 || type.trim().length() <= 0 || price.trim().length() <= 0) {
            errorList.add("Alle velden moeten ingevuld zijn.");
        } else {

            if (storeDDA.nameExists("brands", brand) > 0) { //checking if brand exists in database.
                idBrand = storeDDA.nameExists("brands", brand);
            } else {
                idBrand = storeDDA.nameExists("brands", brand);
                if (idBrand < 0) {
                    errorList.add("Brand niet opgeslagen");
                }
            }

            if (storeDDA.nameExists("types", type) > 0) {
                idType = storeDDA.nameExists("types", type);
            } else {
                idType = storeDDA.nameExists("types", type);
                if (idType < 0) {
                    errorList.add("Type niet opgeslagen");
                }
            }

            if (storeDDA.editProduct(Double.parseDouble(price), idBrand, idType, Integer.parseInt(id)) <= 0) {
                berichtMelding.setText("Product niet geupdate.");
            } else {
                Stage editProduct = (Stage) saveButton.getScene().getWindow();
                editProduct.close();
            }
        }

        if (!errorList.isEmpty()) {
            String errorText = "";
            for (String error : errorList) {
                errorText += error;
            }
            berichtMelding.setText(errorText);
        }
    }
}

Таблицы:

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Вы определили длину столбца id_brand как 11, и я думаю, что вы пытаетесь добавить значение длиной более 11. Я воспроизвел ту же ошибку на своем конце.

create table Test(id integer(11) unsigned);
insert into Test values(1234567891011);
Error:Out of range value for column 'id'ar row 1

И если вы при попытке добавить строковое значение в столбец Integer, он не выдаст вышеупомянутую ошибку, вместо этого он покажет:

Incorrect integer value: 'A' for column 'id' at row 1
0 голосов
/ 01 февраля 2020

'Усечение данных: Значение вне диапазона для столбца' id_brand 'в строке 1'?

Данные, которые вы пытаетесь сохранить в id_brand, не помещаются. Например, строка может быть слишком длинной или слишком большим числом.

Проверьте значение столбца без знака id_brand, если оно соответствует диапазону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...