出现错误:“小数值不正确:第 1 行‘价格’列的‘Apple Watch Series 6’。”价格设置了错误的值。我能做什么?

问题描述 投票:0回答:1

我正在用 Java 制作一个愿望清单网站,当我尝试更新愿望时,价格出现错误。我正在 thymeleaf 和 springboot 工作。 这是我在 html 中的表格(价格和描述/文本是我遇到问题的地方):

<form class="update" action="/wishlist/wish/update" method="post">
    <table>
        <tr>
            <td>
                <label for="name">Name:</label>
                <input id="name" type="text" name="name" th:value="${wish.name}">
            </td>
        </tr>
        <tr>
      **      <td>
                <label for="description">Description:</label>
                <input id="description" type="text" name="text" th:value="${wish.text}">
            </td>
        </tr>
        <tr>
            <td>
                <label for="price">Price:</label>
                <br>
                <input id="price" type="text" name="price" th:value="${wish.price}">
            </td>
        </tr>**
        <tr>
            <td>
                <label for="link">Link:</label>
                <input id="link" type="text" name="link" th:value="${wish.link}">
            </td>
        </tr>
        <tr>
            <td>
                isBought:
                <input type="radio" id="isBoughtFalse" name="isBought" value="false" th:checked="${wish.isBought == false}">
                <label for="isBoughtFalse">False</label>
                <input type="radio" id="isBoughtTrue" name="isBought" value="true" th:checked="${wish.isBought == true}">
                <label for="isBoughtTrue">True</label>
            </td>
        </tr>
    </table>
    <input type="hidden" name="id" th:value="${wish.id}">
    <button type="submit">Update</button>
    <button type="submit" form="cancel">Cancel</button>
</form>

这是我的存储库类中负责更新 Mysql DB 中的愿望的方法:

public void updateWish(int id, String name, String text, double price, String link, boolean isBought) {
        System.out.println("price: " + price);
        System.out.println("desc: " + text);
        System.out.println("name: " + name); /* added this to see if the right values got set in the parameters and they did*/
        System.out.println("link: " + link);
        System.out.println("isBought: " + isBought);
        String query = "UPDATE wish SET name = ?, text = ?, price = ?, link = ?,  is_bought = ? WHERE id = ?;";
        jdbcTemplate.update(query,id, name, text, price, link, isBought);
    }

这里是数据库的 MySQL 脚本:

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE wishlist (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    name VARCHAR(100) NOT NULL,
    creation_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_user_wishlist
        FOREIGN KEY (user_id)
        REFERENCES User(id)
        ON DELETE CASCADE
);

CREATE TABLE wish (
    id INT PRIMARY KEY AUTO_INCREMENT,
    wishlist_id INT,
    name varchar(55),
    text VARCHAR(255) NOT NULL,
    price decimal(10,2),
    link VARCHAR(255),
    is_bought BOOLEAN DEFAULT FALSE, 
    is_reserved_by_user_id VARCHAR(255),
    CONSTRAINT fk_wishlist_wish
        FOREIGN KEY (wishlist_id)
        REFERENCES wishlist(id)
        ON DELETE CASCADE
);

我得到的错误是:

发生意外错误(类型=内部服务器错误,状态=500)。 org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback; SQL 的未分类 SQLException [更新希望 SET 名称 = ?, 文本 = ?, 价格 = ?, 链接 = ?, is_bought = ?哪里 id = ?;]; SQL状态[HY000];错误代码[1366];小数值不正确:第 1 行“价格”列为“Apple Watch Series 6”

在我看来,我尝试将文本参数作为价格?

我已将数据库更改为双倍价格而不是小数。那不起作用。我尝试过使用文本作为字符串,但这会导致不同的问题。我不知道为什么它不将价格参数设置为数据库中的价格。我检查了参数的值是否正确,确实如此。

java mysql spring-boot thymeleaf sqlexception
1个回答
1
投票

您的查询顺序不匹配:

        String query = "UPDATE wish SET name = ?, text = ?, price = ?, link = ?,  is_bought = ? WHERE id = ?;";
        jdbcTemplate.update(query,id, name, text, price, link, isBought);

注意:查询中的第一个参数是

name
,但在
update
方法中是
id
,因此 JDBC 尝试将
link
值放入
price
列中。

尝试适当地输入参数:

public void updateWish(int id, String name, String text, double price, String link, boolean isBought) {
    String query = "UPDATE wish SET name = ?, text = ?, price = ?, link = ?,  is_bought = ? WHERE id = ?";
    jdbcTemplate.update(query, name, text, price, link, isBought, id);
}
© www.soinside.com 2019 - 2024. All rights reserved.