哪些第三方 Java 类库可用于映射 PostgreSQL array literal字符串到 Java 数组或字符串列表?
例如,假设我想转换一个 PostgreSQL 数组文字字符串,例如
{ A, B, C }
进入等效的 Java List<String>
或 Array<String>
包含 { "A", "B", "C" }
. PostgreSQL JDBC driver有执行此转换的类方法吗?
最佳答案
当您可以从 PgJDBC 获取 java.sql.Array
并对其调用 getArray()
时,为什么要在 Java 中解析数组字符串文字直接获取原生 Java 数组?
在 Java 中解析数组文字似乎是一种不必要的复杂方法。
由于您从 hstore
中获取值作为数组文字,我想说您遇到了一些数据模型设计问题,因为 hstore 实际上只存储字符串值,因此存储数组文字是有点丑。我能理解在某些情况下它可能是可取的,至少在 Pg 得到改进的 json
支持之前是这样。
在那种情况下,我会让 PostgreSQL 为您解析数组文字。给定设置:
regress=# CREATE EXTENSION hstore;
CREATE EXTENSION
regress=# CREATE TABLE hstoretest ( test hstore );
CREATE TABLE
regress=# INSERT INTO hstoretest(test) VALUES ( hstore( ARRAY['a', 'b'], ARRAY[ ARRAY[1,2,3]::text, ARRAY[9,8,7]::text ] ) );
INSERT 0 1
regress=# INSERT INTO hstoretest(test) VALUES ( hstore( ARRAY['a', 'b'], ARRAY[ ARRAY[11,12,13]::text, ARRAY[99,88,77]::text ] ) );
INSERT 0 1
regress=# SELECT * FROM hstoretest ;
test
--------------------------------------
"a"=>"{1,2,3}", "b"=>"{9,8,7}"
"a"=>"{11,12,13}", "b"=>"{99,88,77}"
(2 rows)
您可以让 Pg 为您扩展和解析数组字面量,例如:
regress=# SELECT k, fetchval(test,k)::integer[] FROM (SELECT test, skeys(test) AS k FROM hstoretest) withkeys;
k | fetchval
---+------------
a | {11,12,13}
b | {99,88,77}
a | {1,2,3}
b | {9,8,7}
(4 rows)
您可能需要或多或少的复杂变体,具体取决于您是只获取一个 hstore 字段还是多个字段,您的所有值是否都是同一类型的数组等。在某些情况下,您需要做用于解包值的单个 SQL 调用。
关于java - 什么 Java 库可以将 PostgreSQL 数组文字映射到 Java 数组或列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107674/