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

标签 java arrays postgresql

哪些第三方 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/

相关文章:

java - 在 XWiki 的子维基中注册基于 Java 的监听器

java - 两个 JFrame 之间交换 Swing 信息的模式

javascript - 如何根据数组中的对象数量创建按钮?

javascript - 访问数组值返回 'undefined' ,但我可以使用 console.dir() 查看这些值?

postgresql - postgresql 和 firebird 记录集的不同行为

Java NumberFormatException?

java - 尝试自学 Java GUI (Swing),应该是一个简单的解决方案

C++:在 cin.getline() 中使用指针

postgresql - 如何指定一个触发器函数只在表中有记录时才执行?

ruby-on-rails - 使用 jsonb 数组的 Rails (postgres) 查询