You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JDBC操作AWS Aurora MySQL时UPDATE语句语法错误排查

问题排查与解决

1. 建表语句存在语法错误

你的CREATE TABLE语句末尾缺失了闭合括号,这是导致早期语法错误的真正原因(并非只是缺分号):

CREATE TABLE IF NOT EXISTS secret_number_generator(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, secret_number VARCHAR(20);

修正后:

CREATE TABLE IF NOT EXISTS secret_number_generator(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, secret_number VARCHAR(20));

(注意在VARCHAR(20)后添加了闭合括号))

2. UPDATE语句字符串未加单引号

secret_number是VARCHAR类型,SQL中字符串值必须用单引号包裹,你的拼接代码没加,导致解析报错:

String updateSecretNumber = "UPDATE secret_number_generator SET secret_number = " + secretNumber + " WHERE id = " + id + ";";

修正后:

String updateSecretNumber = "UPDATE secret_number_generator SET secret_number = '" + secretNumber + "' WHERE id = " + id + ";";

(给secretNumber前后补上单引号')

3. 代码结构有多余的闭合大括号

在/* Logic for setting up secretNumber */注释后面多了一个},导致后续的secretNumber赋值和UPDATE操作跑出了try块范围,可能引发变量访问异常或连接已关闭的问题,直接删除这个多余的}即可。

额外建议:用PreparedStatement规避风险

直接拼接SQL字符串不仅容易出语法问题,还存在SQL注入风险,推荐改用PreparedStatement:

// 替换原UPDATE相关代码
String updateSql = "UPDATE secret_number_generator SET secret_number = ? WHERE id = ?;";
PreparedStatement updateStmt = conn.prepareStatement(updateSql);
updateStmt.setString(1, secretNumber);
updateStmt.setLong(2, Long.parseLong(id));
updateStmt.executeUpdate();

内容的提问来源于stack exchange,提问作者Abe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:07:54