Ballerina中SQL Server与JDBC连接器批量执行命令失败咨询
Ballerina中SQL Server批量插入报错原因分析
SQL Server JDBC驱动的行为特性:MySQL和H2的JDBC驱动对批量操作的结果获取逻辑比较宽松,允许在批量语句提交后直接获取执行结果;但SQL Server官方JDBC驱动有严格约束,要求必须先显式完成批量语句的执行,才能去获取相关结果或执行状态。Ballerina的SQL模块默认逻辑适配了前两者,没考虑SQL Server的这个特性,进而触发错误。
Ballerina SQL模块的跨数据库适配不足:Ballerina的SQL客户端在处理批量插入时,针对MySQL/H2的逻辑是执行后直接尝试获取结果,但这套逻辑不适用于SQL Server——SQL Server驱动要求必须先调用
executeBatch()完成执行动作,再去获取结果。如果代码里没针对SQL Server做特殊处理,就会触发该报错。JDBC规范的严格执行差异:SQL Server驱动严格遵循JDBC规范中关于批量操作的细节要求,一旦在批量语句未执行前尝试获取结果(比如影响行数、执行状态),就会抛出
The statement must be executed before any results can be obtained错误。而MySQL/H2的驱动在这方面做了隐式处理,允许提前操作,因此不会出现问题。
内容的提问来源于stack exchange,提问作者Nipuna Madhushan
相关产品推荐
相关产品推荐

