如何使用jdbc将`int[]`类型数据插入Postgresql?

问题描述 投票:0回答:1

wxvc_collection
列数据类型为
int[]
t_hot_hub_operation_item
为表名。

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)
    val array = connection.createArrayOf("int4", arrayOf(listOf(1, 2, 3)))
    statement.setArray(1, array)
    statement.executeUpdate()
}

我引用了这个答案,但它似乎已经过时了。

运行代码时的错误信息如下:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: invalid input syntax for type integer: "[1, 2, 3]"
  in location:unnamed portal parameter $1 = '...'
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2713)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2401)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:368)
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:498)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:415)
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190)
    at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:152)
    at com.sage.server.TestKt.main(Test.kt:16)

注意:尽量不要更改SQL语句,因为我实际使用的是mybatis框架,不支持修改SQL语句

postgresql jdbc
1个回答
0
投票

我认为您传递的是嵌套数组 (arrayOf(listOf(1, 2, 3))) 而不是平面数组。
PostgreSQL 需要一个单维 int[]。

试试这个:

val array = connection.createArrayOf("int4", arrayOf(1, 2, 3))
© www.soinside.com 2019 - 2024. All rights reserved.