Java 插入博士后';使用wildfly的json列

Java 插入博士后';使用wildfly的json列,java,json,postgresql,jdbc,wildfly,Java,Json,Postgresql,Jdbc,Wildfly,我正在运行一个web应用程序,它是一个RESTAPI,我正在使用wildfly 9.0.2和PostgreSQL。数据库连接使用最新的jdbc4.2驱动程序,jre是oracle的jr8 我按照这一点安装了jdbc,并使其运行良好,到目前为止,我使用wildfly管理控制台安装了数据源 因此,当我试图插入一个json字段时,问题出现了。我很快意识到JDBC没有一个直接的方法来插入json字段,比如字符串、整数、时间戳等。所以我在网上找到了一个我现在不记得的地方: oPGobject jsonOb

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

我按照这一点安装了jdbc,并使其运行良好,到目前为止,我使用wildfly管理控制台安装了数据源

因此,当我试图插入一个json字段时,问题出现了。我很快意识到JDBC没有一个直接的方法来插入json字段,比如字符串、整数、时间戳等。所以我在网上找到了一个我现在不记得的地方:

oPGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(new Gson().toJson(ctrlClienteComunicacao));
preparedStatement.setObject(++i,jsonObject);
这个解决方案工作得很好,因为我尝试从一个简单的主类运行它,我可以插入任何我想要的json,但是当我在wildfly上运行时尝试此代码时,我得到了这个类not found错误:

java.lang.NoClassDefFoundError: org/postgresql/util/PGobject
我的第一个atempt是从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使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上的驱动程序


对于我的英语和问题布局,我深表歉意。这是我的第一个问题。

因此,通过简单地将插入方法更改为现在需要任何postgres jdbc特定方法来解决这个问题,方法是:

将查询更改为此

INSERT INTO table (json_column) VALUES (to_json(?::json))
并将准备好的语句中的方法更改为:

 preparedStatement.setString(1, json);

这为我解决了问题,不确定这是否是最好/最有效的解决方案,但它确实有效。

org.postgres
依赖项添加到战争清单中为我解决了问题

下面是一个
maven
片段:


maven战争插件
org.postgres
下面是生成的
MANIFEST.MF
(参见最后一行):

清单版本:1.0
Archiver版本:丛式Archiver
建造人:dedek
创建人:ApacheMaven 3.3.3
构建Jdk:1.8.051
依赖项:org.postgres

听起来好像Wildfly中包含的JDBC驱动程序是一个过时的版本。为什么您认为使用Postgres当前的驱动程序不是一个“合适”的解决方案?这是最新的解决方案,正如我所做的一样,我在项目和wildfly中使用相同的.jar文件从头开始完整地配置wildfly来测试这一点。我成功地让它工作了,但没有使用Postgres的jdbc,而是将查询更改为:
值(?,?,to_json(?:json),?)
并将参数设置为String:
preparedStatement.setString(++i,json);
您应该添加它作为答案并接受它。这实际上很有意义,这正是我正在寻找的解决方案,我会在有机会时尝试一下。