如何从Java列表创建SQL数组?

6

我正在尝试将一个数组插入到表中,但是我需要将列表转换为SQL数组类型。我正在使用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数组类型高度依赖于底层数据库。 - ManuPK
1
你能贴出异常的堆栈跟踪吗? :) - Konstantin Yovkov
我想这个链接对你会很有帮助:http://download.oracle.com/javase/tutorial/jdbc/basics/array.html - Konstantin Yovkov
@kocko,我已经发布了堆栈跟踪。 - Renato Dinhani
@DaveNewton发布了Java的PostgreSQL驱动程序9.0-801。 - Renato Dinhani
1个回答

18

谢谢您,大师。您帮了我很多。这只是一个简单的错误(让我花费了几个小时),但我在任何地方都没有找到这个信息。谢谢。 - Renato Dinhani
2
当我将类型更改为“varchar”时,出现了以下错误。org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = character varying[] 提示:没有匹配给定名称和参数类型的运算符。您可能需要添加显式类型转换。 - Damith Ganegoda
1
@Damith 你可以使用=ANY运算符代替IN。 - JuliuszJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接