向PostgreSQL数据库插入Date类型数据报错
1|0问题场景
这个是公司项目进行更改,将项目的数据库从Oracle版本改为PostgreSQL版本时发生的错误。
控制台报错内容。
SQL: insert into table (...,RQ,...) select ...,?,... union all select ...,?,...
//(这里的...省略了其他字段, 主要是RQ日期类型报错就没列出)
Cause: org.postgresql.util.PSQLException: 错误: 字段 "rq" 的类型为 timestamp without time zone, 但表达式的类型为 text
建议:你需要重写或转换表达式 位置:404
mapper文件中的动态sql为
对应的实体类为
当在插入数据到数据库的时候就会报字段RQ类型错误的问题,但是通过检查sql语句后并没有发现明显的错误。
虽然控制台报错了,但还是能插入几条数据到数据库中,然后就报错不能插入了。这个时候考虑到有可能插入数据的问题,但是这里设置了#{item.rq,jdbcType=TIMESTAMP}
,数据类型也是符合PostgreSQL数据库的日期类型timestamp的,所以也不是这个的问题。
这个时候我将数据库中的数据清除,重新执行了几遍程序后发现有时候能够向数据库中插入几条数据,然后就报错,有时候一条数据都没有插入就报错了,很是奇怪。
2|0解决方法
后面使用了PostgreSQL的特定的语法,在rq后面加上::timestamp
就能够正常插入了,如下
但这样每个日期的字段都要加上这个,更改起来很麻烦,所以我在想有没有更好的解决方案。
后面我更改了这一条批量插入的动态sql。由于这个sql在Oracle数据库中是能够正常的运行的,有可能在PostgreSQL数据库存在兼容的问题,所以改成了在使用Mysql数据库时常写的动态sql,如下:
重新执行程序后,没有报错,数据正常插入,完美解决!
__EOF__

本文链接:https://www.cnblogs.com/errors1/p/18587714.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)