什么 Java 库可以将 PostgreSQL 数组文字映射到 Java 数组或列表?

Der*_*har 3 java arrays postgresql

哪些第三方 Java 类库可用于将PostgreSQL 数组文字字符串映射到 Java 数组或字符串列表?

例如,假设我希望转换 PostgreSQL 数组文字字符串,例如

{ A, B, C }
Run Code Online (Sandbox Code Playgroud)

进入等效的 JavaList<String>Array<String>包含{ "A", "B", "C" }. 是否将PostgreSQL的JDBC驱动程序有一个类的方法来执行这种转换?

Cra*_*ger 5

当您可以java.sql.Array从 PgJDBC获取 a并调用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)
Run Code Online (Sandbox Code Playgroud)

您可以让 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)
Run Code Online (Sandbox Code Playgroud)

您可能需要或多或少复杂的变体,具体取决于您是仅获取一个 hstore 字段还是多个字段,您的所有值是否都是相同类型的数组等。在某些情况下,您需要执行单独的 SQL 调用解压缩值。