我正在用 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”
在我看来,我尝试将文本参数作为价格?
我已将数据库更改为双倍价格而不是小数。那不起作用。我尝试过使用文本作为字符串,但这会导致不同的问题。我不知道为什么它不将价格参数设置为数据库中的价格。我检查了参数的值是否正确,确实如此。
您的查询顺序不匹配:
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);
}