TDengine使用Taos-JDBC Restful连接器执行ALTER语句报invalid variables错误
问题根因
这个问题是Taos-JDBC Restful连接器的版本缺陷导致的:
- 低于3.0.4.0的稳定版驱动在处理ALTER等DDL语句时,会按照DML语句的逻辑强制解析返回报文中的
affected_rows变量 - TDengine服务端执行完DDL语句后,返回的报文中不存在
affected_rows字段,驱动层找不到对应变量就抛出2303invalid variables错误,但此时服务端已经完成了表结构修改操作,所以会出现实际修改成功但代码抛错的矛盾现象
解决方案
你可以根据自身项目情况选择以下任意一种方案:
- 升级Taos-JDBC驱动到3.0.4.0及以上的稳定版本,该版本已经修复了Restful连接器下DDL语句的返回结果解析逻辑,不会再误判不存在的返回变量
- 若暂时无法升级驱动,可在MyBatis对应ALTER语句的配置项中添加
statementType="STATEMENT",不使用预编译模式执行DDL,同时将调用方法从sqlSession.update()替换为直接调用JDBC Statement的execute()方法,跳过影响行数的强制校验 - 临时兼容方案:执行ALTER语句时主动捕获错误码为2303的SQLException,捕获后执行查询表结构的命令确认修改是否生效,确认生效后即可忽略该异常,正常走后续业务流程
内容的提问来源于stack exchange,提问作者Ray Shown
相关产品推荐
相关产品推荐

