暂无图片
JDBC使用绑定变量,9个字符升级为128位
我来答
分享
Crouse
2023-03-24
JDBC使用绑定变量,9个字符升级为128位

数据库环境:12.2

JDK:java jdk8

使用 mybatis 连接数据库,插入9个字符后,发生绑定变量升级,字符长度从32位升级至128位,bind mismatch(22)


测试过程:

表: create table t ( x1 number,x2 varchar2(2001) )

java :

StringBuilder sb = new StringBuilder("x");
for( int i =1 ;i < 2000 ;i++){
cimTestMapper.insertX(i,sb.toString());
sb.append("x");
}
我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
刘贵宾

你这个错误通常出现在使用绑定变量的SQL语句中,由于数据类型或长度不匹配导致绑定变量与实际参数值不一致,从而导致报错。

在你的情况下,可能是因为你绑定变量的长度为32位,但实际传入的值长度超过了32位,所以发生了绑定变量升级。

解决办法可以是在SQL语句中将绑定变量的长度扩展到128位,例如:


INSERT INTO my_table(col_name) VALUES(:col_value);
可以改为:


INSERT INTO my_table(col_name) VALUES(:col_value VARCHAR2(128));
另外,也可以检查一下你传入的参数值是否与绑定变量的数据类型和长度匹配。如果数据类型或长度不匹配,也会导致绑定变量升级,从而出现该错误。

暂无图片 评论
暂无图片 有用 3
暂无图片
Crouse
题主
2023-03-27
不是这个问题,下楼我会放个图
Crouse


暂无图片 评论
暂无图片 有用 2
Crouse
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
Crouse


传红框里面的字符串,就会导致绑定变量升级,从32位升级到128位。而实际上只有9位字符

暂无图片 评论
暂无图片 有用 0
我变秃了也变强了

请问你这个问题后来有查到原因吗?我也遇到了一个类似的问题,使用mybatis执行查询sql,都采用了绑定变量的方式传参,其中有个参数字段是varchar2类型,传入的值是*,数据库后台查v$sql_bind_capture里执行信息,同样的参数语句下MAX_LENGTH有时候是32有时候是128

暂无图片 评论
暂无图片 有用 0
Crouse
题主
2023-04-21
还没有
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏