GBase 8s
其他
问答

Gbase8s数据库下,通过oracl模式进行JDBC操作执行Merge into 语句遇到的多种bug,请解惑

发表于2024-09-10 20:42:56201次浏览6个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: GBase8sV8.8_AEE_3.3.0_2_36477d

【操作系统】:centos 7

【CPU】:4c16g

【问题描述】*:  业务场景为进行CDC数据同步,业务逻辑中引入对应版本Gbase8s的方言包,JDBC包;出现merger into语句的各种bug,以下一一描述:

1. 空表执行JDBC 插入,字段无法进行关联映射,我的测试仅使用基础的bigInt的id字段和char类型的字符串字段,主键无法映射,报错如下:推测应该是不加字段类型绑定无法有效映射

随后我修改id值的传值为String,此时程序执行成功,但是数据库数据完全不一致,截图如下:初步怀疑对于字符串进行了错误截断,

随后又有异常情况出现,当我再数据库存在主键值为1的数据的情况下,重新修改代码的id列为Long传值,继续出现主键列我无法映射,随后我修改100为1,插入成功,数据库又出现异常:字符串值转换异常

不清楚gbase-jdbc包中什么执行逻辑,查询过JDBC和SQL手册,该函数完全支持,Oracle模式也支持,数据库下去执行该sql也没有任何问题,此处仅举例最基础的两个字段,以上操作问题查询社区有人推荐使用 ?::BIGINT形式去转换,但是对于普通字段而言可以,FLOAT字段会出现精度丢失,另有其他字段会隐式转换出问题,以上不考虑性能的情况下,使用CASE(? as CHAR)函数进行转换,无隐式转换等问题,但是无法保证压测环境下性能损耗,并且例如 CAST(%s AS DECIMAL(20,4) ) 又出现强转换和绑定;

     附 当前代码下我的驱动包信息(官网下载)、DDL语句

DDL:

   希望能有技术工程师联系,是否有数据库版本影响或者其他因素

 

评论

登录后才可以发表评论
用户头像
路路路发表于 1年前
能留个联系方式 吗
GBase用户18005发表于 1年前
@路路路:我的微信 13201922448,谢谢
用户头像
路路路发表于 1年前
已联系您,感谢您的支持
用户头像
liaosnet发表于 1年前
有IFX_USEPUT=1参数时,数据库不检查传入数据的类型,用户必须严格输入类型!否则内部转换时,会异常。。
最佳回答
崔哥发表于 9个月前
评论是一种尊重
GBase用户51887发表于 2个月前
好问题啊。