【问题标题】:How create a SQL array from a Java List?如何从 Java 列表创建 SQL 数组?
【发布时间】:2011-12-17 09:57:23
【问题描述】:

我正在尝试在表中插入一个数组,但我需要将列表转换为 SQL Array 类型。我正在使用Connection#createArrayOf() 方法,但遇到异常。

我需要传递一个类型名称,但我不知道这是什么,我总是得到一个异常。该数组来自 VARCHAR。

如何解决这个插入数组?

代码

Object[] array = new Object[token.getCategories().size()];
array = token.getCategories().toArray();
pstmTokenInsert.setArray(1, conn.createArrayOf("VARCHAR", array));

堆栈跟踪

org.postgresql.util.PSQLException: Could not find array type for data type VARCHAR
at org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:73)
at org.postgresql.jdbc4.Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21)
at org.apache.commons.dbcp.DelegatingConnection.createArrayOf(DelegatingConnection.java:560)
at br.ifsp.da.data.TokenDAO.insertTokens(TokenDAO.java:37)
at br.ifsp.da.data.ProcessedPageInserter.loopInsertion(ProcessedPageInserter.java:44)
at br.ifsp.da.data.ProcessedPageInserter.call(ProcessedPageInserter.java:27)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

【问题讨论】:

  • 您使用的是 Oracle 吗? SQL 数组类型高度依赖于底层数据库。
  • 你能发布异常的堆栈跟踪吗? :)
  • @kocko 我发布了堆栈跟踪。
  • @DaveNewton 9.0-801 用于 Java 的 PostgreSQL 驱动程序

标签: java sql arrays postgresql


【解决方案1】:

【讨论】:

  • 谢谢楼主。帮了我很多。是一个简单的错误(这需要我几个小时),但我在任何地方都没有找到这些信息。谢谢。
  • 当我更改为 'varchar' 时出现此错误。 org.postgresql.util.PSQLException:错误:运算符不存在:字符变化 = 字符变化 [] 提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换
  • @Damith 您可以使用 =ANY 运算符代替 IN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多