华为云云数据库GaussDBbatchMode设置错误_云淘科技
问题现象
设置url参数batchMode=on且reWriteBatchedInserts=true,使用JDBC批量插入数据,抛出异常,提示绑定参数数量与语句需要的参数数量不一致:
bind message supplies * parameters, but prepared statement "" requires *
示例1:
// conn是已经创建的Connection对象,创建该connection的url参数包含&batchMode=on&reWriteBatchedInserts=true // 批量绑定参数后执行,绑定参数数量会与改写后的insert语句的栏位数不匹配,抛出异常 // java.sql.BatchUpdateException: bind message supplies 3 parameters, but prepared statement "" requires 6 PreparedStatement stmt = conn.prepareStatement("insert into test_tbl values (?, ?, ?)"); stmt.setInt(1, 1); stmt.setString(2, "aaa"); stmt.setString(3, "bbbb"); stmt.addBatch(); stmt.setInt(1, 1); stmt.setString(2, "aaa"); stmt.setString(3, "bbbb"); stmt.addBatch(); stmt.setInt(1, 1); stmt.setString(2, "aaa"); stmt.setString(3, "bbbb"); stmt.addBatch(); stmt.executeBatch();
原因分析
将参数reWriteBatchedInserts设置为true时,批量语句会将多条sql合并为一条,导致语句中预留参数栏位数发生变化,如果batchMode=on,会按照合并前的sql绑定参数,导致绑定参数数量与语句需要的参数数量不一致。
处理方法
reWriteBatchedInserts设置为true时,将batchMode设置为off。
父主题: 常见问题处理
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家