哪些第三方 Java 类库可用于将PostgreSQL 数组文字字符串映射到 Java 数组或字符串列表?
例如,假设我希望转换一个 PostgreSQL 数组文字字符串,例如
{ A, B, C }
进入等效的 JavaList<String>
或Array<String>
包含{ "A", "B", "C" }
. PostgreSQL JDBC 驱动程序是否有一个类方法来执行这种转换?
哪些第三方 Java 类库可用于将PostgreSQL 数组文字字符串映射到 Java 数组或字符串列表?
例如,假设我希望转换一个 PostgreSQL 数组文字字符串,例如
{ A, B, C }
进入等效的 JavaList<String>
或Array<String>
包含{ "A", "B", "C" }
. PostgreSQL JDBC 驱动程序是否有一个类方法来执行这种转换?
java.sql.Array
当您可以从 PgJDBC中获取 a 并调用它以直接获取本机 Java 数组时,为什么要在 Java 中解析数组字符串文字getArray()
?
在 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 调用解包值。
对于谁需要从逻辑复制(pgoutput)中解析数组值:在这种情况下,在Craig Ringer的回答中使用sql方式非常好/熟悉/高性能,所以我写了一个类来解析它。