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

如何从Java列表创建SQL数组?,java,sql,arrays,postgresql,Java,Sql,Arrays,Postgresql,我试图在表中插入数组,但需要将列表转换为SQL数组类型。我正在使用连接#createArrayOf()方法,但遇到了一个异常 我需要传递一个类型名,但我不知道这是什么,我总是得到一个异常。数组来自VARCHAR 如何解决此问题以插入数组 代码 Object[] array = new Object[token.getCategories().size()]; array = token.getCategories().toArray(); pstmTokenInsert.setArray(1,

我试图在表中插入数组,但需要将列表转换为SQL数组类型。我正在使用
连接#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)
堆栈跟踪

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)

使用“varchar”而不是“varchar”。请参见

您正在使用Oracle吗?SQL数组类型高度依赖于基础数据库。能否发布异常的stacktrace?:)我想这会对你有帮助:@kocko我发布了stacktrace@DaveNewton 9.0-801的PostgreSQL Java驱动程序谢谢你,大师。帮了我很多忙。这是一个简单的错误(花了我几个小时),但我没有在任何地方找到这个信息。谢谢。当我改成“varchar”时,我发现了这个错误。org.postgresql.util.PSQLException:错误:运算符不存在:字符变化=字符变化[]提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型casts@Damith您可以使用=任意运算符,而不是在