Java执行executeUpdate抛SQLSyntaxErrorException Access建表异常排查
SQLException 触发根源与修复方案
具体语法错误点
- 表名解析失败:直接写
Spider-Man作为表名时,Access SQL解析器会把连字符识别为减法运算符,将字符串判定为「Spider 减去 Man」的非法运算表达式,而非表名。Access 规范中,包含连字符、空格、SQL保留字的表名/字段名,必须用方括号[]包裹才能被正常识别。 - 字段类型不兼容:
IssueValue double(2,2)是MySQL的字段定义语法,当前使用的UCanAccess驱动遵循Access原生SQL规范,完全不支持给DOUBLE类型传入精度、小数位参数,该写法会直接触发类型定义层面的语法错误。 - 非报错的潜在问题:当前建表逻辑未设置主键,虽不会直接抛出异常,但后续藏书数据管理时缺少唯一性约束,容易出现重复录入的脏数据。
修复后的可正常执行的建表代码
createstring = "CREATE TABLE [Spider-Man] (" + "ComicName varchar(40), " + "IssueDate varchar(40), " + "IssueName varchar(40), " + "MintCond varchar(40), " + "IssueValue DOUBLE, " + "IssueNum int, " + "PRIMARY KEY (ComicName, IssueNum)" + ")";
实操提醒:使用UCanAccess连接Access数据库时,不要直接套用其他数据库的自定义类型写法(比如MySQL的带参数decimal、SQL Server的带长度nchar等),非Jet SQL兼容的语法会直接触发解析类异常。
内容的提问来源于stack exchange,提问作者Joan
相关产品推荐
相关产品推荐

