java - 使用 wildfly 插入 Postgres 的 json 列

标签 java json postgresql jdbc wildfly

我正在运行一个 web 应用程序,它是一个 rest API,我正在使用 wildfly 9.0.2 和 PostgreSQL。数据库连接使用的是最新的jdbc4.2驱动,jre是oracle的jr8。

我按照这个 topic 安装了 jdbc ,到目前为止,它运行完美,我使用 wildfly 管理控制台安装了数据源。

因此,当我尝试插入一个 json 字段时,问题就来了。我很快意识到 JDBC 没有直接的方法来插入 json 字段,因为它有 String、Integer、Timestamp 等。所以我在网上找到了这个解决方案,我现在不记得了:

oPGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(new Gson().toJson(ctrlClienteComunicacao));
preparedStatement.setObject(++i,jsonObject);

这个解决方案工作正常,因为我尝试从一个简单的主类运行它,我可以插入任何我想要的 json,但是当我在 wildfly 上运行时尝试这个代码时,我得到了这个类未找到的错误:

java.lang.NoClassDefFoundError: org/postgresql/util/PGobject

我的第一个尝试是从 JDBC 库中删除提供的属性,以便将其包含在 .war 中。然后我得到了一个新的错误:

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.util.PGobject. Use setObject() with an explicit Types value to specify the type to use.

再尝试几次后,我意识到将 jar 包含在 war 中会使 Wildfly 将其部署为驱动程序。

[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) WFLYJCA0018: Started Driver service with driver-name = VirtualForum.war_org.postgresql.Driver_9_4

所以我尝试了一种不同的方法,在部署 war 时,我将数据源从原来的 pgsql 驱动程序更改为在应用程序部署期间启动的数据源并且它有效!我可以插入 json 字段.

但我认为这不是一个合适的解决方案,因为我更喜欢使用安装在 wildfly 上的驱动程序。

我为我的英语和问题布局道歉这是我的第一个问题。

最佳答案

org.postgres 依赖项添加到 war manifest 为我解决了这个问题。

这是一个 maven 片段:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Dependencies>org.postgres</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这里是生成的 MANIFEST.MF(见最后一行):

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dedek
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Dependencies: org.postgres

关于java - 使用 wildfly 插入 Postgres 的 json 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441201/

相关文章:

java - 如何查找字符串中的字符总数?

database-design - 我应该在以下情况下使用 PostgreSQL 数组类型吗

java - 正则表达式检测字符是否重复超过三次

java - 是什么让 rmi 服务器保持运行?

json - Swift 3 - 提取 JSON 数据

java - 如何在blackberry + java中获取json对象值

java - jackson 序列化没有正确处理单引号

PostgreSQL 通过终端安装和运行

postgresql - Postgres jsonb 使用更大的运算符在数组中搜索(使用 jsonb_array_elements)

java - 由于属性文件位置类型,应用程序或集成测试 Spring 上下文创建失败