使用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
相关产品推荐
相关产品推荐

