You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JDBC向PostgreSQL的int[]类型字段插入数据(代码执行报错)

如何通过JDBC向PostgreSQL的int[]类型字段插入数据(代码执行报错)

嘿,我帮你排查下这个问题!你现在遇到的报错是因为传递数组参数的方式不对,导致PostgreSQL把整个列表当成单个整数来解析了。

先看你的错误根源:你写的connection.createArrayOf("int4", arrayOf(listOf(1, 2, 3)))这里,把listOf(1,2,3)又包了一层arrayOf,相当于传给驱动的是一个包含List的数组,驱动最终把它序列化成了字符串"[1, 2, 3]",PostgreSQL收到后,试图把这个字符串转成int[]里的单个整数元素,自然就报“invalid input syntax for type integer”的错了。

咱们直接改对就行,正确的做法是给createArrayOf传基本类型的数组,而不是嵌套的集合:

修正后的完整代码:

fun main() {
    val connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/sage-dev", "postgres", "123456")
    val sql = "INSERT INTO t_hot_hub_operation_item (wxvc_collection) VALUES (?)"
    val statement = connection.prepareStatement(sql)
    // 直接传Int类型的数组
    val array = connection.createArrayOf("int4", arrayOf(1, 2, 3))
    // 如果你的数据源是List,转成Int数组再传入也可以
    // val array = connection.createArrayOf("int4", listOf(1,2,3).toIntArray())
    statement.setArray(1, array)
    statement.executeUpdate()
}

为什么之前参考的方法失效了?大概率是PostgreSQL JDBC驱动版本更新了,旧版本的处理逻辑可能允许嵌套集合,但现在新版本要求更直接的数组类型传入,这样驱动才能正确识别并转成PostgreSQL的int[]类型。

你再跑下修正后的代码,应该就能正常插入数据啦!

备注:内容来源于stack exchange,提问作者SageJustus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:24:29