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

Ren*_*ani 7 java sql arrays postgresql

我正在尝试在表中插入一个数组,但我需要将列表转换为SQL数组类型.我正在使用该Connection#createArrayOf()方法,但我得到了一个例外.

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

我怎么解决这个插入数组?

代码

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

堆栈跟踪

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)
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 19

使用"varchar"而不是"VARCHAR".请参阅http://grepcode.com/file/repo1.maven.org/maven2/postgresql/postgresql/9.0-801.jdbc4/org/postgresql/jdbc2/TypeInfoCache.java#TypeInfoCache.0types

  • 当我改为'varchar'时,我收到了这个错误.org.postgresql.util.PSQLException:错误:运算符不存在:字符变化=字符变化[]提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换 (2认同)