有哪些第三方Java类库可用于将PostgreSQL数组字面量字符串映射到Java字符串数组或列表中?
例如,假设我想要将PostgreSQL数组字面量字符串转换为:
{ A, B, C }
将其转换为等效的Java
List<String>
或Array<String>
,其中包含{"A", "B", "C"}
。PostgreSQL JDBC driver是否有一个类方法可以执行此转换?有哪些第三方Java类库可用于将PostgreSQL数组字面量字符串映射到Java字符串数组或列表中?
例如,假设我想要将PostgreSQL数组字面量字符串转换为:
{ A, B, C }
List<String>
或Array<String>
,其中包含{"A", "B", "C"}
。PostgreSQL JDBC driver是否有一个类方法可以执行此转换?java.sql.Array
并在其上调用getArray()
以直接获得本机Java数组呢?hstore
获取作为数组文字的值,因此我认为您有一个数据模型设计问题,因为hstore
实际上只存储字符串值,因此存储数组文字有点丑陋。我可以理解,在某些情况下可能会有这样的需要,至少在Pg获得改进的json
支持之前是这样。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)
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调用来解包值。
Map<String, String>
,在这种情况下,该值是数组文字。虽然此数组目前仅限于一维,但我希望解析多维数组。我可以编写解析器,但正如你所指出的那样,如果PgJDBC已经提供了解析器,则这可能会变得复杂和不必要。 - Derek Maharhstore
来看看如果将特定实体的所有属性移动到与其实体相同的行中的hstore
列中,查询性能如何改善。将数组键转换回行有点违背了这个目的。 - Derek Maharjson
类型最初是作为 "hstore 2" 开始的。 - Craig Ringer是的,有。看一下这个链接:http://www.postgresql.org/message-id/49107A7D.3050206@gmail.com。还有一篇有趣的文章在这里。那篇文章有一个评论,链接到一个有趣的GitHub项目(sproc-spring-mapper)。