2010-04-26 40 views
5

我想使用PostgreSQL 8.4和JDBC4驅動程序的SQL數組類型。在JDBC/PostgreSQL中使用SQL數組類型更新ResultSets

我列定義如下:

nicknames   CHARACTER VARYING(255)[] NOT NULL 

,我想正是如此更新:

row.updateArray("nicknames", 
    connection.createArrayOf("CHARACTER VARYING", p.getNicknames().toArray())); 

p.getNicknames()返回List<String>

,但我所看到的:

org.postgresql.util.PSQLException: 無法找到名稱爲CHARACTER VARYING的 的服務器陣列類型。在 org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:67) 在 org.postgresql.jdbc4.Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21)

遺憾的是,數組類型別不像是會做到有據可查 - 我還沒有發現究竟提及如何對PostgreSQL做到這一點的任何地方:(

任何想法

回答

8

更改「字符改變」到「VARCHAR」命令行psql?客戶端接受類型名稱「CHARACTER VARYING」,但是JDBC驅動程序可以不是。

org.postgresql.jdbc2.TypeInfoCache的來源包含接受的類型名稱列表。

考慮含糊措辭合同的一部分爲createArrayOf()

typeName爲其可以是內置型,用戶定義的類型的名稱或標準SQL數據庫特定的名稱此數據庫支持的類型。

我總是假定驅動程序實現者將短語「數據庫特定名稱」和「此數據庫支持的」解釋爲「接受任何你想要的」。但是也許你可以把它作爲針對Postgres JDBC驅動程序的錯誤。

祝你好運。

+0

Ach,你說得對。我認爲「特定於數據庫」意味着「不管數據庫使用什麼」,正如你指出的那樣是錯誤的。 另外值得注意的是,它似乎*是區分大小寫,不像其他所有事情。謝謝! – 2010-04-26 20:29:45