如何通过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
相关产品推荐
相关产品推荐

