基于PG开发数据库中出现PSQLException: 错误,无法确定参数$1的数据类型
问题描述
在开发接口适配瀚高数据库时,出现此错误:
同样的xml文件在达梦、金仓、Mysql中使用模糊查询时未发现错误;
... like concat('%',#{name},'%')
后经排查与数据库连接中:jdbc:highgo://.../test?stringtype=unspecified
存在联系。
加入stringtype=unspecified
是为了避免
ERROR: column is of type timestamp without time zone but expression is of type character varying
问题跟踪
stringtype=unspecified
官方解释:
specify the type to use when binding PreparedStatement parameters set via setString(). If stringtype is set to varchar(the default), such parameters will be sent to the server as varchar parameters. If stringtype is set to unspecified, parameters will be sent to the server as untyped values, and the server will attempt to infer an appropriate type. This is useful if you have an existing application that uses setString() to set parameters that are actually some other type, such as integers, and you are unable to change the application to use an appropriate method such as setInt().
翻译:
指定绑定通过setString()设置的PreparedStatement参数时使用的类型。如果将stringtype设置为varchar(默认值),则这些参数将作为varchar参数发送到服务器。如果stringtype设置为unspecified,则参数将作为未类型化的值发送给服务器,服务器将尝试推断适当的类型。如果现有的应用程序使用setString()来设置实际上是其他类型(如整数)的参数,并且无法更改应用程序以使用适当的方法(如settint()),则此方法非常有用。
思考:发生“无法确定参数的数据类型”是因为设置了stringtype=unspecified
在concat
函数中使用,导致无法推断类型;而如果不加此配置,默认为varchar,则插入数据时如果字段为timestamp类型又会出现类型转换错误。
问题解决
- 去掉
stringtype=unspecified
- 强转:
concat('%',#{name}::text,'%')
- 改变写法:
like '%' || #{name} || '%'
结论
选用方法2或3解决。
本文来自博客园,作者:只为中华之崛起而读书,转载请注明原文链接:https://www.cnblogs.com/topzhai/p/18186765
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库